#!/usr/bin/perl use Benchmark; use strict; timethese (100000, { 'recursion' => q! sub depth { return 0 unless ref $_[0] eq 'ARRAY'; return depth( ${$_[0]}[0] ) + 1; }; my $array = [ [ [ 1 ], [ 1 ] ], [ [ 1 ], [ 1 ] ]]; my $result = depth($array); !, 'loop' => q! sub depth { my $array = shift; my $count = 0; while (ref $array eq 'ARRAY') { $array = ${$array}[0]; ++$count; } return $count; } my $array = [ [ [ 1 ], [ 1 ] ], [ [ 1 ], [ 1 ] ]]; my $result = depth($array); ! });