Perl split einen string mit einem string-basierten Trennzeichen
Ich bin ganz neu in Perl, aber auf der Grundlage der Dokumentation, die ich gelesen habe, sieht es aus wie der split-Funktion in ein Perl-fragt nach einem regex-Muster, anstatt eine Zeichenfolge, Trennzeichen, wie der erste parameter, aber ich fand, dass Sie so etwas wie print +(split(' ', $string))[0]
noch split die Zeichenfolge richtig.
Basierend auf dieser, ich habe versucht, eine variable zu verwenden, Trennzeichen (ex. print +(split($var, $string))[0]
wo $var = ' '
) und fand, dass es nicht funktioniert. Was mache ich falsch?
Dank!
BEARBEITEN:
Sorry für die schreckliche Frage. Ich lief gegen eine Zeichenkette mit führenden Leerzeichen und festgestellt, dass die split-Funktion nicht wie die führenden Leerzeichen. Zum Beispiel:
my $var = ' ';
print +(split($var, ' abc ddddd'))[0]
gibt eine leere Ausgabe. Ist $var wird interpretiert als /$var/
innerhalb der split Funktion?
versus
print +(split(' ', ' abc ddddd'))[0]
das gibt eine Leistung von abc
Also wenn ich die Dokumentation Lesen, ich war der Annahme, meine variable als string-literal, wenn es in Wirklichkeit nicht war, und daher die führenden whitespace-Zeichen wurde nicht entfernt.
it did not work
ist nicht detailliert genug. Erstellen einer ausführbaren Testfall.- Funktioniert Prima ... eval.in/240865
- Jedes mal, wenn Sie eine Frage haben über ein Perl-built-in-Funktionen, empfehle ich Ihnen zu überprüfen
perldoc
. Wenn es auf Ihrem system installiert haben, können Sieperldoc -f <function>
oder in diesem Fall,perldoc -f split
(habe ich verlinkt mit der online-version aus Bequemlichkeit). Die Dokumentation ist ausgezeichnet. Ihre Unsicherheit übersplit
mit regex vs. string ist ausführlich erläutert, einschließlich der besonderen Fall vonsplit ' '
. - Was bedeutet "funktioniert nicht" bedeutet? "funktioniert nicht" ist eine Unzureichende Beschreibung für uns, das problem zu verstehen. Was passiert, wenn du es ausprobiert? Hast du eine Fehlermeldung bekommen? Hast du falsche Ergebnisse? Haben Sie keine Ergebnisse erhalten? Wenn die Ergebnisse falsch waren, was machte Sie falsch? Was hast du erwartet statt? Hast du irgendwelche richtigen Ergebnisse? Wenn ja, welche waren das? Lass uns nicht raten.
- Da
split ' '
wird ein literal space als Trennzeichen, beriefen sich auf den besonderen Fall beschrieben, in die perldoc.$var = ' '; split $var
entspricht dersplit / /
, das ist eine regex, split, nicht die gleiche Sache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erklärung
Wenn Sie split auf einer wörtlichen Raum
Rufen Sie den besonderen Fall beschrieben, in die Dokumentation. Wenn Sie eine variable verwenden
Ist es das gleiche wie putting, dass die variable innerhalb einer regex:
Diese wird aufgeteilt auf einzelne Leerzeichen, nicht die gleiche Sache. Wenn man zum Beispiel diesen code:
Dann
@literal
enthalten"foo", "bar", "baz"
, und@space
enthalten"foo", "bar", "", "", "baz"
-- leere Felder, wo es aufgeteilt auf die einzelnen Räume.Dokumentation
Dies ist, wie die Dokumentation beschreibt:
Abhilfe
Beachten Sie, dass wenn Sie auf der Suche nach einem Weg, um dynamisch zu emulieren, die
' '
aufteilen, indem eine variable, die Sie verwenden könnten/\s+/
statt. Es ist nicht ganz das gleiche, es wird nicht zu entfernen führender Leerzeichen, aber sonst sollte funktionieren wie erwartet.dein code funktioniert einwandfrei, ich denke
Obwohl, bei den Kosten für eine zusätzliche Zeile, ich würde eher schreiben, dass die Letzte Zeile wie: