in reply to Search strings stored in array into files of a directory

Hello tejas1991, and welcome to the Monastery!

In addition to the problems already identified by other monks, your script has some logic errors. First, this code (in outline):

while (my $line = <F>) { if ($line =~ /$_/) { ... last; # breaking while loop } else { ... last; # breaking while loop } }

makes no sense: whatever the outcome of the regex match, the loop is guaranteed to terminate after the first line. Second, and more importantly, this:

open (F, "$dir/$filename") || die ("Could not open $filename"); foreach (@store) { ... while ($line = <F>) { ... } }

cannot work, because once the inner while loop finishes on the first iteration of the outer foreach loop, the filehandle F no longer points to the first line of the file, so subsequent iterations of the foreach loop will never see the file’s first line(s). You could look at correcting this by resetting the filehandle using seek; but the code would still be inefficient. A better approach is to reverse the order of the loops:

open(my $F, '<', "$dir/$filename) or die "Cannot open file '$dir/$file +name' for reading: $!"; OUTER: while (my $line = <$F>) { foreach my $string (@store) { if ($line =~ /\Q$string\E/) { ... next OUTER; } } } close $F or die "Cannot close file '$dir/$filename': $!";

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,