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

Nos*_*tap 12 perl constants

我有以下Perl代码,但我无法理解它的作用.

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

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

Den*_*aev 20

来自perldoc constant:

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

  • 值得一提的是,`+`是一元加运算符,它只是产生其操作数的值.它基本上是一个无操作,用于调整语法. (9认同)

Ken*_*sis 8

Denis Ibaev的回复基础上,B :: Deparse可以显示如何使用以下代码解析代码+:

perl -MO=Deparse,-p script.pl

+:

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

没有+:

use constant ('ANIMAL', 'rabbit');
if ($$self{'ANIMAL'}) {
    ();
}
script.pl syntax OK
Run Code Online (Sandbox Code Playgroud)

请注意,+使用constant裸字的位置调用ANIMAL而不使用+.