use Fcntl ':flock'; sub alter_file { open(HANDLE1, ...); flock(HANDLE1, LOCK_EX) # exclusive lock or die "unable to obtain lock: $!"; chop; chop; chop; close(HANDLE); # also releases lock } sub process { open(HANDLE2, ...); flock(HANDLE2, LOCK_SH) # shared lock - allows multiple readers or die "unable to obtain shared lock: $!"; ...read from file... close(HANDLE2); # also releases lock } #### sub alter_file { open(HANDLE1, ">/some/tmp/file"); ...write to HANDLE1... close(HANDLE1); rename("/some/tmp/file", "file"); }