If I understand right (from looking at your example code in the OP), you want a structure that looks like this:
@AoA = (
[ $MDA[0][0][0], $MDA[0][0][1], ... , $MDA[0][2][2] ],
[ $MDA[1][0][0], $MDA[1][0][1], ... , $MDA[1][2][2] ],
[ $MDA[2][0][0], $MDA[2][0][1], ... , $MDA[2][2][2] ],
);
In other words, $AoA[x] contains all the elements of the form $MDA[x][*][*], if you follow my notation.
I don't see how this corresponds with your "Expected" data, but one thing I noticed is that you should make the following change:
# my $val = Dive( \@MDA, @indices );
# push @{$AoA[$level]}, @$val;
my $val = Dive( $MDA[$level], @indices );
push @{$AoA[$level]}, $val;
Because when dealing with $AoA[$level], you only care about things starting form $MDA[$level]. Also, then $val will not be an arrayref like it was before.
There are many equivalent ways to write this, but another way is the following: Here you can replace the entire foreach loop with this:
NestedLoops(
[ ( [0..$dimension-1] ) x ($depth-1) ],
sub {
my @indices = @_;
my $val = Dive( \@MDA, @indices );
push @{ $AoA[$indices[0]] }, $val;
}
);
To explain this, it takes everything of the form $MDA[a][b][c] and pushes it onto the array at $AoA[a].
|