sub load { my ($qfn) = @_; open(my $fh, '<', $qfn) or die("Can't open file \"$qfn\": $!\n"); my %data; local *_; while (<$fh>) { my ($id) = /^(\S+)/ or next; die("Duplicate key $id\n") if exists($data{$id}); $data{$id} = $_; } return \%data; } my $master = eval { load(...) } or die("Can't load master db: $@"); my $new = eval { load(...) } or die("Can't load new db: $@"); my %ids; for my $id (keys(%$master), keys(%$new)) { next if $ids{$id}++; if (!exists($new->{$id})) { print("-$master->{$id}"); } elsif (!exists($master->{$id})) { print("+$new->{$id}"); } elsif ($master->{$id} ne $new->{$id}) { print("-$master->{$id}"); print("+$new->{$id}"); } else { print("=$master->{$id}"); } }
Update: Added missing parens and fixed var name as per reply.
In reply to Re: Search, Match, Compare, and Report
by ikegami
in thread Search, Match, Compare, and Report
by kirkbrown
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |