my @matcharray = map {qr/$_/} ( "all", "your", "[patterns]", ); open my $fh, '<', '/path/to/original/file' or die $!; open my $of, '>', '/path/to/filtered/file' or die $!; { local $_; while (<$fh>) { for my $pat (@matcharray) { /$pat/ and print $of $_ and last; } } }