use strict;
use File::Copy;
use Fcntl ':flock'; # import LOCK_* constants
my $status_file = "/tmp/flocktest";
open(STATUS, "+<$status_file") || die "Can't open file";
print "getting lock...\n";
flock(STATUS,LOCK_EX) || die "Can't lock file";
print "waiting...\n";
sleep 10;
print "copying file...\n";
# copy(\*STATUS,"/tmp/foo");
copy("$status_file","/tmp/foo");
print "finished copy, waiting....\n";
sleep 10;
####
% ./test.pl
getting lock...
waiting...
% ./test.pl
getting lock...
copying file...
finished copy, waiting...
%
waiting...
copying file...
finished copy, waiting...
%
####
% ./test.pl
getting lock...
waiting...
% ./test.pl
getting lock...
copying file...
finished copy, waiting...
waiting...
copying file...
finished copy, waiting...
% %