use strict; use warnings; use Fcntl qw(:flock); use Tie::File; my $target_file = '.....'; { my ($tied, @file_content) $tied = tie @file_content, 'Tie::File', filename or die "Unable to tie $target_file: $!\n"; $tied->flock(LOCK_EX|LOCK_NB) or die "Cannot lock $target_file. Aborting. $!\n"; foreach my $line (@file_content) { $line =~ s/foo/bar/; } } # $tied falls out of scope. File is closed, lock expires.