use strict; use warnings; my @array = ( 3, 13, 73, 4, 29, 38 ); print qq{Before:\n}, qq{ @array\n}; my $rcExtract = sub { my $toTest = shift; return $toTest > 31 ? 1 : 0; }; my @extracted = reverse map { splice @array, $_, 1 } grep { $rcExtract->( $array[ $_ ] ) } reverse 0 .. $#array; print qq{After:\n}, qq{ @array\n}, qq{ @extracted\n}; #### Before: 3 13 73 4 29 38 After: 3 13 4 29 73 38