Perl中的@ $是什么?

时间:2016-03-12 09:13:41

标签: perl exception-handling sigils

我遇到过这种情况,期待它成为$@的错字:

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异常处理中的内容。

1 个答案:

答案 0 :(得分:14)

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

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

  

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

$@包含eval的例外情况,因此行为是预期的。