我已经在perl中覆盖了die
我的日志框架,因此它可以记录消息并在控制台上打印它。
重写的代码:
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;
}
}
我不知道退出流程时要设置的退出代码,因为普通的裸片会退出并显示错误代码。
有什么方法可以找出死时设置的退出代码 叫?
如果能够知道可用的错误代码列表,那将会很有帮助 在perl?
答案 0 :(得分:5)
退出代码记录在die:
中exit $! if $!; # errno exit $? >> 8 if $? >> 8; # child exit status exit 255; # last resort
但正如@amon所说,die
没有退出,它会引发异常。将整个事物包装成eval { ... ; 1 }
(或Try::Tiny'try
)并将or do
或{{catch
中的例外记录下来,可能会更清楚,而不是覆盖它。 1}}部分。
答案 1 :(得分:1)
die()
以非零退出代码退出(但未定义,我相信):
jan@jancooltek ~ $ perl
die("test");
test at - line 1.
jan@jancooltek ~ $ echo $?
9
然而,使用-e:
jan@jancooltek ~ $ perl -e 'die("test")'
test at -e line 1.
jan@jancooltek ~ $ echo $?
255
exit()
可以使用您喜欢的任何退出代码,Perl中没有特定的规则。
解决问题!= 0并将其用于这些一般性错误。