<< Arrays | Inhalt | bedingte Verzweigungen >> |
for-Schleife | while-Schleife | until-Schleife | do-while-Schleife | do-until-Schleife | foreach-Schleife | Vorzeitiges beenden einer Schleife mit last | <stdin> und while | die Spezialvariable $_ |
Schleifen sind ein grundlegendes Element jeder Programmiersprache. Perl hat alles was eine Programmiersprache braucht - also auch Schleifen. Mit Schleifen kann man einen Block von Befehlen wiederholen.
Die for-Schleife teilt sich auf in Kopf und Anweisungsblock:
Was passiert da? Also als erstes wird der Teil init. im Kopf ausgeführt. In der Regel steht dort eine Variableninintialisierung - und zwar der sog. Schleifenvariablen - (z. B. $i=0), jedoch kann man dort auch irgendetwas anderes einbauen - ob das nun sinnvoll ist, ist wieder eine andere Frage. Der zweite Teil des Kopfes ist ein Test auf Durchführung der Schleife (falls der Test true liefert) oder Abbruch der Schleife (falls der Test false liefert). Der Test wird nach der Initialisierung ausgeführt und kann z. B. so Aussehen: $i<=10. Anschließend werden die Befehle im Anweisungsblock - das ist alles, was zwischen den beiden Klammern {} steht - abgearbeitet. Ist das geschehen, wird der letzte Teil des Kopfes behandelt. Dort wird in der Regel die Schleifenvariable hochgezählt (z. B. $i++). Danach wird ab dem zweiten Teil des Kopfes alles wiederholt.
Ein Beispiel:
Im einzelnen geschieht hier folgendes:
Schritt | Beschreibung | Wert von $i | Wert des Tests |
1 | Standardvariable $i auf 0 setzen | 0 | |
2 | Teste, ob Schleife ausgeführt werden soll | true | |
3 | Drucke Wert von $i auf dem Bildschirm aus (das ist 0) gefolgt von einem Zeilenumbruch | ||
4 | Erhöhe $i um 1 | 1 | |
5 | Teste, ob Schleife ausgeführt werden soll | true | |
... | ... | ||
28 | erhöhe $i | 9 | |
29 | Teste, ob Schleife ausgeführt werden soll | true | |
31 | Ausgabe von 9 | ||
32 | erhöhe $i | 10 | |
33 | Teste, ob Schleife ausgeführt werden soll | false | |
34 | Schleife ist beendet, da der Test false ergibt |
Die while-Schleife ist etwas einfacher aufgebaut als die for-Schleife:
Die while-Schleife besitzt ebenfalls einen Kopf und einen Anweisungsblock. Im Kopf wird vor jedem Durchlauf der Schleife getestet, ob die Schleife durchlaufen werden soll oder nicht. Falls der Test true ergibt, dann werden die Befehle im Anweisungsblock abgearbeitet; ergibt der Test false, dann wird die Schleife nicht (mehr) durchlaufen. Kurz könnte man sagen: "Solange der Test stimmt arbeite den Block ab."
Die until-Schleife ist analog zur while-Schleife aufgebaut. Einziger Unterschied: Im Kopf der Schleife wird getestet, ob der Anweisungsblock nicht abgearbeitet werden soll.
Die Schleife wird solange durchlaufen, bis der Test im Kopf true ergibt. Kurz könnte man sagen: "Arbeite den Block ab bis der Test wahr ist."
Etwas anders funktioniert die do-while-Schleife. Es wird zuerst der Block abgearbeitet und dann geprüft, ob die Schleife weiter durchgeführt werden soll. Solange der Test wahr ergibt, wird weitergemacht, beim ersten false wird aufgehört.
Analog zur do-while-Schleife funktioiert die do-until-Schleife. Es wird zuerst der Block abgearbeitet und dann geprüft, ob die Schleife weiter durchgeführt werden soll. Es wird solange der Block durchgearbeitet, bis das erste Mal true getestet wird.
Die foreach-Schleife ist speziell für Arrays gemacht und ähnelt der for-Schleife:
Es werden einfach die Elemente des Arrays nacheinander durchlaufen.
Beispiele dazu:
Mit Hilfe des Befehls last kann man eine Schleife vorzeitig beenden:
Um mehrere Zeilen aus der Standardeingabe einzulesen, bedient man sich einer while-Schleife und dem <STDIN>-Operator:
Wenn man den Namen der Skalarvariablen weglässt, so speichert Perl bei bestimmten Operationen den Wert automatisch in die Spezialvariable $_. Dies erspart ... Zeit? ... Platz? ... Kompliziertheit? ... Klarheit?
Ok - diese Variable gibt's, also benutzen wir sie auch. Ein Beispiel kennen wir schon; hier das nächste:
for-Schleife | while-Schleife | until-Schleife | do-while-Schleife | do-until-Schleife | foreach-Schleife | Vorzeitiges beenden einer Schleife mit last | <stdin> und while | die Spezialvariable $_ |
<< Arrays | Inhalt | bedingte Verzweigungen >> |
© 2001-2003 Perl, Lehrstuhl Mathe II, Uni Bayreuth |