1 inside eval body在perl中是什么意思[副本]

fcy6dtqo  于 10个月前  发布在  Perl
关注(0)|答案(1)|浏览(99)

此问题在此处已有答案

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块中没有遇到错误?
或者是强制性的在最后指定的东西?

l7mqbcuq

l7mqbcuq1#

两个句法结构eval BLOCKdo BLOCK做了 * 几乎 * 相同的事情:都执行它们的块并返回来自该块的最近求值的表达式的结果。不同之处在于do可能根本不会返回,而eval总是会返回。
do可能不返回的原因是它的块正在执行的代码可能是die。它“抛出一个异常”(不是错误,而是异常),将您的执行沿堆栈向上传送到第一个动态封闭的异常处理程序。
相反,如果在执行eval的过程中,其中的代码“死亡”(读作:发生了一些异常),而不是自身死亡,eval立即返回undef并将全局$@变量设置为使其死亡的异常。
所以eval块末尾的1;保证它返回1,不管print语句本身是否这样做。print运算符在成功时返回1,在错误时返回0,设置全局变量$!以包含错误。它不是die。因此,如果print失败了,那么如果没有1;,如果你只是像or这样的逻辑运算符那样检查它的真或假,那么eval本身似乎也失败了。
没有理由这样做,因为print不会抛出异常。

相关问题