2014-01-16 16 views
11

Ich habe das folgende Stück Perl-Code, aber ich kann nicht verstehen, was es tut.Was bedeutet ein Pluszeichen in einem Hash?

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

Was bedeutet das + Zeichen vor dem konstanten ANIMAL bedeuten?

+0

"Was bedeutet ein Pluszeichen in der Perlkarte?" Ich sehe in Ihrem Code keine Karte. – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot einige Leute nennen einen Hash eine Karte, also ist das vielleicht Nosretpap? – asjo

Antwort

21

Von perldoc constant:

Sie können in Schwierigkeiten geraten, wenn Sie Konstanten in einem Kontext verwendet werden, die Barewords automatisch zitiert (wie für jeden Unterprogramm-Aufruf wahr ist). Zum Beispiel können Sie nicht $hash{CONSTANT} sagen, weil CONSTANT als eine Zeichenfolge interpretiert wird. Verwenden Sie $hash{CONSTANT()} oder $hash{+CONSTANT}, um zu verhindern, dass der Bareword-Quotierungsmechanismus eingesetzt wird. Ebenso, da der =>-Operator ein Bareword direkt links von sich gibt, müssen Sie statt CONSTANT => 'value'CONSTANT() => 'value' sagen (oder einfach ein Komma anstelle des großen Pfeils verwenden).

+9

Es ist erwähnenswert, dass '+' der unäre Plusoperator ist, der einfach den Wert seines Operanden ergibt. Es ist im Grunde ein No-Op, hier verwendet, um die Syntax zu optimieren. –

8

Aufbauend auf Denis Ibaev ‚s Antwort kann B::Deparse zeigen, wie der Code mit und ohne Verwendung der + analysiert wird:

perl -MO=Deparse,-p script.pl

Mit +:

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

Ohne +:

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

Beachten Sie, dass die + ruft die constant mit denen die Bareword ANIMAL ohne + verwendet wird.

Verwandte Themen