Was ist die bevorzugte Methode, um eine Konstante in ein Here-Dokument zu interpolieren?

7

Ich bin mir sicher, dass es mehrere Möglichkeiten gibt, den Wert "bar" in der & lt; & gt; unten, aber was ist der sauberste Weg, und warum?

%Vor%     
gcbenison 03.04.2013, 16:43
quelle

5 Antworten

4

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%     
Sinan Ünür 03.04.2013, 19:29
quelle
9

Es gibt zwei Arten von here-docs:

  • <<'END' , die sich in etwa wie eine einzelne Zeichenfolge in Anführungszeichen (aber keine Escapes) und
  • verhält
  • <<"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%     
amon 03.04.2013 16:59
quelle
8

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:

%Vor%

Ausgabe:

%Vor%

Verwenden einer Methode:

%Vor%

Beiseite:

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:

%Vor%

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

    
David W. 03.04.2013 21:38
quelle
3

Haben Sie darüber nachgedacht, "schreibgeschützte Variablen" als Konstanten zu verwenden?
perlcritic empfiehlt es auf Schweregrad 4 (Standard ist Level 5)

%Vor%

P.S. Das Modul Const::Fast (inspiriert von nodule Readonly ) scheint die bessere Wahl zu sein.

    
AnFi 03.04.2013 17:13
quelle
0

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:

%Vor%

erzeugt

%Vor%

Danke d-Asche , um mich mit dieser Technik vertraut zu machen, die er in seinem perlpp.pl Quellen-Preprozessor ( siehe diese Antwort ).

    
cxw 09.12.2016 16:43
quelle

Tags und Links