my @foo = ( [0, 1, 2, 3, 4, 5], [0, 1, 2], [0, [ 0, 1, 2, 3 ]] ); my @maxlength = (); figger_out_depth(0, @foo); print "max dimensions:\n"; print " $_: $maxlength[$_]\n" foreach (0..$#maxlength); sub figger_out_depth { my $depth = shift; $maxlength[$depth] = 0 unless(defined($maxlength[$depth])); foreach my $element (@_) { figger_out_depth($depth + 1, @{$element}) if(ref($element) eq 'ARRAY'); } $maxlength[$depth] = $#_ + 1 if($#_ >= '0'.$maxlength[$depth]); }