Ich habe versucht, use constant
-Werte in Perl zu setzen und stolperte über das folgende seltsame Verhalten:
gibt
aus %Vor% Die Konstante a
wurde auf der rechten Seite der Ausdrücke $d{a} = a
und a => a
ersetzt, aber nicht auf der linken Seite.
Ich weiß, dass Konstanten mit inlinable Subs implementiert werden ( hier dokumentiert ) und dass Subnamen ausgewertet werden ihre Namen, wenn sie nicht vorbelegt sind ( hier dokumentiert ), aber ich sehe keinen Grund, warum in meinem Beispiel a
wertet einmal den Wert und einmal den Namen in derselben Codezeile aus, besonders in der Zuweisung zum Hash - Die a => a
könnte eine Konsequenz von =>
sein, die die linke Seite als String interpretiert, wenn sie mit einem Buchstaben beginnt .
Nebenbemerkung: Das Hinzufügen von Klammern, um den Unteraufruf explizit zu machen, ergibt das erwartete Ergebnis:
%Vor%Ausgabe:
%Vor%(alle Beispiele mit Perl 5.18 getestet)
Das Ende der konstanten Seite unter CAVEATS , hat die Antwort
Sie können Probleme bekommen, wenn Sie Konstanten in einem Kontext verwenden, der Barcodes automatisch anführt (wie bei jedem Unterprogrammaufruf). Zum Beispiel können Sie
$hash{CONSTANT}
nicht sagen, weilCONSTANT
als String interpretiert wird.
Es wird dann mit der gefundenen Lösung fortgefahren
Verwenden Sie
$hash{CONSTANT()}
oder$hash{+CONSTANT}
, um zu verhindern, dass der Bareword-Quotierungsmechanismus eingesetzt wird.
Dann buchstabiert es das auch für Hashes
Ähnlich, da der Operator
=>
ein Bareword direkt links von sich aus anführt, müssen SieCONSTANT() => 'value'
angeben (oder einfach ein Komma anstelle des großen Pfeils verwenden) anstelle vonCONSTANT => 'value'
.