use strict; use warnings; my $file1 = \<<"END1"; he/is/man/reg[30] don't/you/reg[31] what/goes/on/reg[32] END1 my $file2 = \<<"END2"; /is/man/reg[30] on/reg[32] try/to/do/reg[65] END2 open(my $f3, ">", "C:/Users/Siddharth/Desktop/do.txt") or die "Can't open < input.txt: $!"; open my $h2, '<', $file2 or die "cannot open file2"; my @a2 = <$h2>; close $h2; chomp @a2; my $match = join '|', @a2; $match = qr/$match/; open my $h1, '<', $file1 or die "cannot open file1"; my @a1 = <$h1>; close $h1; my $fh = grep {$_ !~ $match} @a1; print $f3 $fh; #print grep {$_ !~ $match} @a1;