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; }