Spezielle Formen des Regex-Operanden bei split

(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)

Normalerweise ist der Match-Operand bei split ein Regex-Literal oder ein Regex-Objekt, genau wie beim Match-Operator; aber hier gibt es einige Sonderfälle:

  • Eine leere Regex bedeutet bei split nicht »Verwende die voreingestellte Regex«, sondern sie weist split an, den Suchtext in einzelne Zeichen zu zerlegen. Wir hatten das am Anfang des split-Abschnitts erwähnt und gesehen, dass split(//, "Kleiner Test") eine Liste mit den zwölf Elementen ("K", "l", "e", ... "s", "t") erzeugt.
  • Ein Match-Operand, der ein String (nicht eine Regex) ist, der aus einem einzigen Leerzeichen besteht, verhält sich sehr ähnlich wie /\s+/, außer dass Whitespace am Anfang des Suchstrings ignoriert wird. Dieses Verhalten soll das Verhalten von awk imitieren, das jede Eingabezeile in dieser Art in Elemente aufteilt. Es lässt sich aber auch bei anderen Gelegenheiten nutzbringend anwenden.

    Wenn der Whitespace am Anfang ein leeres Element erzeugen soll, nimmt man m/\s+/. Wenn auch der Whitespace am Ende nicht ignoriert werden soll, kann man für den Limit-Operanden den Wert -1 angeben.

  • Wenn kein Match-Operand angegeben wird, wird ein String aus genau einem Zeichen (der Spezialfall aus dem letzten Abschnitt) als Standardvorgabe angenommen. Ein split ohne irgendwelche Operanden ist also gleichbedeutend mit split('', $_, 0).
  • Bei Verwendung der Regex ˹^˼ wird automatisch der /m-Modifikator (der verbesserte Zeilenankermodus oder Mehrzeilenmodus) aktiviert. (Bei ˹$˼ passiert das aus irgendwelchen Gründen nicht.) Ich empfehle, das m/^/m aus Gründen der Klarheit dennoch anzugeben. Mit split(m/^/m, ...) kann man einen mehrzeiligen String sehr einfach in einzelne Zeilen aufsplitten.

     

split hat keine Nebeneffekte

Der Match-Operand bei split sieht dem Match-Operator oft sehr ähnlich, aber er ist dennoch keiner: Er erzeugt keine Nebeneffekte. Die Regex in split wirkt sich nicht auf die voreingestellte Regex aus, die eventuell von einem späteren Match-Operator oder von einer Substitution verwendet wird. Die Variablen $&, $', $1 usw. werden nicht gesetzt und bleiben von split völlig unberührt. In Bezug auf Nebeneffekte ist split vom Rest des Programms komplett isoliert. (Anmerkung: Es gibt einen Nebeneffekt auf ein Feature, das schon seit Jahren als veraltet gilt und von dessen Gebrauch abgeraten wird, das aber immer noch implementiert ist. Wenn split in einem skalaren oder Void-Kontext verwendet wird, werden die Resultat-Elemente in das Array @_ geschrieben (das in Subroutinen auch die Argumentliste enthält). Verwenden Sie also bitte split nicht aus Versehen in einem skalaren oder Void-Kontext. Wenn mit -w oder use warnings die Warnungen aktiviert sind, warnt Perl davor.)

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Reguläre Ausdrücke bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:
   

Copyright der deutschen Ausgabe © 2008 by O’Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Reguläre Ausdrücke" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstr. 81, 50670 Köln