Artikel im Internet unter http://www.hidemail.de/blog/split-in-perl.shtml.
Montag, 19.2.2007, 08:50:42 Uhr

split() - Zeichenketten zerlegen in Perl


Der Befehl split() ist eine mächige Funktion, mit der man Skalare in Arrays zerlegen kann.

Syntax:
@array=split(/$trennungszeichen/,$skalar);


$t="Das hier ist ein Testtext";
@array=split(/ /,$t);
foreach (@array){print "$_\n";}


Ausgabe:
Das
Hier
ist
ein
Testtext

Dem Array wurden also alle einzelnen Wörter zugewiesen. Natürlich kann man als Trennzeichen auch jedes andere Zeichen verwenden, ja sogar ganze Wörter sind möglich.

Wozu man das braucht? Klar, könnt ich jetzt sagen, zum Teilen von Skalaren in Arrays... aber nun mal im Ernst: Angenommenerweise, man hat eine Zeichenfolge wie die Folgende:

$t=<<EOF;
Das ist ein
Testtext
EOF


und ich möchte jetzt jede Zeile einzeln haben.

@einzeln=split(/\n/,$t);


Einfach, oder?

Oder nächstes Beispiel:

$t="Das ist ein Testtext. Er wird verwendet, um etwas zu testen.";
@saetze=split(/\./,$t);
print join("\n",@saetze);


Ausgabe:
Das ist ein Testtext
Er wird verwendet, um etwas zu testen

Es werden also alle Sätze einzeln aufgeteilt, oder besser gesagt: Es erfolgt ein Split bei jedem Punkt.

Übrigens:
Die Zeichen, die als Trennungszeichen genommen werden, werden nicht mit in das Ergebnis aufgenommen. Man sieht das gut am letzten Beispiel, da fehlen an den Satzenden die Punkte.

Es gibt da noch ein paar Besonderheiten zu split()

Ein split('',$skalar) zum Beispiel teilt den Skalar in seine einzelnen Buchstaben bzw. Zeichen.


$t="TEST";
@array=split('',$t);
foreach (@array){print "$_\n";}


Die Ausgabe lautet:
T
E
S
T

Und eine weitere Besonderheit ist, daß die Zeichenfolge, die als Trenner definiert wird, sich eigentlich wie ein regulärer Ausdruck verhält.


$t="Hans::Meier:Dortmund";
@array=split(/:+/,$t);
foreach (@array){print "$_\n";}


Ausgegeben wird
Hans
Meier
Dortmund

Wieso sollte klar sein, wenn nicht, dann hier die Erklärung:
Das split(/:+/,$) teile den Skalar nach jedem einzelnen oder mehrfach hintereinander auftauchenden Doppelpunkt, in diesem Fall also dem Trenner des Vornamens, Nachnamens und Ortes.

Und noch etwas fällt mir gerade noch dazu ein:
split verwendet, wenn sonst nichts angegeben wird, die Spezialvariable $_.

@mitarbeiter = ("Benno:Meier", "Hans:Müller", "Peter:Kaufmann");
foreach (@mitarbeiter){
my ($vorname,$name)=split(/:/);
print "$vorname $name\n";
}


Ausgabe
Benno Meier
Hans Müller
Peter Kaufmann

In der foreach-Schleife wird ja das $_ jeweils mit dem aktuellen Array-Wert belegt, das dann gesplittet wird.
Ob man das so verwendet ist Geschmackssache, es gibt auch Leute, die lieber eine separate Variable für einen Schleifendurchlauf verwenden (der Übersicht wegen).



Artikel im Internet unter http://www.hidemail.de/blog/split-in-perl.shtml.