我看到这个内容,本以为是 $@ 的笔误:use strict; use warnings; eval { my $error = Not::Here->new(); }; warn @$; 我很惊讶地发现它输出了这个:``` 在 dollar_array.pl 第6行,无法通过"No::Here"包定位对象方法"new"(也许你忘记加载"No::Here"?) ... 在 dollar_array.pl 第9行捕获。 ```我找不到有关`@$`的任何信息,它没有列在perlvar或eval中。由于输出显示了`caught at...`,因此这似乎是perl异常处理中的内容。
@$ 在Perl中没有意义(目前还没有)。它存在是因为$$存在(对于每个特殊变量“sigil-char”,所有其他“another_sigil-char”变量都存在)。因此,warn不接受参数-您可以通过只使用warn;进行验证-您将获得相同的输出。 现在,让我们阅读warn的文档: 如果输出为空且$@已经包含一个值(通常来自先前的eval),则在将"\t...caught"附加到$@后使用该值。这对于保持几乎但不完全类似于die非常有用。 $@包含eval中的异常,因此这种行为是预期的。