Kontakt aufnehmen

CGI: Programmsteuerung

Durch die Verwendung einiger Sprungbefehle kann man ein Script sehr effektiv flexibilisieren. Welche es wofür gibt, zeigt dieses Kapitel.

continue

Der Befehl continue 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++; }

Im Beispiel ist daher im Anweisungsblock der Schleife die Wertänderung von $Zahl nicht notwendig, da durch den Befehl continue $Zahl bereits vor jedem Schleifendurchlauf um 1 erhöht wird.

goto

Mithilfe von goto 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

Durch die Anweisung goto ANWEISUNG3; wird die Ausgabe in ANWEISUNG2 nicht ausgeführt.

last

Mithilfe von last 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
}

Normalerweise würde die Schleife erst dann abgebrochen werden, wenn das Argument von 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 Befehl next 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
}

Im Beispiel hat der Befehl 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 Befehls redo 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);
}

Die Schleife soll laut Argument hinter 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

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Cookie-Einstellungen

Helfen Sie dabei, uns noch besser zu machen. Wir nutzen Cookies und ähnliche Technologien, um die Website auf Ihre Bedürfnisse anzupassen. Zur Datenschutzerklärung

Auswahl speichern