use Fcntl qw(:flock); use Symbol; my $fh = gensym; open $fh, "/tmp/foo" or die $!; # start critical section flock $fh, LOCK_SH; seek $fh, 0, 0; my @lines = <$fh>; close $fh; # close unlocks the file # end critical section for (@lines) { print if /foo/; }