@ar = grep { my $all_matched=1; for my $p (@patterns) { last unless $all_matched = /$p/; } $all_matched; } @ar; #### sub filter_stuff { my $stuff = shift; my @patterns = @_; # Backwards iteration trick: # use negative of negative loop variable as index for my $i (-$#$stuff..0) { for (@patterns) { splice(@$stuff, -$i, 1) && last unless $stuff->[-$i] =~ /$_/; } } } #### for (my $i=$#$stuff; $i >= 0; --$i) { #use $i as index }