my $logfile = '/full/path/to/logfile'; my $badnews; open (LF, "<$logfile") or die ("open $logfile failed: $!); flock (LF,1) or die ("flock $logfile failed: $!"); while () { $badnews .= $_ if (m/bad news/i); # some work needed } close(LF) or die ("close $logfile failed: $!); if ($badnews) { # do something }