use Fcntl qw(:DEFAULT :flock); ... sysopen(LOCKFILE,$lockfile,O_RDWR|O_CREAT) # create if necessary or die "Can not open/create $lockfile ($!)"; flock(LOCKFILE, LOCK_EX) or die "Locking error on $lockfile ($!)"; eval { my $number_of_clients=||0; chomp($number_of_clients); seek(LOCKFILE,0,0) or die "Rewind error on $lockfile ($!)"; truncate(LOCKFILE,0) or die "Truncate error on $lockfile ($!)"; if($operation='checkin') { ++$number_of_clients; ... } else { ... --$number_of_clients; } print LOCKFILE $number_of_clients,"\n"; } if($@) { warn "Exception: $@"; } flock(LOCKFILE, LOCK_UN) or die "Unlocking error on $lockfile ($!)"; close(LOCKFILE) or warn "Error closing $lockfile ($!)";