Din*_*wda 1 error-handling perl die
我已经die在perl中覆盖了我的日志框架,因此它可以记录消息并在控制台上打印它.
被覆盖的骰子代码:
BEGIN{ *CORE::GLOBAL::die = sub {
my ($package, $filename, $line, $subroutine) = caller;
untie *STDERR;
my $message;
foreach my $arg (@_) {
$message = $message.$arg;
}
print STDERR $message;
tie *STDERR, __PACKAGE__, (*STDERR);
logmessage("die",$message,$filename, $line);
#What exit code to pass?
#exit CODE;
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道退出进程时要设置的退出代码,因为正常的die退出时出现错误代码.
有什么方法可以找出调用die时要设置的退出代码吗?
如果可以知道perl中可用的错误代码列表会有帮助吗?
退出代码记录在die中:
Run Code Online (Sandbox Code Playgroud)exit $! if $!; # errno exit $? >> 8 if $? >> 8; # child exit status exit 255; # last resort
但正如@amon指出的那样,die不会退出,它会引发异常.相反,覆盖它的,它可能是更清晰的来包装整个事情到eval { ... ; 1 }(或尝试::微小的try),并记录异常的or do或catch部分.