Kontrollstrukturen

Anweisungsblöcke
Schleifen mit while/until
Schleifen mit do..while/until
Schleifen mit for/foreach
Bedingte Anweisungen mit if/unless/else/elsif




Anweisungsblöcke

In einem Anweisungsblock stehen eine Reihe von Anweisungen die nacheinander abgearbeitet werden müssen. Solche ein Anweisungsblock wird in Perl von geschweiften Klammern umschlossen.

Beispiel 1:

#!/usr/bin/perl
{
  print "Ich bin der erste Befehl\n";
  print "und ich bin der nächste Befehl\n";
  print "Fertig!";
}

Erläuterung:

Ein Anweisungsblock bildet eine Einheit, die man überall dort einsetzen kann, wo man auch einen einzigen Befehl verwenden kann. Der Sinn von Anweisungsblöcken wird in den nächsten Abschnitten deutlich werden.

Schleifen mit while/until

Mit Hilfe von while-Schleifen können Anweisungsblöcke solange wiederholt werden, wie die Bedingung, die in der Schleife formuliert wird, erfüllt ist. Mit until-Schleifen werden Anweisungsblöcke wiederholt, bis die Bedingung, die in der Schleife formuliert wird, erfüllt ist.

Beispiel 1:

#!/usr/bin/perl
$i=0;
while ($i!=10) {	# Durchlaufe die Schleife solange $i ungleich 10 ist
  $i++;
  print "$i\n";
}

Beispiel 2:

#!/usr/bin/perl
$i=0;
until ($i==10) {	# Durchlaufe die Schleife bis $i gleich 10 ist
  $i++;
  print "$i\n";
}

Eine while-Schleife (siehe Beispiel 1) beginnt mit dem Wort while. Dahinter folgt, in Klammern stehend, die Bedingung. Der Inhalt der Schleife wird solange wiederholt, wie die Schleifenbedingung wahr ist.

Eine until-Schleife (siehe Beispiel 2) beginnt mit dem Wort until. Dabei handelt es sich um eine andere logische Formulierung als bei while. Der Inhalt der Schleife wird solange wiederholt, bis die Schleifenbedingung wahr ist. Ansonsten gelten für until-Schleifen die gleichen Regeln wie für while-Schleifen.

Schleifen mit do..while/until

Bei dieser Art von Schleife wird nicht zuerst die Bedingung ausgewertet, sondern der Anweisungsblock ausgeführt. Erst anschließend wird die erste Schleifenbedingung ausgewertet. Die Schleife wird also in jedem Fall mindestens einmal durchlaufen, egal wie die Schleifenbedingung lautet.

Beispiel 1:

#!/usr/bin/perl
$i=0;
do {
  $i++;
  print "$i\n";
} while ($i<10);     # starte den Anweisungsblock erneut, solange $i < 10 ist

Beispiel 2:

#!/usr/bin/perl
$i=0;
do {
  $i++;
  print "$i\n";
} until ($i==10);    # starte den Anweisungsblock erneut, bis $i == 10 ist

Erläuterung:

Eine Schleife dieses Typs beginnt mit dem Schlüsselwort do. Anschließend folgt der Anweisungsblock der Schleife, wie üblich markiert durch geschweifte Klammern. Nach der schließenden geschweiften Klammer folgt die Schleifenbedingung. Die Schleifenbedingung kann mit while oder mit until formuliert werden.

Schleifen mit for/foreach

Schleifen mit for oder foreach unterscheiden sich von Schleifen mit while oder until dadurch, dass sie bereits in der Schleifenbedingung eine feste Abbruchbedingung vorsehen.

Beispiel 1:

#!/usr/bin/perl
$summe=0;
for ($i=1; $i<=10; $i++) {
   $summe=$summe+$i;
} 
print "Die Summe der Zahlen von 1 bis 10 ist: ",  $summe;

Beispiel 2:

#!/usr/bin/perl
@zahlen = ("Eins", "Zwei", "Drei", "Vier", "Fuenf");
foreach $i (reverse @zahlen) {
  print $i, " ";
  sleep 1;
} 
print "Start!";

Erläuterung:

Eine for-Schleife beginnt mit dem Wort for. Dahinter wird, in Klammern stehend, die Schleifenkopf formuliert. Im Schleifenkopf werden drei Anweisungen notiert. Genauso wie in Java oder C wird in der ersten Anweisung der Schleifenzähler definiert und initialisiert. Die zweite Anweisung enthält die Bedingung, die dritte verändert den Schleifenzähler so, dass er irgendwann die in der zweiten Anweisung notierte Bedingung erfüllt.

Eine spezielle, Perl-typischen Konstruktion ist die foreach Schleife (siehe Beispiel 2). Bei diesem Schleifentyp wird als Schleifenbedingung in Klammern ein eindeutiger Bereich definiert. Dies muss nicht unbedingt, wie in Beispiel 2, eine ganze Listen sein, es ist auch möglich Teilbereich anzugeben z.B. ("a".."b") oder (1..100).

Achtung:

Um eine Liste von hinten zu durchlaufen kann man in der Schleifenbedingung den Befehl reverse benutzen.

Bedingte Anweisungen mit if/unless/else/elsif

Bedingte Anweisungen können die Ausführung von Anweisungen von Bedingungen abhängig machen.

Beispiel 1:

#!/usr/bin/perl
print "Bitte gib Dein Alter ein: ";
$alter = <STDIN>;
if ($alter < 18) {
  print "Na Kleiner ...\n";
} elsif ($alter < 35) {
  print "Na, haben wir da nicht geschummelt?\n";
} else {
  print "Wir empfehlen die Kraft der zwei Herzen.\n";
}

Erläuterung:

Mit if werden Wenn-Dann-Bedingungen eingeleitet. Dahinter folgt, in runden Klammern () stehend, die Formulierung der Bedingung.

Eine andere Möglichkeit, um eine Wenn-Dann-Bedingung zu formulieren, steht mit unless zur Verfügung. Dabei gelten die gleichen Regeln wie bei if. Der Unterschied zu if besteht darin, dass bei unless nicht abgefragt wird, welche Bedingung erfüllt sein muss, damit der davon abhängige Programmcode ausgeführt wird, sondern welche Bedingung nicht erfüllt sein darf.

Mit else definiert man den Zweig Ihrer Abfrage, der ausgeführt werden soll, wenn die Bedingungen von if, unless oder elsif nicht zutreffen. Wenn Sie für diesen Fall keine Anweisungen brauchen, lassen Sie den else-Zweig einfach weg.

Achtung:

Alles, was innerhalb einer Verzeigung ausgeführt werden soll muss in einem Anweisungsblock zusammengefasst werden, d.h. von geschweiften Klammern eingeschlossen.

Index

© Markus Katzmayr, 2000 - last modified: Nov 05, 2000.