http://qs1969.pair.com?node_id=468035


in reply to Cause of an endless loop?

The problem was that in your original code you were treating $u ambiguously: both as a hashref and as an array index. The code below fixes it:

use strict; my $name = 'test'; my %test; push @{$test{"$name"}}, { name => 'me',age => 'here' }; push @{$test{"$name"}}, { name => 'meAgain',age => 'Nowhere' }; push @{$test{"two"}}, { name => 'you',age => 'there' }; push @{$test{"two"}}, { name => 'AndYou',age => 'AndThere' }; my ($s,$u,$n); foreach $s (keys %test) { foreach $u ( 0..$#{$test{$s}} ) { foreach $n (keys %{$test{$s}[$u]}) { print "$s $u $n: $test{$s}[$u]{$n} - \n"; } } } __END__ test 0 name: me - test 0 age: here - test 1 name: meAgain - test 1 age: Nowhere - two 0 name: you - two 0 age: there - two 1 name: AndYou - two 1 age: AndThere -

Update: My original solution fixed the infinite looping, but produced an output different from what I think the OP intended; the version above fixes that.

BTW, the price of eternal vigilance is using warnings. With use warnings, this is what your original code produces:

Use of reference "HASH(0x814ccf0)" as array index at 468034.pl line 20 +. Out of memory!

the lowliest monk