在 Perl 中使用 die 时的退出代码
Exit Codes when using die in Perl
我已经在 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;
}
}
我不知道在退出进程时设置什么退出代码,因为正常 die 退出时会出现错误代码。
有什么方法可以找出死机时要设置的退出代码
叫什么?
另外如果能知道可用的错误代码列表会很有帮助
在 Perl 中?
退出代码记录在die:
exit $! if $!; # errno
exit $? >> 8 if $? >> 8; # child exit status
exit 255; # last resort
但是正如@amon 指出的那样,die
不会退出,它会引发异常。与其覆盖它,不如将整个事情包装到 eval { ... ; 1 }
(或 Try::Tiny 的 try
)中并在 or do
或 [= 中记录异常可能更清楚15=]部分。
die()
以 none- 零退出代码退出(但我相信它没有定义):
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 并将其用于这些一般性错误。
我已经在 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;
}
}
我不知道在退出进程时设置什么退出代码,因为正常 die 退出时会出现错误代码。
有什么方法可以找出死机时要设置的退出代码 叫什么?
另外如果能知道可用的错误代码列表会很有帮助 在 Perl 中?
退出代码记录在die:
exit $! if $!; # errno exit $? >> 8 if $? >> 8; # child exit status exit 255; # last resort
但是正如@amon 指出的那样,die
不会退出,它会引发异常。与其覆盖它,不如将整个事情包装到 eval { ... ; 1 }
(或 Try::Tiny 的 try
)中并在 or do
或 [= 中记录异常可能更清楚15=]部分。
die()
以 none- 零退出代码退出(但我相信它没有定义):
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 并将其用于这些一般性错误。