Re: [vox-tech] perl question - arrays and lists
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [vox-tech] perl question - arrays and lists
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.
Actually, you're not. The documentation for "push" says:
Treats ARRAY as a stack, and pushes the values of LIST onto the end of
ARRAY. The length of ARRAY increases by the length of LIST.
The above code is equivalent to:
foreach(@foobar)
{
push @array, $foo;
push @array, $bar;
}
> the receiving code is something like:
>
> my @barfoo = blah();
>
> what i've found is that @barfoo is no longer an array of lists. the
> lists appear to be "flattened out".
>
> so in the previous example, if there's one element of @foobar and $foo
> is "hello" and $bar is "dolly", then what i see is:
>
> $barfoo[0] is "hello";
> $barfoo[1] is "dolly";
>
> 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?
Yep. Try push @array, [$foo, $bar].
--
Samuel Merritt
OpenPGP key is at http://meat.andcheese.org/~spam/spam_at_andcheese_dot_org.asc
Information about PGP can be found at http://www.mindspring.com/~aegreene/pgp/
Attachment:
pgp00013.pgp
Description: PGP signature
|