my @xx = ['A',1,['B',2,3,4],5,['C',6,['D',7,8,9]]]; traverse("", @xx); sub traverse { my $d = $_[0] . "/" . $_[1][0]; for my $i (1 .. @{$_[1]}-1) { if (ref $_[1][$i] eq 'ARRAY') { traverse($d, $_[1][$i]); } else { print $d . "/" . $_[1][$i] . "\n"; } } } #### /A/1 /A/B/2 /A/B/3 /A/B/4 /A/5 /A/C/6 /A/C/D/7 /A/C/D/8 /A/C/D/9 #### Can't use string ("A") as an ARRAY ref while "strict refs" in use at test.pl line 6