Verwenden Sie Const :: Fast anstelle von Readonly
oder constant
. Sie interpolieren ohne Verrenkungen. Siehe CPAN-Module zum Definieren von Konstanten :
Für die bedingte Kompilierung ist Konstante eine gute Wahl. Es ist ein ausgereiftes Modul und weit verbreitet.
...
Wenn Sie Array- oder Hash-Konstanten oder unveränderliche Rich-Data-Strukturen verwenden möchten, verwenden Sie Const :: Fast. Es ist ein enger Lauf zwischen diesem und Attribute :: Constant, aber Const :: Fast scheint reif zu sein und hat mehr Releases gehabt.
Auf der anderen Seite scheinen Sie Ihren eigenen Vorlagencode zu schreiben. Nicht. Verwenden Sie stattdessen etwas Einfaches wie HTML :: Template :
%Vor%Es gibt zwei Arten von here-docs:
<<'END'
, die sich in etwa wie eine einzelne Zeichenfolge in Anführungszeichen (aber keine Escapes) und <<"END"
, auch <<END
, die sich wie eine doppelte Zeichenfolge in Anführungszeichen verhält. Um einen Wert in einer doppelten Zeichenfolge zu interpolieren, verwenden Sie eine skalare Variable:
%Vor%Oder verwenden Sie den Arrayref-Interpolationstrick
%Vor%Sie können auch eine Vorlagensprache definieren, die den korrekten Wert ersetzt. Dies kann oder kann nicht besser sein, abhängig von Ihrer Problemdomäne:
%Vor% Das Problem mit einer Menge der CPAN-Module, die eine bessere Aufgabe von Konstanten als das Pragma use constant
haben, ist, dass sie einfach nicht Teil des Standard-Perl-Pakets sind. Leider kann es sehr schwierig sein, CPAN-Module auf Maschinen herunterzuladen, die Sie möglicherweise nicht besitzen.
Deshalb habe ich mich entschieden, bei use constant
zu bleiben, bis Perl so etwas wie Readonly
als Teil seiner Standard-Module aufnimmt (und nur dann, wenn Distributionen wie RedHat und Solaris sich entscheiden, auf diese Versionen von Perl zu aktualisieren. Ich bin immer noch mit 5.8.8 auf unseren Produktionsservern festgefahren.)
Glücklicherweise können Sie Konstanten interpolieren, die mit use constant
definiert sind, wenn Sie die geheimnisvollen und mystischen Beschwörungen kennen, die von Hackern an Hacker weitergegeben wurden.
Setzen Sie @{[...]}
auf die Konstante. Dies kann auch mit Methoden aus Klassen funktionieren:
Es gibt auch eine andere Möglichkeit, Konstanten zu verwenden, die ich benutzt habe, bevor use constant
in der Nähe war. Es ging so:
Sie können $FOO
wie jeden anderen Skalarwert verwenden und nicht ändern. Sie versuchen, den Wert zu ändern, und Sie erhalten:
Änderung eines schreibgeschützten Werts, der bei ... versucht wurde
Haben Sie darüber nachgedacht, "schreibgeschützte Variablen" als Konstanten zu verwenden?
perlcritic empfiehlt es auf Schweregrad 4 (Standard ist Level 5)
P.S. Das Modul Const::Fast
(inspiriert von nodule Readonly
) scheint die bessere Wahl zu sein.
Spät zur Party, aber eine andere Version des arrayref Trick kann dies in einem tun Skalarer Kontext: ${\FOO}
. Beispiel, getestet in Perl 5.22.2 auf Cygwin:
erzeugt
%Vor% Danke d-Asche , um mich mit dieser Technik vertraut zu machen, die er in seinem perlpp.pl
Quellen-Preprozessor ( siehe diese Antwort ).
Tags und Links perl