【问题标题】:What does a plus sign mean in a hash?哈希中的加号是什么意思?
【发布时间】:2018-01-23 08:19:50
【问题描述】:

我有以下 Perl 代码,但我不明白它在做什么。

use constant ANIMAL => 'rabbit'; 
if ($self->{+ANIMAL}) {
    # Do something here
}

常量ANIMAL前面的+符号是什么意思?

【问题讨论】:

  • "perl 映射中的加号是什么意思?"我在您的代码中没有看到 map
  • @ThisSuitIsBlack 不是有些人称哈希为地图,所以也许这就是 Nosrettap 的意思?

标签: perl constants


【解决方案1】:

来自perldoc constant

如果您在自动引用裸词的上下文中使用常量(对于任何子例程调用都是如此),您可能会遇到麻烦。例如,您不能说$hash{CONSTANT},因为CONSTANT 将被解释为字符串。使用$hash{CONSTANT()}$hash{+CONSTANT} 来防止裸词引用机制启动。同样,由于=> 运算符在其左侧立即引用了一个裸词,因此您必须说CONSTANT() => 'value'(或简单地使用逗号代替大箭头)而不是CONSTANT => 'value'

【讨论】:

  • 值得一提的是+ 是一元加号运算符,它简单地产生其操作数的值。它基本上是一个空操作,在这里用来调整语法。
【解决方案2】:

基于Denis Ibaev 的响应,B::Deparse 可以显示在使用和不使用+ 的情况下如何解析代码:

perl -MO=Deparse,-p script.pl

+:

use constant ('ANIMAL', 'rabbit');
if ($$self{+'rabbit'}) {
    ();
}
script.pl syntax OK

没有+

use constant ('ANIMAL', 'rabbit');
if ($$self{'ANIMAL'}) {
    ();
}
script.pl syntax OK

请注意,+ 使用 constant 调用,其中使用裸字 ANIMAL 而没有 +

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 2014-02-24
    • 2016-11-07
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 2012-05-12
    • 2011-11-30
    相关资源
    最近更新 更多