@array = reverse @array; for ( reverse 0.. $#array ) { splice @array, $_, 1, func( $array[$_] ); } @array = reverse @array; #### for( 0 .. $#array ) { my @results = func( $array[$_] ); $array[$_] = @results > 1 ? $results[0] : \@results; } @array = map{ ref $_ ? (@$_) : $_ } @array;