It's the fact that you can name both the key and the value from the hash as you iterate so you do not have to use $hash{$key}, but instead have just $value. Which is especially handy if that hash is not in a variable, but rather is part of a more complex datstructure. So that instead of
foreach my $key (keys %{$data->{blah}[$idx]{blih}}) {
print "$key : $data->{blah}[$idx]{blih}{$key}\n";
}
you have just
while (my ($key, $value) = each %{$data->{blah}[$idx]{blih}}) {
print "$key : $value\n";
}
In that example it did not make a big difference especially because the value was used only once, but it may be handy. Especially if you find yourself doing something like
foreach my $key (keys %{$data->{blah}[$idx]{blih}}) {
my $value = $data->{blah}[$idx]{blih}{$key};
...
}
Of course you have to keep in mind that the two are not equivalent. The $value created in the last snippet is a copy, the $value created by each() is an alias. Which makes a huge difference if you modify it :-)
|