Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I have he following code
use strict; use warnings; my $arref = [ ['text1','Num1'], ['text2','Num2'], #and so on ];
I'd like to be able to call a function for each array, passing the values to the function. Can someone please advise on how to do this or where to read up on working with such data? Thanks

Replies are listed 'Best First'.
Re: Perl Array of array - How to call a function for each array?
by toolic (Bishop) on Jul 07, 2011 at 13:59 UTC
    Dereference the arrays:
    use warnings; use strict; my $arref = [ ['text1','Num1'], ['text2','Num2'], #and so on ]; for (@{ $arref }) { print "----\n"; foo($_); } sub foo { my $aref = shift; for (@{ $aref }) { print "$_\n"; } } __END__ ---- text1 Num1 ---- text2 Num2
Re: Perl Array of array - How to call a function for each array?
by shevek (Beadle) on Jul 08, 2011 at 04:54 UTC
    I would read up on passing array references to subroutines and maybe map. A quick google search should provide plenty of hits. In the following code you will find two subroutines-- the first is used from the foreach and the second from the map function. These are two different ways to pass your arrays to a subroutine. I have tried to keep the code short and simple. Feel free to ask for any clarifications.
    use strict; use warnings; my $arref = [['text1','Num1'],['text2','Num2']]; sub printargs_one { my ($arg1) = (shift); my ($arg2) = (shift); print $arg1 , "," , $arg2 , "\n"; } sub printargs_two { my ($arg1,$arg2) = @{$_}; print $arg1 , "," , $arg2 , "\n"; } foreach (@{$arref}){ printargs_one(${$_}[0],${$_}[1]); } map { printargs_two $_ } @{$arref};
      map in void context? For shame!

      foo(@$_) for @$aref

        map in void context? For shame!

        Use a modern perl, map in void context is free