Thread String splitten: attention, newbie detected! (6 answers)
Opened by miodio at 2006-05-31 13:50

Dubu
 2006-05-31 23:11
#66827 #66827
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Dein Tutorial war wohl nicht vollständig.

Es gibt in Perl zwei for-Schleifen. Erstens die "C-ähnliche" Schleife, deren Syntax du oben aufgeschrieben hast. Und zweitens die Schleife über eine Liste:

  for skalar (liste) { ... }

Die liste kann dabei auch ein Array sein. Beispiel:
Code: (dl )
1
2
3
for my $element (@array) {
   print $element;
}

Bei dieser Schleife ist $element nacheinander ein Alias für alle Elemente von @array, d.h. es enthält nacheinander die Werte von @array, und wenn man $element etwas zuweist, dann wird das entsprechende Element in @array geändert.

Man kann $element auch noch weglassen, dann übernimmt die Defaultvariable $_ die Funktion:
Code: (dl )
1
2
for (@array) {
   print;       # ist das Gleiche wie "print $_"


Die gleiche Funktion kann man auch mit der anderen for-Schleife erreichen, aber es ist a) länger, b) unübersichtlicher und c) fehlerträchtiger:
Code: (dl )
1
2
3
for (my $i = 0; $i <= $#array; ++$i) {
   print $array[$i];
}

($#array ist der Index des letzten Elementes in @array.)

Im obigen Fall wird die Liste, über die die Schleife geht, durch den Ausdruck
Code: (dl )
$muh =~ /<DIR>\s*([^\s]+)/g

geliefert. Wenn so ein Pattern Match mit einem /g am Ende im Listenkontext steht, dann besteht die Liste aus allen Treffern, die sich im String (hier $muh) finden lassen.


Ich denke, du solltest dir mal ein besseres Tutorial anschauen. Vielleicht findest du etwas geeignetes unter Wiki:Wissensbasis.PerlWebSites. Wir empfehlen gerne Strats "Einführung in Perl". :)

View full thread String splitten: attention, newbie detected!