#! perl -slw
use strict;
use List::Comprehensions;
sub expandDims {
return unless ref $_[ 0 ] eq 'ARRAY';
return [ 0 .. $#{ $_[ 0 ] } ], expandDims( $_[ 0 ][ 0 ] );
}
my $ref2D = [ map [ 0 .. 2 ], 0..3 ];
my $ref3D = [ map [ map [ 0..1 ], 0..2, ], 0..3 ];
my $ref4D = [ map [ map [ map [ 0..1 ], 0..2, ], 0..3 ], 0..4 ];
my $ref = ( $ref2D, $ref3D, $ref4D )[ rand 3 ];
comp1 {
my $val = $ref;
$val = $val->[ $_ ] for @_;
printf "[%s] := %s\n", join('][', @_), $val;
} expandDims( $ref );
####
c:\test>junk4
[0][0] := 0
[0][1] := 1
[0][2] := 2
[1][0] := 0
[1][1] := 1
[1][2] := 2
[2][0] := 0
[2][1] := 1
[2][2] := 2
[3][0] := 0
[3][1] := 1
[3][2] := 2
c:\test>junk4
[0][0][0] := 0
[0][0][1] := 1
[0][1][0] := 0
[0][1][1] := 1
[0][2][0] := 0
[0][2][1] := 1
[1][0][0] := 0
...
[3][0][0] := 0
[3][0][1] := 1
[3][1][0] := 0
[3][1][1] := 1
[3][2][0] := 0
[3][2][1] := 1
c:\test>junk4
[0][0][0][0] := 0
[0][0][0][1] := 1
[0][0][1][0] := 0
[0][0][1][1] := 1
[0][0][2][0] := 0
...
[4][3][0][0] := 0
[4][3][0][1] := 1
[4][3][1][0] := 0
[4][3][1][1] := 1
[4][3][2][0] := 0
[4][3][2][1] := 1
####
} sub{ "@_" =~ /2/ ? () : @_ }, expandDims( $ref );
####
c:\test>junk4
[0][0] := 0
[0][1] := 1
[1][0] := 0
[1][1] := 1
[3][0] := 0
[3][1] := 1