CGI: Programmsteuerung
Durch die Verwendung einiger Sprungbefehle kann man ein Script sehr effektiv flexibilisieren. Welche es wofür gibt, zeigt dieses Kapitel.continue
Der Befehlcontinue
kann beispielsweise in Verbindung mit Schleifen eingesetzt werden. Er leitet einen Anweisungsblock ein, welcher, wenn er direkt hinter dem Schleifenkörper steht, vor jedem Durchlauf der Schleife ergänzend ausgeführt wird:
$Zahl = 0;
until($Zahl == 4)
{ print $Zahl; }
continue
{ $Zahl++; }
$Zahl
nicht notwendig, da durch den Befehl continue $Zahl
bereits vor jedem Schleifendurchlauf um 1 erhöht wird.
goto
Mithilfe vongoto
kann man zu einer vorher definierten (!) Stelle im Script springen, so dass die dazwischen stehenden Anweisungen nicht ausgeführt werden. Die Deklaration und Ansteuerung dieser Stellen erfolgt durch so genannte Labels, welche der besseren Übersicht wegen in Großbuchstaben notiert werden sollten. Bei der Deklaration eines Labels folgt diesem ein Doppelpunkt (:
). Der Sprung zu einem Label erfolgt mittels goto
gefolgt von dem Label. Da dies eine Anweisung ist, darf der Strichpunkt (;
) am Ende nicht vergessen werden:
ANWEISUNG1: #Label für ANWEISUNG1
print "Anw. 1";
goto ANWEISUNG3; #Springt zu ANWEISUNG3
ANWEISUNG2: #Label für ANWEISUNG2
print "Anw. 2";
ANWEISUNG3:
print "Anw. 3"; #Label für ANWEISUNG3
goto ANWEISUNG3;
wird die Ausgabe in ANWEISUNG2
nicht ausgeführt.
last
Mithilfe vonlast
und der nachfolgenden Bedingung kann eine Schleife (vorzeitig) abgebrochen werden:
while($Zahl < 4)
{
print $Zahl;
last if ($Zahl2 == 2);
#Bricht Schleife ab, wenn $Zahl2 gleich 2
$Zahl++; #Inkrementation von $Zahl
$Zahl2++; #Inkrementation von $Zahl2
}
while
false, also $Zahl
größer/gleich 4, wäre. Durch den Befehl last
wird die Schleife jedoch schon abgebrochen, wenn $Zahl2
den Wert 2 erreicht.
next
Mit dem Befehlnext
kann man einen aktuellen Schleifendurchlauf abbrechen, wenn die dahinter folgende Bedingung true ergibt. Die nachfolgenden Anweisungen werden dann solange nicht ausgeführt, bis diese Bedingung wieder false ergibt:
foreach $Zahl (1..10)
{
next if (($Zahl > 3) && ($Zahl < 6));
print $Zahl; #Gibt 123678910 aus
}
next
mit nachfolgender komplexer Bedingung zur Folge, dass $Zahl
als aktuelles Element der Liste nicht ausgegeben wird, wenn die Auswertung des Arguments ($Zahl > 3) && ($Zahl < 6)
true ergibt. Alle Zahlen größer 3 und kleiner 6, also 4 und 5, werden nicht ausgegeben, da der jeweilige Schleifendurchlauf durch next
abgebrochen wird.
redo
Mittels des Befehlsredo
wird ein aktueller Schleifendurchlauf nochmals ausgeführt, ohne dass die dazugehörige Schleifenbedingung wiederholt geprüft wird:
foreach $Zahl (1..2)
{
print $Zahl; #Gibt 12323 aus
$Zahl++;
redo if ($Zahl < 4);
}
foreach
insgesamt dreimal durchlaufen und $Zahl
dabei mit dem Wert des aktuellen Listenelements belegt werden.Innerhalb des Anweisungsblocks der Schleife wird
$Zahl
nach Ausgabe an den Browser wiederum stets um 1 erhöht. Durch die Anweisung redo if ($Zahl < 4);
wird jedoch erreicht, dass der aktuelle Schleifendurchlauf wiederholt wird, $Zahl
also immer wieder ausgegeben und um 1 erhöht wird, bis $Zahl
nicht mehr kleiner als 4 ist. Dabei wird die Schleifenbedingung nicht neu ausgewertet, der Wert von $Zahl
von ihr also nicht neu gesetzt. Anschließend erfolgt ein neuer Schleifendurchlauf mit Auswertung der Schleifenbedingung. $Zahl
erhält als Wert ein neues Listenelement und das ganze geht nun mit erhöhten Startwert wieder von vorn los.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ Subroutinen
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project