use Data::Dumper; my @names = (1, 2, 3, [4, 5, 6, [7, 8, 9], 10], 11, 12, [13, 14] ); print Dumper(@names); my $reved = rev_arr5(\@names); print Dumper(@names); print Dumper(@$reved); # less than 80 col! yay! sub rev_arr5 { return [map { ref eq 'ARRAY' ? rev_arr5($_) : $_ } reverse @{shift()}]; } sub rev_arr2a { @{$_[0]} = map { ref eq 'ARRAY' ? rev_arr2a($_) : $_ } reverse @{$_[0]}; } sub rev_arr4 { my $arr = [reverse @{shift()}]; foreach (@$arr) { if ( ref $_ eq 'ARRAY' ) { $_ = rev_arr4 ($_); } } return $arr; }