【问题标题】:What is @$ in perl?perl 中的@$ 是什么?
【发布时间】:2016-03-12 09:13:41
【问题描述】:

我遇到了这个,以为是$@ 的错字:

use strict;
use warnings;

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

warn @$;

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

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

我无法找到有关 @$ 的任何信息,并且它未在 perlvareval 中列出

由于输出显示caught at ...,看来这是perl的异常处理中的东西。

【问题讨论】:

    标签: perl exception-handling sigils


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2023-03-25
      • 2011-06-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      相关资源
      最近更新 更多