in reply to Re: how to access array of hash with arrays?
in thread how to access array of hash with arrays?

OK, I got a bit bored, so I tweaked up your program a little.

First, I'd suggest always putting use strict; and use warnings; at the start of your programs to pick up some free error-checking.

Next, you're using function prototypes by putting parenthesis on the sub dofn () { line--Don't do that until you learn how prototypes work in perl. (Once you *do* learn that, you'll find that prototypes are only rarely desireable.).

Third: many people find it cleaner to declare the variable when it's needed, rather than at the top of the block. Declaring the variables later limits their scope and makes it simpler to reason about your code.

Fourth, you can declare your function arguments *and* load them at the same time using an array assignment.

Fifth: you don't always need to use parenthesis on function calls, such as push.

Finally, rather than returning a hash, you could return a hash reference from your function, so you don't need to create a hash reference when putting the data in the array each time.

Making these few changes gives you:

$ cat pm_1195995.pl #!/usr/bin/perl use strict; use warnings; use Data::Dump 'pp'; my @hashfeld = (); push @hashfeld, dofn(0,5,1); print "1 $hashfeld[0]{var2}[3]\n"; push @hashfeld, dofn(0,5,2); print "2 $hashfeld[1]{var2}[3]\n"; my $wert = $hashfeld[0]->{'var2'}[3]; print "$wert \n"; print pp(\@hashfeld), "\n\n"; sub dofn { my ($ivon, $ibis, $imal) = @_; my $hashfn; for (my $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], }, ]

After making

...roboticus

When your only tool is a hammer, all problems look like your thumb.