在Perl中使用die时退出代码

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中可用的错误代码列表会有帮助吗?

cho*_*oba 6

退出代码记录在die中:

 exit $! if $!;              # errno
 exit $? >> 8 if $? >> 8;    # child exit status
 exit 255;                   # last resort
Run Code Online (Sandbox Code Playgroud)

但正如@amon指出的那样,die不会退出,它会引发异常.相反,覆盖它的,它可能是更清晰的来包装整个事情到eval { ... ; 1 }(或尝试::微小try),并记录异常的or docatch部分.

  • 你可以使用`$ SIG _ {__ DIE __}`.但是,请将代码放入单个模块并从所有脚本加载它,而不是将代码插入到每个脚本中. (2认同)