加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – eval之后的代码(死于“某些错误消息”)会继续执行吗?

发布时间:2020-12-16 06:19:08 所属栏目:大数据 来源:网络整理
导读:我知道在 java语言中,如果成功捕获异常,try-catch子句之后的代码仍会运行.在perl中,它使用eval来捕获异常.所以,我编写了两个简单的程序来测试它. testEval1.pl: $exp = '$i = 3; die "error message"; $k = $i + $j';push ( @program,'$i = 3; die "error m
我知道在 java语言中,如果成功捕获异常,try-catch子句之后的代码仍会运行.在perl中,它使用eval来捕获异常.所以,我编写了两个简单的程序来测试它.

testEval1.pl:

$exp = '$i = 3; die "error message"; $k = $i + $j';

push ( @program,'$i = 3; die "error message"; $k = $i + $j');
 $rtn =eval($exp);
    if ( ! defined ( $rtn))
    {
       print "Exception: ",$@,"n";
    }
    else
    {
       print $rtn,"n";
    }

testEval1.pl的输出:

code continue to run after die!
Exception: error message at (eval 1) line 1.

testEval2.pl

$baseDir = "/home/wuchang/newStore1";
my $eval_rtn = eval(opendir(BASEDIR,$baseDir) or die "dir doesn't exist!n");
print "code continue to run after die!n";
if(!defined($eval_rtn)){
print $@;
}
 else
    {
       print $rtn,"n";
    }

testEval2.pl的输出:

dir doesn't exist!

你可以看到,在两个代码示例中,eval的代码块都有die表达式.但是在testEval1.pl中,eval之后的代码可以被执行,而在testEval2.pl中,它不是!
所以,我的问题是,有什么区别?
即使发生“dir不存在”异常,我该怎么做才能使程序继续运行?

谢谢.

解决方法

你正在评估结果

opendir(BASEDIR,$baseDir) or die "dir doesn't exist!n"

码.如果它会成功,那将等同于eval(1).

你想要的是eval BLOCK:

my $eval_rtn = eval{ opendir(BASEDIR,$baseDir) or die "dir doesn't exist!n" };

检查perldoc -f eval以获得eval EXPR和eval BLOCK之间的差异

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读