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


in reply to Multidimensional arrays within arrays

Perhaps the following structure would be helpful:

use strict; use warnings; use Data::Dumper; my @list = 1 .. 15; my @array; my $i = 1; while ( my ( $i, $j, $k ) = splice @list, 0, 3 ) { push @array, [ [ $i, $j, $k ], [ 44, 55, 66, 22 ] ]; } for my $arr (@array) { print "@{ $arr->[0] }: @{ $arr->[1] }\n"; } print "\n", Dumper \@array;

Output:

1 2 3: 44 55 66 22 4 5 6: 44 55 66 22 7 8 9: 44 55 66 22 10 11 12: 44 55 66 22 13 14 15: 44 55 66 22 $VAR1 = [ [ [ 1, 2, 3 ], [ 44, 55, 66, 22 ] ], [ [ 4, 5, 6 ], [ 44, 55, 66, 22 ] ], [ [ 7, 8, 9 ], [ 44, 55, 66, 22 ] ], [ [ 10, 11, 12 ], [ 44, 55, 66, 22 ] ], [ [ 13, 14, 15 ], [ 44, 55, 66, 22 ] ] ];

A reference to a reference to three values from @list and a reference to a four-element list is push onto @array. The for loop iterates through the list of references, and prints their dereferenced values. A dump of @array shows the structure.

Within the for loop, elements can be access as follows:

[ [ $i, $j, $k ], [ 44, 55, 66, 22 ] ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | | | | | | | | | | + - $arr->[1][3] | | | | | | | | + - $arr->[1][2] | | | | | | | + - $arr->[1][1] | | | | | | + - $arr->[1][0] | | | | | + - $arr->[1] | | | | + - $arr->[0][2] | | | + - $arr->[0][1] | | + - $arr->[0][0] | + - $arr->[0] + - $arr