sub execute { my $self = shift; my $req = BigHairyDatabaseInteraction->new(...); { local $SIG{INT} = sub {$req->{_signal} = 2; $req->handleInterrupt; }; local $SIG{TERM} = sub {$req->{_signal} = 15; $req->handleInterrupt; }; $req->executeRequest(); } # If a TERM/INT signal has been delivered during the request # then pass it on to the program itself: if($req->{_signal}) { kill $req->{_signal}, $$; } ... rest of $sth->execute()