open SELF "< $0" or die ...;
flock SELF, LOCK_EX | LOCK_NB or exit;
####
flock DATA, LOCK_EX | LOCK_NB or exit;
...
__DATA__
##
##
#!/usr/bin/env perl
use strict;
use warnings;
use Fcntl qw(:flock);
my $highlander;
BEGIN {
open $highlander, '<', $0 or die "Couldn't open $0: $!\n";
flock $highlander, LOCK_EX | LOCK_NB or do {
warn "There can only be one $0\n";
exit;
};
}
# Other use statements...
# code...
##
##
#!/usr/bin/env perl
use strict;
use warnings;
use Fcntl qw(:flock);
flock DATA, LOCK_EX | LOCK_NB or do {
warn "There can only be one $0.\n";
exit;
};
# Code...
# Do not remove double-underscore DATA tag. It is required for highlander process assertion.
__DATA__