Ich habe das nicht gemacht, aber vielleicht können Sie die Perl-Funktion Ausgang Funktion mit Ihrer eigenen, die ein die() einer Nachricht, die Ihr Hauptcode kennt, ausführt. Sie würden dann CORE::exit() verwenden, wenn ich mich erinnere, um einen echten Ausgang zu erhalten.
Besser wäre es, den neuen Code in einem anderen Paket als main:: auszuführen, um main::s exit nicht zu beschädigen.
2011-Aug-06 update: Aus Jux und Dollerei habe ich es ausprobiert:
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
Und ja, Safe.pm ist gut für nicht vertrauenswürdigen Code, aber wenn der Code vertrauenswürdig ist, ist dies einfacher.
perl exit.pl; echo $?
doing eval
hello exit 99
reason=TRAPPED EXIT: 99
done
2