7

我遇到了这个,希望它是一个错字$@

use strict;
use warnings;

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

warn @$;

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

无法在 Dollar_array.pl 第 6 行通过包“Not::Here”(也许您忘记加载“Not::Here”?)找到对象方法“new”。...在 Dollar_array.pl 第 9 行捕获。

我找不到任何关于的信息@$,并且它没有在perlvar上列出,也没有在eval中列出

由于输出 show caught at ...,这似乎是 perl 的异常处理中的东西。

4

1 回答 1

14

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

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

如果输出为空并且$@已经包含一个值(通常来自先前的评估),则在附加"\t...caught"$@. 这对于保持几乎,但不完全类似于die.

$@包含来自 的异常eval,因此该行为是预期的。

于 2016-03-12T09:27:33.247 回答