use My::ThereCanBeOnlyOne '/tmp/myprogram.pid'; #### use My::ThereCanBeOnlyOne '/tmp/myprogram.pid', -hold => 0, -stale => 1, -max => 1; #### package My::ThereCanBeOnlyOne; use strict; use LockFile::Simple; my $Lock; sub import { my $self = shift; my $lockfile = shift || die "please provide lockfile"; my %args = @_; my $locker = LockFile::Simple->make(-autoclean => 0, %args); $Lock = $locker->lock($lockfile, '%f') and return 1; open(LOCKFILE, "< $lockfile") or die __PACKAGE__."Unable to open $lockfile: $!"; my $other_pid = ; close(LOCKFILE); chomp($other_pid); die __PACKAGE__.": $lockfile: $other_pid still running. $$ exiting\n"; } END { $Lock->release(); } 1;