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.


In reply to Re^2: how to access array of hash with arrays? by roboticus
in thread how to access array of hash with arrays? by buchi2

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.