在Perl中,@$是什么意思?

7
我看到这个内容,本以为是 $@ 的笔误:
use strict;
use warnings;

eval {
  my $error = Not::Here->new();
};

warn @$;

我很惊讶地发现它输出了这个:
``` 在 dollar_array.pl 第6行,无法通过"No::Here"包定位对象方法"new"(也许你忘记加载"No::Here"?) ... 在 dollar_array.pl 第9行捕获。 ```
我找不到有关`@$`的任何信息,它没有列在perlvareval中。
由于输出显示了`caught at...`,因此这似乎是perl异常处理中的内容。
1个回答

14

@$ 在Perl中没有意义(目前还没有)。它存在是因为$$存在(对于每个特殊变量“sigil-char”,所有其他“another_sigil-char”变量都存在)。因此,warn不接受参数-您可以通过只使用warn;进行验证-您将获得相同的输出。

现在,让我们阅读warn的文档:

如果输出为空且$@已经包含一个值(通常来自先前的eval),则在将"\t...caught"附加到$@后使用该值。这对于保持几乎但不完全类似于die非常有用。

$@包含eval中的异常,因此这种行为是预期的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接