use Fcntl qw(:DEFAULT :flock); sysopen(FH, $file_banner, O_RDWR|O_CREAT) or die "Can't open $file_banner: $!\n"; flock(FH, LOCK_EX) or die "Can't write-lock $file_banner: $!\n"; $num = || 0; # do not use 'or' here seek(FH, 0, 0) or die "Can't rewind $file_banner: $!\n"; truncate(FH,0) or die "Can't truncate $file_banner: $!\n"; print FH $num+1, "\n" or die "Can't write to $file_banner: $!\n"; close(FH) or die "Can't close $file_banner: $!\n";