Вы этого не сделали, но вы можете переопределить функцию perl exit с помощью своей собственной функции, которая выполняет die () сообщения, о котором знает ваш основной код.Затем вы бы использовали CORE :: exit (), если я помню, чтобы получить истинный выход.
Лучше было бы запустить новый код в пакете, отличном от main ::, чтобы вы не повредили main:: s exit.
2011-Aug-06 обновление: для хихиканья Я попробовал:
my $code = qq[print qq(hello exit 99\n); exit 99;];
{
package Foo;
local $@;
use vars qw(*exit); #required
local *exit = sub { die "TRAPPED EXIT: @_\n"; }; #override local to package Foo;
print "doing eval\n";
eval $code;
print "reason=$@\n";
}
print "done\n"; #prove we did not truly exit
exit 2; #set specific exit code
И да, Safe.pm хорош для ненадежного кода, но если коддоверяю, это проще.
perl exit.pl; echo $?
doing eval
hello exit 99
reason=TRAPPED EXIT: 99
done
2