2014-01-16 20 views
11

私は以下のPerlコードを持っていますが、その動作を理解できません。ハッシュではプラス記号は何を意味しますか?

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

定数ANIMAL+記号は何を意味するのでしょうか? perldoc constantから

+0

「perlマップのプラス記号は何を意味しますか?」あなたのコードに 'map'は表示されません。 – ThisSuitIsBlackNot

+0

@ThisSuitIsBlack誰かがハッシュを地図と呼ぶわけではないので、Nosrettapが意味するものかもしれません。 – asjo

答えて

21

あなたが(任意のサブルーチンコールのために真であるとして)自動的に裸の単語を引用文脈で定数を使用する場合は、トラブルに巻き込まれることができます。たとえば、CONSTANTは文字列として解釈されるため、$hash{CONSTANT}と言うことはできません。同様に、=>オペレータは、すぐ左側にbarewordを引用しているので、の代わりにCONSTANT() => 'value'(または単に大きな矢印の代わりにカンマを使用する)と言う必要があります。

+9

'+'は単純にそのオペランドの値を生成する単項プラス演算子です。これは基本的にはノーオペレーションであり、ここで構文を調整するために使用されます。 –

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 

+は、なしのベア語ANIMALが使用されているconstantを使用して呼び出します。