/((msg|vacation.msg)|a(cation.msg|t(ation.msg|ition .msg))|catation.msg|g|i(on.msg|tion.msg)|msg|n.msg|on.msg|sg|t(ation. msg|i(on.msg|tion.msg))|vacation.msg)/ # first, rewrite it using the /x modifier: / ( (msg |vacation.msg ) |a (cation.msg |t (ation.msg |ition.msg ) ) |catation.msg |g |i (on.msg |tion.msg ) |msg |n.msg |on.msg |sg |t (ation.msg |i (on.msg |tion.msg ) ) |vacation.msg )/x #### my @remove = qw( msg vacation.msg acation.msg atation.msg atition.msg catation.msg g ion.msg ition.msg msg n.msg on.msg sg tation.msg tion.msg tition.msg vacation.msg ); my $vacation_re = join "|", @remove; $vacation_re = qr/$vacation_re/; #### #!/usr/bin/perl -w use strict; my $good_re = qr/((msg|vacation.msg)|a(cation.msg|t(ation.msg|ition.msg))|catation.msg|g|i(on.msg|tion.msg)|msg| n.msg|on.msg|sg|t(ation.msg|i(on.msg|tion.msg))|vacation.msg)/; my @remove = qw( msg vacation.msg acation.msg atation.msg atition.msg catation.msg g ion.msg ition.msg msg n.msg on.msg sg tation.msg tion.msg tition.msg vacation.msg ); my $new_re = join "|", @remove; $new_re = qr/$new_re/; while (my $line = ) { chomp $line; my ($good,$new) = ($line,$line); $good =~ s/$good_re//; $new =~ s/$new_re//; if ($good ne $new) { print "Error when testing '$line':\n"; print "Got '$new'\n"; print "Expected '$good'\n"; }; }; __DATA__ foo bar baz vacation vacation.msg vaccatiion.mmssg