Perl中的@ $是什么?

bol*_*lav 7 perl exception-handling sigils

我遇到了这个,期待它是一个错字$@:

use strict;
use warnings;

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

warn @$;
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是它输出了这个:

不能通过包"未::这里"找到对象的方法"新"(或许你忘了装载"不::在这里?")在dollar_array.pl 6行......在dollar_array.pl线9抓获.

我无法找到任何有关的信息@$,它没有在perlvar上列出,也没有在eval中列出

由于输出显示caught at ...,似乎这是perl的异常处理中的一些东西.

cho*_*oba 14

@$在Perl中没有任何意义.它存在是因为$$存在(对于每个特殊变量"sigil-char",所有其他"another_sigil-char"变量都存在).因此,warn没有参数 - 你可以通过使用warn;- 验证,你将获得相同的输出.

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

如果输出是空的并且$@已经包含值(典型地从以前的EVAL),该值被附加后使用"\t...caught"$@.这对于保持差不多有用,但并不完全相似die.

$@包含异常eval,因此行为是预期的.