#!/usr/bin/env perl use strict; use warnings; my $log_cmd = "git log -z --pretty=format:'%H\n%b'"; local $/ = "\0"; open(my $log_fh, '-|', $log_cmd) or die "Can't start git log: $!"; while (<$log_fh>) { chomp; my ($hash, $body) = split(/\n/, $_, 2); print($hash, "\n") if ($body =~ /\A\s*(?:[^:\n]+: +[^\n]+\n?)*\s*\Z/); }