my @x = qw( eenie meenie minie moe );
my @y = cull { /m.*nie/ } @x;
print "@y\n";
print "@x\n";
__END__
meenie minie
eenie moe
####
my @x = grep { /m.*nie/ } qw( eenie meenie minie moe );
my @y = cull { /m.*nie/ } qw( eenie meenie minie moe );
##
##
my @y = cull sub { /m.*nie/ }, @x;
my @y = cull( sub { /m.*nie/ }, @x );
##
##
for my $i ( reverse 0 .. $#$array ) {
##
##
sub cull (&\@) {
my ( $test, $array ) = @_;
my @culled;
for ( my $i = $#$array; $i > -1; --$i ) {
local $_ = $array->[ $i ];
unshift @culled, splice @$array, $i, 1 if $test->();
}
return @culled;
}