在Perl

时间:2017-10-05 09:13:18

标签: perl error-handling die

我已经在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?

2 个答案:

答案 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并将其用于这些一般性错误。