use strict; use warnings 'all'; my ($first, $second) = qw /first second/; open my $f1h => $first or die "open $first: $!\n"; open my $f2h => $second or die "open $second: $!\n"; my %first = reverse map {/(\d+)\s+\w+\s+\d+\s+\d+:\d+\s+(.*)/} grep {/\.o$/} <$f1h>; my %second = reverse map {/(\d+)\s+\w+\s+\d+\s+\d+:\d+\s+(.*)/} grep {/\.o$/} <$f2h>; my ($file, $size); print "$file: $size <-> $second{$file}\n" while +($file, $size) = each %first;