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


in reply to How cand I find each dimension x,y,z of a 3D arrays

This code will recurse through the elements, and print the number of array-elements for each array in your structure. Will not decent hashes but can be hacked a bit to do that as well.
use strict; my @a = ([([0..3] ) x 4]) x 3; arraylength( \@a ); sub arraylength{ my $a = shift; my $dim = 0; _length( $a, $dim ); } sub _length{ my $a = shift; my $dim = shift; if ( ref( $a ) =~ /ARRAY/ ){ print "\t" x $dim; print "dim $dim -> ".(scalar @$a)." elements"; print "\n\n" if $dim == 0; print "\n" if $dim == 1; _length( $_, $dim + 1) for ( @$a ); print "\n"; } }
This example prints:
dim 0 -> 3 elements dim 1 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 1 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 1 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements dim 2 -> 4 elements

Replies are listed 'Best First'.
Re: Answer: How cand I find each dimension x,y,z of a 3D arrays
by ton (Friar) on Apr 09, 2001 at 20:57 UTC
    Very cool. But can I make one small suggestion? Use this function for length:
    sub _length{ my $a = shift; my $dim = shift; if ( ref( $a ) =~ /ARRAY/ ){ print "\t" x $dim; print "dim $dim -> ".(scalar @$a)." elements"; print "\n" if $dim == 0; print "\n"; _length( $_, $dim + 1) for ( @$a ); } }
    It's exactly the same logic, but prints newlines a little differently. Otherwise, you don't get the nice formatting for arrays with four or more dimensions.