我遇到了这个,期待它是$@的拼写错误:
use strict; use warnings; eval { my $error = Not::Here->new(); }; warn @$;
令我惊讶的是它输出了这个:
Can’t locate object method “new” via package “Not::Here” (perhaps you forgot to load “Not::Here”?) at dollar_array.pl line 6.
…caught at dollar_array.pl line 9.
解决方法
@ $在Perl中没有任何意义.它的存在是因为$$存在(对于每个特殊变量“sigil-char”,所有其他“another_sigil-char”变量都存在).因此,warn没有任何参数 – 你可以通过使用just war来验证; – 你会得到相同的输出.
现在,让我们阅读warn的文档:
If the output is empty and
$@
already contains a value (typically from a prevIoUs eval) that value is used after appending"\t...caught"
to$@
. This is useful for staying almost,but not entirely similar todie
.
$@包含eval中的异常,因此预期会出现这种情况.