use Fcntl qw( :flock :DEFAULT ); sysopen( OUT, $out, O_WRONLY|O_CREAT ) or die "can't sysopen $out: $!"; flock( OUT, LOCK_EX ) or die "can't flock $out: $!"; truncate( OUT, 0) or die "can't truncate $out: $!"; # now write to file... close( OUT ) or die "can't close $out: $!";