in reply to iterating through a hash?
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}
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: iterating through a hash?
by Cristoforo (Curate) on Sep 17, 2006 at 20:22 UTC | |
|
Re^2: iterating through a hash?
by graff (Chancellor) on Sep 17, 2006 at 21:28 UTC | |
|
Re^2: iterating through a hash?
by Anonymous Monk on Sep 17, 2006 at 10:23 UTC |