in reply to How to catch 'die' signal - CONVERSE case of #811295

Object::Destroyer can create destructors for resources that don't have one.

my $lock_file; my $lock_file_destroyer = Object::Destroyer->new(sub{ unlink($lock_file) if defined($lock_file); }); ...
But since this resources is global to your program, END will do.
my $lock_file; END { unlink($lock_file) if defined($lock_file); } ...

Replies are listed 'Best First'.
Re^2: How to catch 'die' signal - CONVERSE case of #811295
by puterboy (Scribe) on Dec 07, 2009 at 03:17 UTC
    Thanks to the two previous posters for suggesting an END block. As a long-time perl dilettance, I was not aware of such usage.

    I then noticed though that END block doesn't capture things like SIGINT/SIGTERM.

    To capture those, I had to add the following line of code:
    $SIG{INT} = $SIG{TERM} = $SIG{HUP} = sub { exit; };
    Is this the correct way to do it?
      By default, the OS unloads the program in response to those signals. That looks like a good solution to me.