Why do you open file2 for every key in %hash1, go through that file from start to end to only look at the key at one line?
It suffices to open file2 once, read in key/value pairs (as you did with file1); whilst doing so you can find out whether the current key exists in file1:
Now you have %hash1 and %hash2 populated; you can iterate over the key lists and see if they exist in each other, and if so, whether their values are identical:open TWO, '<', $FILE2; # better be explicit ;-) while (<TWO>) { chomp; # correct indent level is here. my ($key,$value) = split /\s+/,$_; print "$key NOT IN FILE 1\n" unless $hash1{$key}; $hash2{$key} = $value; }
foreach my $key (keys %hash1) { if(exists($hash2{$key}) { if($hash1{$key} == $hash2{$key}) # '==' if numeric, 'eq' if + string { ... } else { ... } } else # this is the case you missed - $key not in file2 { ... } }
--shmem
_($_=" "x(1<<5)."?\n".q·/)Oo. G°\ /
/\_¯/(q /
---------------------------- \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
In reply to Re: iterating through a hash?
by shmem
in thread iterating through a hash?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |