我有以下Perl代码,但我无法理解它在做什么。
use constant ANIMAL => 'rabbit';
if ($self->{+ANIMAL}) {
# Do something here
}
常数+
之前的ANIMAL
符号是什么意思?
答案 0 :(得分:21)
如果在自动引用裸字的上下文中使用常量,则可能会遇到麻烦(对于任何子例程调用都是如此)。例如,您不能说
$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}}。