for my $phrase (@phrases) { for my $filter (@filters) { my $pos = 0; for (;;) { $pos = index($phrase, $filter, $pos); last if $pos < 0; substr($phrase, $pos, length($filter), ''); } } } #### my ($filter_re) = map qr/$_/, join '|', map quotemeta, @filters; for my $phrase (@phrases) { $phrase =~ s/$filter_re//ig; } #### use Regexp::List qw( ); my $filter_re = Regexp::List ->new(modifiers => 'i') ->list2re(@filters); for my $phrase (@phrases) { $phrase =~ s/$filter_re//g; }