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"; } }