use Fcntl qw( LOCK_SH SEEK_SET ); open my $fh, '<', $file die $!; flock $fh, LOCK_SH or die $!; seek $fh, 0, SEEK_SET or die $!; my $d = do { local $/; <$fh> }; close $fh;