sub get_lock { open(SEM, ">$semaphore_file") || die "Cannot create semaphore: $!"; flock(SEM, LOCK_EX) || die "Lock failed: $!"; } sub release_lock { close(SEM); } $semaphore_file="semfile"; get_lock(); #Do something here release_lock;