#! 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