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