my @level1 = ( [1, 2, 3, 4, 5], [6, 7, 8, 9, 10] ); #### for (my $i = 0; $i < @level1; $i++) { for (my $j = 0; $j < @{$level1[$i]}; $j++) { print STDOUT "\$i: " . $i . " \$j: " . $j . " value: " . $level1[$i][$j] . "\n"; } } #### my @level1 = ( [ 1, 2, 3, [4, 5] ], 6, 7, [ 8, [9, [10] ] ], ); &read_array(\@level1); exit 0; sub read_array { my $array_reference = shift; foreach (@$array_reference) { if (ref($_) eq 'ARRAY') { &read_array($_); } else { print $_ . "\n"; } } }