in reply to Action on each key/value pair in a hash
Hi,
Its because hashes have only one internal iterator
my %hash = 1..4; my $stop = 0; while( my( $k, $v ) = each %hash ){ $stop++; print "# $k $v\n"; while( my( $kk, $vv ) = each %hash ){ print "## $kk $vv\n"; } die if $stop > 2; } __END__ # 1 2 ## 3 4 # 1 2 ## 3 4 # 1 2 ## 3 4 Died at - line 9.
First loop's each starts the iterator,
The second loop's each continues the iterator until the end is reached, when the iterator resets
then the first loop's each starts iterator again
Iterator can also be reset with keys
$ perl -le" %f=1..4; while( each %f ){print $g++; } " 0 1 $ perl -le" %f=1..4; while( each %f ){print $g++; keys %f; die if $g > + 5; } " 0 1 2 3 4 5 Died at -e line 1.
YAML::Syck::DumpFile uses keys/each in order to copy the hash, thus it ends up resetting the internal iterator
Maybe you want to dump the $v variable instead of the $hash? Or just dump the $hash outside of a loop?
|
|---|