[vox-tech] perl question - arrays and lists

Matt Roper vox-tech@lists.lugod.org
Thu, 8 May 2003 13:27:57 -0700


On Thu, May 08, 2003 at 01:12:43PM -0700, Peter Jay Salzman wrote:
> there's some code i wrote that does something like:
> 
> sub blah()
> {
>    foreach (@foobar)
>    {
>       push @array, ($foo, $bar);
>    }
>    
>    return @array;
> }
> 
> so i'm returning an array whose elements are each a list of two items.
> the receiving code is something like:

The perl push command pushes each element of the second parameter onto
the array (see "perldoc -f push" for details).

...
> when what i really want is;
> 
>    $barfoo[0] = ("hello", "dolly");
> 
> i know that arrays can hold lists, but i must not be doing it correctly.
> do i need to do this with references?

Yeah, perl arrays can only hold scalars, so if you want an array of
arrays, you actually need an array of references to arrays.  Enclosing
the 2-element arrays in square brackets instead of parentheses will
return a reference which you can then push onto @array for the desired
effect.  E.g.

    push @array, [$foo, $bar];

Then later you can do:

    print $barfoo[0][0];     # "hello"
    print $barfoo[0][1];     # "dolly"


Matt

-- 

*************************************************
* Matt Roper <matt@mattrope.com>                *
* http://www.mattrope.com                       *
* PGP Key: http://www.mattrope.com/mattrope.asc *
*************************************************