# untested with your particular situation, but should be a guide. eval { local $SIG{ALRM} = sub { die "lock\n" }; # NB: \n required alarm 5; flock(LOCK, LOCK_EX | LOCK_NB); alarm 0; }; if ($@) { die unless $@ eq "lock\n"; } else { # keep going }