Sehr Umfangreiche Webseite zum Programmieren in C Perl CGI, Skripting, Konvertieren, int ceil sprintf hex oct floor Runden AbschneidenPerl Kurs Skripting Schleifen while do while do until for foreach break continue Schleifen while do while do until for foreach break continue Perl Kurs Kapitel 7

7.1. while Schleife           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

Um mehrere Anweisungen hintereinander auszuführen, verwendet man die Schleifen. Die wichtigste Regel zu den Schleifen ist eigentlich nur, dafür zu sorgen, dass diese sich wieder beenden. Der Syntax der while-Schleife ...

while(BEDINGUNG==WAHR)
 {
   ANWEISUNG
 }

Die Anweisung in einer while-Schleife wird solange und sooft ausgeführt, bis die Bedingung in den Klammern der while-Schleife unwahr ist. Ist diese Bedingung unwahr, so wird das Programm hinter dem Anweisungsblock fortgeführt. Hierzu ein kurzes Beispiel ...

#!/usr/bin/perl -w

$counter=1;

while($counter <= 5)
 {
 print "Der Wert der Variable " . q% $counter% . " beträgt nach dem " .
        $counter . ".Durchlauf " . $counter*$counter . "\n";
 $counter++;
 }

In diesem Fall bekommen Sie nach jedem Schleifedurchlauf das Quadrat zu dem Wert von $counter. Die print-Anweisung wird 5mal auf dem Bildschirm ausgegeben denn dann ist die Bedingung ...

while($counter <=5)    #counter=6

... unwahr und das Programm wird hinter dem Anweisungsblock ( {} ) weitergeführt. In unserem Beispiel ist das Programm zu Ende.

7.2. do while Schleife           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Die do while Schleife ist optimal, wenn der Anweisungsblock mindestens einmal ausgeführt werden soll. Beispielsweise bei einem Auswahlmenü. Hier der Syntax für die do while Schleife ...

do {
       ANWEISUNG
     }while(BEDINGUNG==WAHR);

Bei einer do while-Schleife wird der Anweisungsblock so oft ausgeführt bis die Bedingung von while unwahr ist. Die Anweisung in dem Anweisungsblock wird  mindestens einmal ausgeführt. Wichtig ist auch, dass Sie die do while-Schleife mit einem Semikolon nach while abschließen. Hierzu nun ein Beispiel ...

#!/usr/bin/perl -w

$wert=1;

do  {
      print "Quadratflächenberrechung ... Gehen Sie die Seitenlänge ein : ";
      chomp($wert=<STDIN>);
      print "Quadratfläche = " . $wert*$wert . "\n";
      print "\nBeenden können Sie mit der Zahl 0\n\n";
    }while($wert!=0);

print "Programmende!\n";

Das Programm wird so lange ausgeführt bis Sie den Wert 0 eingeben. Ist die Bedingung in while wahr, wird immer wieder zum Schleifenanfang von do gesprungen. Ist der Inhalt von while unwahr (0) wird das Programm nach while fortgesetzt. In diesem Fall wird Programmende ausgegeben.

7.3. do until Schleife           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Die do until Schleife ist ähnlich wie die do while Schleife, nur das durch das Schlüsselwort until der Anweisungsblock so lange ausgeführt wird, bis die Bedingung in until unwahr ist. Hier der Syntax ...

do{
      ANWEISUNG
    }until(BEDINGUNG==UNWAHR);

Auch hier gilt schon wie bei der do while Schleife, until mit einem Semikolon zu beenden. Hier unser Programmbeispiel von zuvor mit until ...

#!/usr/bin/perl -w

$wert=1;

do  {
      print "Quadratflächenberrechung.......Gehen Sie die Seitenlänge ein : ";
      chomp($wert=<STDIN>);
      print "Quadratfläche = " . $wert*$wert . "\n";
      print "\nBeenden können Sie mit der Zahl 0\n\n";
    }until($wert==0);

print "Programmende!\n";

Im Gegensatz zum do while-Skript, wurde nur das while durch until und $wert!=0 durch $wert==0 ersetzt. Gesprochen heißt dies, dass unser Programm so lange ausgeführt wird, bis der Inhalt von until wahr ist (bei while musste der Inhalt unwahr sein). Ist der Inhalt von until wahr wird das Programm nach until fortgesetzt. Im Prinzip ist das Schlüsselwort until überflüssig.

7.4. for Schleife           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Mit der for-Schleife können wir drei Anweisungen zwischen die Klammern stellen. Und zwar die Initialisierung, die Bedingung und den Schleifenzähler. Hier der Syntax der for-Schleife ...

for(INITIALISIERUNG, BEDINGUNG==WAHR, INKREMENT)
 {
   ANWEISUNG
 }

Die Initialisierung findet nur einmal bei Eintritt in die Schleife statt. Die Schleifenbedingung wird nach jedem Schleifendurchlauf überprüft ob diese wahr ist. Wenn diese wahr ist wird der Anweisungsblock ausgeführt. Im Prinzip stellt die for-Schleife nichts anderes da, als eine verkappte while-Schleife. Folgende Programme erfüllen den selben Zweck ...

#!/usr/bin/perl -w

$wert=1;

