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

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

概述我知道在 java语言中,如果成功捕获异常,try-catch子句之后的代码仍会运行.在perl中,它使用eval来捕获异常.所以,我编写了两个简单的程序来测试它. testEval1.pl: $exp = '$i = 3; die "error message"; $k = $i + $j';push ( @program, '$i = 3; die "error message"; $k 我知道在 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之间的差异

总结

以上是内存溢出为你收集整理的perl – eval之后的代码(死于“某些错误消息”)会继续执行吗?全部内容,希望文章能够帮你解决perl – eval之后的代码(死于“某些错误消息”)会继续执行吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1242412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存