我遇到过这种情况,期待它成为$@
的错字:
use strict;
use warnings;
eval {
my $error = Not::Here->new();
};
warn @$;
令我惊讶的是它输出了这个:
找不到对象方法" new"通过包"不是::这里" (也许你忘了在dollar_array.pl第6行加载" Not :: Here"?)。 ......抓住了dollar_array.pl第9行。
我无法找到有关@$
的任何信息,且未列在perlvar上,也未列在eval
由于输出显示caught at ...
,似乎这是perl异常处理中的内容。
答案 0 :(得分:14)
@$
在Perl中没有任何意义。它的存在是因为$$
存在(对于每个特殊变量" sigil-char",所有其他" another_sigil-char"变量存在)。因此,warn
没有参数 - 您可以仅使用warn;
来验证 - 您将获得相同的输出。
现在,让我们阅读warn的文档:
如果输出为空且
$@
已包含值(通常来自之前的eval),则在将"\t...caught"
附加到$@
后使用该值。这对于保持差不多有用,但不完全类似于die
。
$@
包含eval
的例外情况,因此行为是预期的。