3

如何忽略die()出现在 PerlEND块中的 a?

现在我得到了

END 失败--呼叫队列中止

并且错误冒泡了调用脚本。

4

3 回答 3

8

将您的结束块放在一个eval { .... }- 这应该可以防止您描述的行为。

#!/usr/bin/perl

print("hi there!\n");

END {
    eval{
        print("goodbye\n");
        die("this can't hurt....");
    };

    #detect if an error occurred in the eval
    if ( $@ ){
        print ("an error occurred: $@\n");
    }
}
于 2013-01-09T23:50:30.197 回答
5

将您的代码放在 eval 块内,如果您想检索 die 提供的错误消息,您可以使用块外的 if 条件捕获。

#!/usr/bin/perl
my $val=1;
eval
{
   print "Inside Eval\n";
   if($val == 1)
   {
     die "hello world\n";
   }
   print "End of Eval\n";
};
if ( $@ )
{
         print  "Error message - $@" . "\n";
}
于 2013-01-10T01:18:37.723 回答
3

Try::Tiny是一个优秀的包装器eval,允许你显式地处理运行时异常。

于 2013-01-10T01:03:38.027 回答