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!
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|