sub cull (&@) { my ( $test, @array ) = @_; my @culled; for my $i ( reverse 0 .. $#array ) { local $_ = $array[ $i ]; unshift @culled, splice @array, $i, 1 if $test->(); } return @culled; }