http://www.perlmonks.org?node_id=495500


in reply to What do I do wrong? I want an array of arrays

Where am I wrong?

almost every line? :)

Let's deal with this by running the program. first trun on strict and wranings warnings. See my first 2 lines in the code

use strict; use warnings; my @b; my @c={ 22,44,55}; my @d={ "yy","tt"}; $b[0]=@c; # are you trying to create 2-D array? $b[1]=@d; my @e= $b[1]; # i think you want b as 2-D array print "<$e[0]>\n";

when you run it as is you get this warning

Odd number of elements in anonymous hash at nov line 7.<1> Once you change {} to  () the code works but it does not do what you want. See $b[0] is a scalar and an array when evaluated under the scalar context returns the lenght of the array so bascially  $b[0] = @c; will put 3 into $b[0] or the first element of b.

If you want to do 2-D arrays you want to send them as references.

The code below does that

use strict; use warnings; my @b; my @c=( 22,44,55); # changed to () my @d=( "yy","tt"); # changed to () $b[0]=\@c; # \@ creates a reference to the array @c. $b[1]=\@d; my @e= @{$b[1]}; # $b[1] is an array ref so use @{} to get back +the list. print "<$e[0]>\n";

output:

<yy>

hope this helps