sub flatten { my ($LoL) = @_; my @flat; for my $arr (@$LoL) { if ( ref $arr ) { push(@flat,flatten($arr)); } else { push(@flat,$arr); } } return @flat; } my @arr = ([1,2],[3,4,[5,6]],7); my @list = flatten(\@arr); print "@list\n";