in reply to Re^4: Parsing XML w/ Attributes
in thread Parsing XML w/ Attributes

Good suggestion (++) on ForceArray => ['process']. I'm not quite sure I see the benefit of each() over foreach() though. Is it the syntax that you like better, or is there an inherit benefit that I'm not aware of?

Replies are listed 'Best First'.
Re^6: Parsing XML w/ Attributes
by Jenda (Abbot) on Dec 20, 2007 at 18:04 UTC

    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 :-)