perl kapseln einzelne Variable in Anführungszeichen

7

Gibt es in Perl einen Grund, eine einzelne Variable in doppelte Anführungszeichen (keine Verkettung) zu kapseln?

Ich finde das oft in der Quelle des Programms, an dem ich arbeite (vor 10 Jahren von Leuten geschrieben, die hier nicht mehr arbeiten):

%Vor%

Soweit ich weiß, gibt es keinen Grund dafür. Wenn ich in einem alten Skript arbeite, entferne ich normalerweise die Anführungszeichen, so dass mein Editor sie als Variablen und nicht als Zeichenfolgen einfärbt.

Ich glaube, sie haben das irgendwo gesehen und den Stil kopiert, ohne zu verstehen, warum es so ist. Fehle ich etwas?

Danke.

    
Radu Maris 06.02.2012, 09:01
quelle

5 Antworten

7

All dies bewirkt, dass die Variablen explizit mit einem String versehen werden. In 99,9% der Fälle handelt es sich um einen Anfängerfehler.

Es gibt Dinge, die als Nebeneffekt dieses Aufrufstils auftreten können:

%Vor%

Hier hat die Stringifizierung eine Kopie erstellt und diese an die Unterroutine übergeben, wobei die Semantik von Perls Verweis umgangen wurde. Es wird allgemein als schlechte Manieren angesehen, Anrufvariablen zu manipulieren, also sind Sie wahrscheinlich in Ordnung.

Sie können hier auch ein Objekt oder einen anderen Wert stringieren. Zum Beispiel stringiert undef die leere Zeichenfolge. Objekte können beliebigen Code angeben, der bei der String-Erstellung ausgeführt wird. Es ist möglich, skalare Werte mit zwei Werten zu verwenden, die verschiedene numerische und String-Werte haben. Auf diese Weise können Sie angeben, dass Sie die Zeichenfolgenform verwenden möchten.

Es gibt auch eine tiefe gruselige Sache, die weitergehen könnte. Wenn Sie mit XS-Code arbeiten, der die Flags betrachtet, die für skalare Argumente einer Funktion gesetzt sind, ist das Streichen des Skalars eine einfache Methode, Perl zu sagen: "Mache mir einen schönen sauberen neuen String-Wert" mit nur String-Flags und keine numerischen Flags.

Ich bin mir sicher, dass es andere ungewöhnliche Ausnahmen für die 99,9% Regel gibt. Dies sind ein paar. Bevor Sie die Anführungszeichen entfernen, nehmen Sie sich eine Sekunde Zeit, um nach einem komischen Mist wie diesem zu suchen. Wenn Sie auf eine legitime Verwendung stoßen, fügen Sie bitte einen Kommentar hinzu, der die Zitate als praktikablen Kludis identifiziert, und geben Sie ihren Grund für die Existenz an.

    
daotoad 06.02.2012, 10:32
quelle
6

In diesem Fall sind die doppelten Anführungszeichen unnötig. Darüber hinaus ist ihre Verwendung ineffizient, da dies dazu führt, dass die ursprünglichen Zeichenfolgen kopiert werden.

Manchmal möchten Sie diesen Stil jedoch verwenden, um ein Objekt zu "stringifizieren". Beispiel: URI weist die Unterstützung der Zeichenfolge an:

%Vor%     
Eugene Yarmash 06.02.2012 09:12
quelle
6

Ich weiß nicht warum, aber es ist ein Muster, das normalerweise von Perl-Neulingen verwendet wird. Es ist normalerweise eine Verschwendung (wie in dem von Ihnen geposteten Snippet), aber ich kann mir zwei Anwendungen vorstellen.

Es bewirkt, dass eine neue Zeichenkette mit dem gleichen Wert wie das Original erstellt wird, was unter sehr seltenen Umständen nützlich sein könnte.

Im folgenden Beispiel wird eine explizite Kopie erstellt, um $ x vor Änderungen durch die Untereinheit zu schützen, da die Untereinheit ihr Argument ändert.

%Vor%

Durch das Erstellen einer Kopie der Zeichenfolge werden Objekte mit einem String versehen. Dies könnte nützlich sein, wenn Sie mit Code arbeiten, der sein Verhalten ändert, je nachdem, ob sein Argument eine Referenz ist oder nicht.

Im folgenden Beispiel erfolgt die explizite Stringifizierung, weil require Verweise in @INC anders als Strings behandelt.

%Vor%     
ikegami 06.02.2012 09:23
quelle
2

Zitate sind in Ihrem Fall völlig nutzlos. Wir können sogar sagen, dass es falsch ist, weil dies nicht idiomatisch ist, wie andere es geschrieben haben.

Manchmal kann es jedoch notwendig sein, eine Variable zu zitieren: Dies löst explizit die Stringifizierung des Wertes der Variablen aus. Stringification kann ein anderes Ergebnis für einige Werte ergeben, wenn diese Werte dual vars sind oder wenn sie gesegnete Werte mit Überladung eds sind.

Hier ist ein Beispiel mit dualen Variablen:

%Vor%

Ausgabe:

%Vor%     
dolmen 06.02.2012 13:47
quelle
0

Meine Theorie war immer, dass Menschen aus anderen Sprachen mit schlechten Angewohnheiten kommen. Es ist nicht so, dass sie denken: "Ich werde die ganze Zeit doppelte Anführungszeichen verwenden", aber das denken sie einfach nicht!

Ich werde ehrlich sein und sagen, dass ich in diese Falle geraten bin, weil ich von Java nach Perl gekommen bin, also war die Muskelerinnerung da und hat einfach weiter geschossen.

PerlCritic hat mich endlich aus der Gewohnheit rausgeholt!

Es macht Ihren Code definitiv effizienter, aber wenn Sie nicht darüber nachdenken, ob Sie Ihre Strings interpolieren wollen oder nicht, werden Sie sehr wahrscheinlich dumme Fehler machen, also würde ich weiter gehen und sagen, dass es gefährlich ist / p>     

Bart B 06.02.2012 10:16
quelle

Tags und Links