散列中的加号是什么意思?

时间:2014-01-16 21:41:13

标签: perl constants

我有以下Perl代码,但我无法理解它在做什么。

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

常数+之前的ANIMAL符号是什么意思?

2 个答案:

答案 0 :(得分:21)

来自perldoc constant

  

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

答案 1 :(得分:8)

根据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使用的是+而不使用{{1}}。