sort { $a->[1] <=> $b->[1] } map { $arr[$_] >= 0 ? [ $_, max_prime_factor($arr[$_]) ] : () } 0 .. $#arr #### sort { max_prime_factor($arr[$a]) <=> max_prime_factor($arr[$b]) } grep { $arr[ $_ ] >= 0 } 0 .. $#arr