【发布时间】:2013-07-21 19:49:04
【问题描述】:
我正在编写Mastering Perl 的"Error Handling and Reporting" 章节。在perlvar 的$@ 条目中,它说:
来自最后一个 eval() 运算符的 Perl 语法错误消息。如果 $@ 是空字符串,则最后一个 eval() 解析并正确执行(尽管您调用的操作可能以正常方式失败)。
现在我想知道eval 何时可能无法正确执行,从而使$@ 具有未定义的值。有没有这样的案例?
【问题讨论】:
-
这会返回一个空字符串:
perl -MData::Dumper -e'$@=123; eval q{$@=456}; print(Dumper($@));'但描述不正确。$@被设置为die的参数,如果它被执行的话。否则,它是一个空字符串。 -
我不关心空字符串的情况。这是定义的行为。我问的是相反的情况。
-
$@如果没有执行 eval 也是空字符串:perl5.14.2 -E 'say q(\$@ is the empty string) if $@ eq q()' -
阅读答案/cmets,我建议将“正确执行”的确切定义放入问题中。每个人都有自己的想法。
-
我不知道那个定义是什么,这个定义是问题的症结所在。