#code fragment leaving out parseing, reporting, use strict etc. my ($leftkey,$leftvalue) = split_line(scalar ); my ($rightkey,$rightvalue) = split_line(scalar ); # work through both files sequentially matching advances by key while(defined($leftkey) and defined($rightkey)) { my $compare = $leftkey cmp $rightkey; if($compare == 0) { if ($leftvalue ne $rightvalue) { value_diff($leftkey, $leftvalue, $rightkey, $rightvalue); } ($leftkey,$leftvalue) = split_line(scalar ); ($rightkey,$rightvalue) = split_line(scalar ); next; } elsif($compare > 0) { missing_left($rightkey,$rightvalue); ($rightkey,$rightvalue) = split_line(scalar ); next; } else { missing_right($leftkey,$leftvalue); ($leftkey,$leftvalue) = split_line(scalar ); next; } } # are there missing items at end of the files? while(defined($leftkey)) { missing_right($leftkey,$leftvalue); ($leftkey,$leftvalue) = split_line(scalar ); } while(defined($rightkey)) { missing_left($rightkey,$rightvalue); ($rightkey,$rightvalue) = split_line(scalar ); }