此问题在此处已有答案:
Exception Handling in perl(2个答案)
What is the best way to handle exceptions in Perl?(3个答案)
Why use a "do {} if" block in Perl?(5个答案)
perl eval block throwing execptions without error(1个答案)
perl: Cannot capture the eval return value(2个答案)
上个月关门了。
Perl中eval块中的1是什么意思?查看示例代码:
eval {
print "Ajay";
1;
} or do {
#handle Error Gracefully
}
字符串
我们是否通过在eval块的末尾指定一些正值来告诉perl运行时我们在eval块中没有遇到错误?
或者是强制性的在最后指定的东西?
1条答案
按热度按时间l7mqbcuq1#
两个句法结构
eval BLOCK
和do BLOCK
做了 * 几乎 * 相同的事情:都执行它们的块并返回来自该块的最近求值的表达式的结果。不同之处在于do
可能根本不会返回,而eval
总是会返回。do
可能不返回的原因是它的块正在执行的代码可能是die
。它“抛出一个异常”(不是错误,而是异常),将您的执行沿堆栈向上传送到第一个动态封闭的异常处理程序。相反,如果在执行
eval
的过程中,其中的代码“死亡”(读作:发生了一些异常),而不是自身死亡,eval
立即返回undef
并将全局$@
变量设置为使其死亡的异常。所以
eval
块末尾的1;
保证它返回1,不管print
语句本身是否这样做。print
运算符在成功时返回1,在错误时返回0,设置全局变量$!
以包含错误。它不是die
。因此,如果print
失败了,那么如果没有1;
,如果你只是像or
这样的逻辑运算符那样检查它的真或假,那么eval
本身似乎也失败了。没有理由这样做,因为
print
不会抛出异常。