Verketten von Strings in Perl mit "Join"

8

Siehe Aktualisierung unten

Ich gehe eine ganze Reihe von Perl-Skripten durch, die jemand in meiner Firma geschrieben hat. Er verwendete join , um Strings zu verketten. Zum Beispiel macht er das (aus einem echten Perl-Skript übernommen):

%Vor%

Statt dessen:

%Vor%

Oder auch nur das:

%Vor%

Er ist nicht mehr hier, aber die Leute, die hier sind, sagen mir, dass er die Ketten so verkettet hat, weil es irgendwie besser war. (Sie sind nicht zu klar, warum).

Also, warum sollte jemand join in dieser Angelegenheit verwenden, anstatt den Operator . verketten zu benutzen, oder einfach die Zeichenfolgen wie im dritten Beispiel eingeben? Gibt es einen berechtigten Grund für diese Art der Codierung?

Ich versuche, hier viel Chaos zu beseitigen, und mein erster Gedanke wäre, diese Praxis zu beenden. Es macht den Code schwieriger zu lesen, und ich bin mir sicher, eine join ist keine sehr effiziente Möglichkeit, Strings zu verketten. Obwohl ich seit Version 3.x Skripte in Perl geschrieben habe, betrachte ich mich selbst nicht als Guru, weil ich nie die Gelegenheit hatte, mit Leuten zusammen zu sein, die besser waren als ich und die mich lehren könnten Perls tiefe innere Geheimnisse. Ich möchte nur sicherstellen, dass mein Instinkt hier stimmt, bevor ich mich zum Narren mache.

Ich habe bessere Möglichkeiten, das hier zu tun.

Aktualisieren

Die Leute werden verwirrt. Er ist nicht nur zum Verketten von Pfaden. Hier ist ein anderes Beispiel:

%Vor%

Wo würde ich so etwas tun:

%Vor%

Oder wahrscheinlicher

%Vor%

Oder vielleicht verwende ich in diesem Fall join , weil der Unterstrich Probleme verursacht:

%Vor%

Meine Frage ist immer noch: Macht er etwas, was echte Perl-Hacker wissen, und ein Neuling wie ich, der das seit 15 Jahren macht, weiß nichts davon? Sehen mich Leute an, die Strings mit . verketten oder sie einfach in Anführungszeichen setzen und sagen: "Ha! Was für ein Noob! Ich wette, er besitzt auch einen Macintosh!"

Oder hat der vorherige Typ nur einen einzigartigen Stil der Programmierung, ähnlich wie der einzigartige Stil meines Sohnes beim Fahren heißt, in Bäume hineinzugehen?

    
David W. 18.11.2010, 16:48
quelle

7 Antworten

6

Ich habe meinen fairen Anteil an kommerzieller Perl-Entwicklung für "einen bekannten Online-Händler" gemacht, und ich habe noch nie join so benutzt gesehen. Dein drittes Beispiel wäre meine bevorzugte Alternative, da es einfach, sauber und lesbar ist.

Wie andere hier auch, sehe ich keinen wirklichen Wert in der Verwendung von join als Leistungsverbesserer. Es mag zwar marginal besser funktionieren als die String-Interpolation, aber ich kann mir keine reale Situation vorstellen, in der die Optimierung gerechtfertigt wäre, obwohl der Code noch in einer Skriptsprache geschrieben ist.

Wie diese Frage zeigt, führen esoterische Programmiersprachen (in jeder Sprache) nur zu vielen Missverständnissen. Wenn Sie Glück haben, ist das Missverständnis gutartig. Die Entwickler, mit denen ich gerne zusammenarbeite, sind diejenigen, die für Lesbarkeit und Konsistenz kodieren und den Perl Golf für die Wochenenden verlassen. :)

Kurz gesagt: Ja, ich denke, sein einzigartiger Stil ist dem einzigartigen Fahrstil Ihres Sohnes ähnlich. :)

    
Simon Whitaker 18.11.2010, 19:20
quelle
4

Ich würde nachdenken

%Vor%

klarer als die Alternativen. File :: Spec war jedoch schon lange im Kern, also

%Vor%

ist viel besser. Und, noch besser, es gibt Path :: Class :

%Vor%

Geschwindigkeit ist normalerweise kein Faktor, den ich bei der Verkettung von Dateinamen und Pfaden in Betracht ziehe.

Das Beispiel, das Sie in Ihrem Update geben:

%Vor%

zeigt, warum der Typ ahnungslos ist. Erstens müssen diese einzelnen Variablen nicht interpoliert werden. Zweitens, das ist besser geschrieben als

%Vor%

oder alternativ als

%Vor%

mit unnötige Interpunktion zu reduzieren ist mein ultimatives Ziel.

    
Sinan Ünür 18.11.2010 16:56
quelle
3

Wenn die Listen der Elemente, die verbunden werden sollen, im Allgemeinen sehr groß sind, sehen Sie keinen großen Unterschied in der Leistung, wenn Sie sie in Verkettungen umwandeln. Das Hauptproblem ist die Lesbarkeit und Wartbarkeit, und in diesen Fällen, wenn die Form der Zeichenfolgeninterpolation klarer ist, können Sie das sicher verwenden.

Ich würde vermuten, dass dies nur eine persönliche Programmiervorliebe des ursprünglichen Programmierers ist.

Im Allgemeinen verwende ich join , wenn die Länge der Liste groß / unbekannt ist, oder wenn ich mit etwas anderem als der leeren Zeichenfolge (oder einem einzelnen Leerzeichen für die Array-Interpolation) zusammenarbeite. Andernfalls ist die Verwendung von . oder einfache String-Interpolation in der Regel kürzer und einfacher zu lesen.

    
Eric Strom 18.11.2010 16:57
quelle
2

Perl kompiliert doppelt zitierte Strings in Dinge mit join und . catenation in ihnen:

%Vor%

was dich zu solchen Dingen inspirieren kann:

%Vor%

wie in:

%Vor%

Nifty, was?

    
tchrist 18.11.2010 18:04
quelle
0

All diese Ansätze sind in Ordnung.

Join kann manchmal mächtiger sein als . concatentate, insbesondere wenn einige der Dinge, die Sie beitreten, Arrays sind:

%Vor%     
Alex Brown 18.11.2010 16:55
quelle
0

Interpolation ist etwas langsamer als das Hinzufügen einer Liste. Das heißt, ich habe noch nie jemanden erlebt, der es so extrem angehen würde.

Mit dem Modul Benchmark können Sie feststellen, wie groß der Unterschied ist.

Sie können diese Frage auch auf Ссылка stellen. Da sind echte Gurus, die dir wahrscheinlich die inneren Geheimnisse viel besser vermitteln können als ich.

    
Cfreak 18.11.2010 16:56
quelle
0

Obwohl ich anerkenne, dass es in allen Beispielen, die ich hier sehe, keine signifikanten Leistungsunterschiede gibt, wird eine Reihe von Verkettungen, ob mit . oder mit doppelter Quotient-Interpolation, tatsächlich speicherineffizienter sein als ein Join , die den benötigten Zeichenfolgenpuffer für das Ergebnis vorberechnet, anstatt ihn mehrmals zu erweitern (möglicherweise muss das Partialresutl jedes Mal an eine neue Position verschoben werden).

Ich habe ein Problem mit der Kritik, die ich hier gesehen habe; Es gibt viele richtige Wege, Perl zu sprechen, und das ist sicherlich einer von ihnen.

Inkonsistente Einrückung auf der anderen Seite ...

    
ysth 21.11.2010 19:47
quelle

Tags und Links