Perl - Kontrollstrukturen

[ <= ] [ HOME ] [ INHALT ] [ INDEX ] [ => ]

Bedingte Verzweigung

#!/usr/local/bin/perl -w

for($i = 1;$i <= 5;$i ++) {
  if    ($i < 3)  { print "($i) kleiner als 3\n" }
  elsif ($i == 4) { print "($i) gleich 4\n" }
  elsif ($i > 4)  { print "($i) größer als 4\n" }
  else            { print "($i) keine der anderen Bedingungen erfüllt\n" }
  
  unless($i == 2) { print "[$i] ungleich 2\n" }
}

(1) kleiner als 3
[1] ungleich 2
(2) kleiner als 3
(3) keine der anderen Bedingungen erfuellt
[3] ungleich 2
(4) gleich 4
[4] ungleich 2
(5) groesser als 4
[5] ungleich 2

Das Argument von if ist eine Bedingung, die entweder wahr ("true") oder falsch ("false") ist. Im Falle von "wahr" wird der Block nach if ausgeführt. Ist die if-Bedingung falsch, so wird (falls vorhanden) das Argument des ersten elsif ausgewertet. Liefert auch dieses nicht den Wert true, kommt das nächste elsif an die Reihe; so lange bis entweder eine Bedingung wahr ist, keine Bedingungen mehr vorhanden sind oder ein abschließendes else erreicht wird, dessen Block ausgeführt wird, falls kein anderer Block infrage kommt.

Im Gegensatz zu anderen Programmiersprachen wie z.B. C muß der Block nach einem if, elsif oder else immer in geschweiften Klammern stehen; dadurch werden eventuelle Mehrdeutigkeiten vermieden.

Das Gegenstück von if ist unless, dessen Block nur ausgeführt wird, wenn die Bedingung im Argument den Wert false liefert.

Eine Alternative zu einer if-else-Konstruktion ist die Verwendung des Operators "?:":

$a == 1 ? print "a gleich 1" : print "a ungleich 1";

[ <- ] [ HOME ] [ INHALT ] [ INDEX ] [ -> ]

while und until

#!/usr/local/bin/perl -w

$i = 0;
while($i < 10) {
  print "$i\n";
  $i += 2;
}
until($i == 5) {
  print "$i\n";
  $i --;
}
Bei der while-Schleife wird zuerst das Argument überprüft. Falls dies true liefert, wird der Schleifenblock ausgeführt. Dies wiederholt sich so lange, bis das while-Argument false ist.

Die Negation der while-Schleife ist die Konstruktion mit Hilfe von until. Hier wird der Schleifenkörper so lange wiederholt bis das Argument von until den Wert true liefert. Obiges Programm liefert demzufolge die Ausgabe

0
2
4
6
8
10
9
8
7
6


[ <- ] [ HOME ] [ INHALT ] [ INDEX ] [ -> ]

for und foreach

Folgendes Programm schreibt die Zahlen von 1 bis 10 auf den Bildschirm:

#!/usr/local/bin/perl -w

for($i = 1;$i <= 10;$i++) { print "$i\n"; }

Zu allererst wird die Anweisung im 1.Argument von for ausgeführt. Anschließend wird das 2.Argument überprüft. Liefert diese Abfrage eine wahre Aussage (true), so wird der Schleifenblock ausgeführt. Nach dem Block wird das 3.Argument von for ausgewertet und dann wieder das Argument Nummer 2 überprüft. Dies wiederholt sich so lange, bis die Bedingung (Argument 2) nicht mehr erfüllt ist (Wert false). Dann fährt das Programm in der Zeile nach dem Schleifenblock fort.

Die for-Schleife ist eigentlich nur eine vereinfachte Schreibweise; obiges Beispielprogramm läßt sich auch wie folgt schreiben:

#!/usr/local/bin/perl -w

$i = 1;
while($i <= 10) {
  print "$i\n";
  $i++;
}

Anstatt der drei durch Semikolons getrennten Argumente, kann for auch eine Liste übergeben werden, die dann sukzessive abgearbeitet wird. Aus Gründen der Übersichtlichkeit sollte in so einem Falle aber an Stelle von for das äquivalente foreach stehen. Die einzelnen Zeilen des folgenden Skripts leisten alle das gleiche: Sie geben die Zahlen von 1 bis 10 aus.

#!/usr/local/bin/perl -w

for((1,2,3,4,5,6,7,8,9,10)) { print $_."\n" }
foreach((1,2,3,4,5,6,7,8,9,10)) { print $_."\n" }
foreach(1..10) { print $_."\n" }
foreach $nr (1..10) { print $nr."\n" }

In der letzten Zeilen sieht man, wie das gerade von foreach bearbeitete Listenelement einer Variablen zugewiesen werden kann. Wird keine solche Variable angegeben, so steht der aktuelle Listenwert in der speziellen Variablen $_.


[ <= ] [ <- ] [ HOME ] [ INHALT ] [ INDEX ] [ -> ] [ => ]

Autor: Eike Grote Letzte Änderung: 06.09.1998