while($wert <= 5)
 {
   print $wert . ".Schleifendurchlauf\n";
   $wert++;
 }

Hier wird der Anweisungsblock 5x ausgeführt. Das ganze jetzt mit der for-Schleife ...

#!/usr/bin/perl -w

for($wert=1; $wert<=5; $wert++)
 {
   print $wert . ".Schleifendurchlauf\n";
 }

Unterscheiden tun sich also die beiden Schleifen nicht. Nur gilt die for-Schleife als etwas komfortabler und vielseitiger als andere Schleifen. Aber es führen viele Wege nach Rom ...

7.5. foreach Schleife           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Die foreach-Schleife ist für viele Programmiererfahrene wieder Neuland. Aber im Prinzip ist diese Schleife eine Abart der for-Schleife. Hierzu erst der Syntax ...

foreach $var LISTE
 {
   ANWEISUNG
 }

Mit foreach werden nacheinander alle Elemente der Liste durchlaufen. Wozu? Nun nehmen wir mal an Sie wollen von 1-10 mit ungeraden Zahlen rechnen. Dies würden Sie nach dem jetzigen Wissensstand so machen ...

#!/usr/bin/perl -w

for($wert=1; $wert<=10; $wert++)
 {
   if($wert % 2) #gerade Zahl = 0, ungerade Zahl = 1
     {
       print $wert*$wert . "\n";
     }
 }

Hier berechnen Sie die Quadratfläche zu allen ungeraden Zahlen von 1-10. Mit foreach könnten das jetzt so aussehen ...

#!/usr/bin/perl -w

foreach $wert (1..10)
 {
   if($wert % 2) #gerade Zahl = 0, ungerade Zahl = 1
     {
       print $wert*$wert . "\n";
     }
 }

Auch in diesem Beispiel wird der Wert 1-10 durchlaufen. Die Initialisierung von $wert übernimmt in diesem Fall die Schleife für uns. Einen echten Vorteil haben wir aber jetzt davon nicht. Die Schleife wird dennoch 10 mal Durchlaufen, dabei 5 mal Umsonst da die Zahl gerade ist. Man kann die foreach-Schleife ja auch anderes verwenden ...

#!/usr/bin/perl -w

foreach $wert (1, 3, 5, 7, 9)
 {
       print $wert*$wert . "\n";
 }

Jetzt wir die Schleife tatsächlich nur 5 mal ausgeführt. Natürlich sind mit foreach auch noch eine Menge anderer Schreibweisen möglich ...

foreach $farbe ('rot', 'blau', 'gruen')
#Es wird das ganze Alphabet in Kleinbuchstaben durchlaufen
foreach $alpha ('a'..'z')

Manch einem der bereits Erfahrung in C/C++ hat, wird dabei eine Ähnlichkeit mit den Arrays sehen. Und er hat Recht, es lässt sich sehr gut dafür Verwenden. Dazu kommen wir noch.

7.6. Schleifen abbrechen           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

Manchesmal wird es nicht ausreichen eine Schleife zu beenden, wenn die Schleifenbedingung nicht mehr Erfüllt wird. Dafür gibt es Abbruchbefehle.

Die Schleifenabbruchbedingung redo, wobei es eher eine Erneut-in-die-Schleife-springen Befehl ist, kann man in C/C++ mit continue vergleichen. Bei Ausführung von redo in der Schleife, wird wieder an den Anfang der Schleife zurückgesprungen ...

#!/usr/bin/perl -w

$wert=1;

while(1)
 {
   print "Bitte geben Sie eine Zahl ein : ";
   chomp($wert=<STDIN>);

   if($wert < 10)
     {
       print "Bitte eine Zahl grösser als 10 eingeben!!!\n";
       redo;                     #wieder zu while hochspringen
     }
   print "Korrekte Eingabe\n";
   last;
}

Mit while(1) haben Sie hier eine Endlosschleife erschaffen.  In unserem Beispiel wird die Schleife mit last abgebrochen. Wenn Sie eine Zahl eingegeben haben die kleiner als 10 war, wird der Anweisungsblock der if-Anweisung ausgeführt. Mit redo wird veranlasst, dass wieder zum Anfang der Schleife gesprungen wird. Haben Sie eine Korrekte Zahl eingeben, wird die Schleife mit last abgebrochen. Das heißt, das Programm wird nach dem Anweisungsblock der Schleife weitergeführt. In unserem Fall wird das Programm beendet.

Eine weiter Möglichkeit in einer Schleife einzugreifen stellt das Schlüsselwort next da. Mit Hilfe der next-Anweisung wird ein Schleifendurchlauf übersprungen und der nächste Durchlauf wird gleich Ausgeführt. Hierzu ein einfaches Beispiel ...

#!/usr/bin/perl -w

for($wert=1; $wert <= 20; $wert++)
 {
   if($wert % 2)
     {
       next;        #Die Zahl ist ungerade und interessiert uns nicht
     }
   print $wert . "\n";
 }

In diesem Beispiel geben Sie alle Geraden Zahlen auf dem Bildschirm aus. Bei einer Ungeraden Zahl wird die nächste Anweisung übersprungen und es wird mit dem nächsten Schleifendurchlauf fortgefahren.