die should be used in that situation.
But let's say you can't edit the Perl code. Instead of evaluating the code directly, call myeval (defined below) with the the string to evaluate as an argument.
our $override_exit = 0;
BEGIN {
*CORE::GLOBAL::exit = sub(;$) {
no warnings qw( exiting );
last EXIT_OVERRIDE if $override_exit;
CORE::exit($_[0] // 0);
};
}
sub myeval {
my $exit_was_called = 1;
EXIT_OVERRIDE: {
local $override_exit = 1;
eval($_[0]);
die $@ if $@;
$exit_was_called = 0;
}
die("Exit called\n") if $exit_was_called;
}
Seeking work! You can reach me at ikegami@adaelis.com