Three problems.
First, $d doesn't contain what you think it does, whatever that is.
foreach my $d (@{$array_of_hashes}) { print $d[0]{'one1'}; }
It contains the element at each index of the array (in turn). In other words, it contains a reference to a hash. Fix:
foreach my $h (@{$array_of_hashes}) { print $h->{'one1'}; }
Secondly, you reference the array @array_of_hashes even though no such array exists.
print $array_of_hashes[0]{'one1'}; print $array_of_hashes[0]{'one2'}; print $array_of_hashes[1]{'two1'}; print $array_of_hashes[1]{'two2'};
Had you used use strict as you should, you would have gotten an error. Fix:
print $array_of_hashes->[0]{'one1'}; print $array_of_hashes->[0]{'one2'}; print $array_of_hashes->[1]{'two1'}; print $array_of_hashes->[1]{'two2'};
See References Quick Reference.
Finally, your array contains two references to the same hash.
my %hash; my @array; ... push @array, \%hash; ... push @array, \%hash;
Fix:
my @array; { my %hash; ... push @array, \%hash; } { my %hash; ... push @array, \%hash; }
In reply to Re: Passing an array of hashes to a subroutine
by ikegami
in thread Passing an array of hashes to a subroutine
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |