If windows supports hard links you could try something like this.
#!/usr/bin/perl
use strict;
use warnings;
open my $fh, ">", "mylock.$$" or die "open mylock.$$: $!";
sleep 2 until get_lock();
print "locked> ";
<>;
unlink "mylock"; # releases the lock
unlink "mylock.$$"; # just cleaning up
sub get_lock {
link "mylock.$$", "mylock" and return 1;
return (stat "mylock.$$" )[3] == 2;
}
The above is based on the discussion of portably locking with link(2) as found on the Linux man page for
open(2) in the O_EXCL discussion.
Edit: added comments because one unlink matters and the other doesn't.