You were close: Your problem is the push(@hashfeld,%hierhash) statement. It's turning your hash into a list and pushing the entire list onto your array. You want to push a hash *reference*, like push(@hashfeld, {%hierhash}). This creates a new hash reference (the curly braces) and copies the hash into the reference. Then it pushes the *reference* onto your @hashfeld array.
Here's your program with just a couple tweaks:
$ perl pm_1195995.pl #!/usr/bin/perl use strict; use warnings; use Data::Dump 'pp'; my %hierhash; my @feld; my @hashfeld; my $wert; @hashfeld = (); %hierhash = &dofn(0,5,1); print "1 $hierhash{'var2'}[3] \n"; push(@hashfeld, { %hierhash }); %hierhash = &dofn(0,5,2); print "2 $hierhash{'var2'}[3] \n"; push(@hashfeld, { %hierhash }); $wert = $hashfeld[0]->{'var2'}[3]; print "$wert \n"; print pp(\@hashfeld), "\n\n"; sub dofn () { my ($i, $ivon, $ibis, $imal); my %hashfn; $ivon = $_[0]; $ibis = $_[1]; $imal = $_[2]; for ($i = $ivon; $i < $ibis; $i++) { push(@{$hashfn{'var1'}}, $i*$imal); push(@{$hashfn{'var2'}}, $i*$imal*10.); push(@{$hashfn{'var3'}}, $i*$imal*20.); } return %hashfn; } $ perl pm_1195995.pl 1 30 2 60 30 [ { var1 => [0 .. 4], var2 => [0, 10, 20, 30, 40], var3 => [0, 20, 40, 60, 80], }, { var1 => [0, 2, 4, 6, 8], var2 => [0, 20, 40, 60, 80], var3 => [0, 40, 80, 120, 160], }, ]
...roboticus
When your only tool is a hammer, all problems look like your thumb.
In reply to Re: how to access array of hash with arrays?
by roboticus
in thread how to access array of hash with arrays?
by buchi2
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |