在 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 退出时会出现错误代码。

退出代码记录在die:

 exit $! if $!;              # errno
 exit $? >> 8 if $? >> 8;    # child exit status
 exit 255;                   # last resort

但是正如@amon 指出的那样,die 不会退出,它会引发异常。与其覆盖它,不如将整个事情包装到 eval { ... ; 1 }(或 Try::Tinytry)中并在 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 并将其用于这些一般性错误。