use strict; use Fcntl qw(:flock); my $file = 'data.file'; my $SEMAPHORE = "$file.lck"; open(S, ">$SEMAPHORE) || die "Foo ($!)"; flock(S, LOCK_EX); open(FH, ">$file") || die "Foofoo ($!)"; # Muck with file close FH; close S;