SELFHTML/Quickbar  CGI/Perl  Perl-Sprachelemente


Bedingte Anweisungen

Diese Seite ist ein Dokument mit Informationstext

 Bedingte Anweisungen mit if/unless/else/elsif
 Einfache Entweder-Oder-Abfrage

 

Bedingte Anweisungen mit if/unless/else/elsif

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

Beispiel:

#!/usr/bin/perl

@Passwords = ("Piesepampel","Lederstrumpf","Hotzenplotz");        # Passwortliste

# Einfaches CGI-Script fuer Passwortabfrage                            #
# In der ersten unless-Abfrage wird geprueft, ob die Standard-Eingabe  #
# das Wort 'geheim' enthaelt. Ist das nicht der Fall, wird eine HTML-  #
# Datei mit einem kleinen Formular zur Passworteingabe erzeugt. Beim   #
# Absenden des Formulars wird wieder dieses Script aufgerufen. Da aber #
# nun der Name des Formularfelds fuer das Passwort 'geheim' lautet,    #
# kommt das Script in den else-Zweig. Dort wird geprueft, ob das       #
# eingegebene Wort in der Passwortliste vorkommt.                      #

read(STDIN, $Input, $ENV{'CONTENT_LENGTH'});     # Standard-Eingabe auslesen
unless($Input =~ /geheim/)                       # Wenn 'geheim' darin nicht vorkommt...
 {
  print "Content-type: text/html\n\n";           # HTTP-Header fuer HTML-Datei
  print "<html><head><title>Passwort</title></head>\n";           # HTML-Datei
  print "<body bgcolor=#C0C0C0><h1>Passwort</h1>\n";
  print "<form action=\"\\cgi-bin/test.pl\" method=post>\n"; 
  print "<input type=password name=\"geheim\" maxlength=15 size=15>\n"; 
  print "<input type=submit value=\"Absenden\">\n";
  print "<input type=reset value=\"Abbrechen\">\n";
  print "</form></body></html>\n";
  exit(0);
 }
else                                             # wenn 'geheim' vorkommt...
 {
  print "Content-type: text/html\n\n";           # HTTP-Header fuer HTML-Datei
  print "<html><head><title>Passwort</title></head>\n";           # HTML-Datei
  print "<body bgcolor=#C0C0C0><h1>Passwort</h1>\n";
  ($name, $value) = split(/=/, $Input);   
  for(@Passwords)                                # Passwortliste abklappern
   {
    if($value eq $_)                             # Wenn eingegebener Wert gleich Passwort
     {
      $Erfolg = "ja";
      last;                                      # for-Schleife abbrechen
     }
    else                                         # Wenn eingegebener Wert ungleich Passwort
     {
      $Erfolg = "nein";
     }
   }
  if($Erfolg eq "ja")
   {
    print "<b>Eingeloggt!</b>\n"; # Hier kann z.B. ein Verweis zu einer geheimen URL folgen
   }
  else
   {
    print "<b>Sorry, Sie haben hier KEINEN Zutritt oder Ihr Passwort falsch eingegeben!</b>\n";
   }
  print "</body></html>\n";
  exit(0);
 }

Erläuterung:

Mit if können Sie eine Wenn-Dann-Bedingung einleiten (if = wenn). Dahinter folgt, in Klammern stehend, die Formulierung der Bedingung. Um solche Bedingungen zu formulieren, brauchen Sie  Vergleichsoperatoren für Zahlen oder Zeichenketten, oft auch  Variablen oder  reguläre Ausdrücke.

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

Wenn Sie mehrere Bedingungen in Reihe schalten wollen, sollten Sie für alle weiteren Bedingungen nach der ersten if/unless-Bedingung anstelle davon elsif verwenden (elsif = oder wenn).

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

Beachten Sie:

Alles, was innerhalb einer Verzweigung mit if, unless, elsif oder else steht, muß in geschweifte Klammern eingeschlossen werden, auch, wenn es sich nur um eine einzige Anweisung handelt.

 

Einfache Entweder-Oder-Abfrage

Für einfache Entweder-Oder-Bedingungen gibt es eine spezielle Syntax, die Sie alternativ zur if/else-Anweisung verwenden können.

Beispiel:

#!/usr/bin/perl

$Ergebnis = $ENV{'HTTP_USER_AGENT'} =~ /95/ ? "Win 95/NT" : "kein Win 95/NT";
print "Content-type: text/html\n\n"; 
print "<html><head><title>User</title></head>\n";
print "<body>\n";
print "<h1>Sie haben ", $Ergebnis, "!</h1>\n";
print "</body></html>\n";
exit(0);

Erläuterung:

Eine einfache Entweder-Oder-Abfrage wird mit einer Bedingung eingeleitet, im Beispiel $ENV{'HTTP_USER_AGENT'} =~ /95/. Dahinter wird ein Fragezeichen notiert. Hinter dem Fragezeichen wird ein Wert angegeben, der aktuell ist, wenn die Bedingung erfüllt ist. Dahinter folgt ein Doppelpunkt, und dahinter ein Wert für den Fall, daß die Bedingung nicht erfüllt ist. Da es sich um Werte handelt, die für die Weiterverarbeitung nur sinnvoll sind, wenn sie in einer Variablen gespeichert werden, wird einer solchen Entweder-Oder-Abfrage in der Regel eine  Variable vorangestellt, im Beispiel der Skalar $Ergebnis. Der Variablen wird durch diese Art von Anweisung das Ergebnis der Entweder-Oder-Abfrage zugewiesen.
Um Bedingungen zu formulieren, brauchen Sie  Vergleichsoperatoren.

weiter: Schleifen und Sprungbefehle
zurück: Vordefinierte Variablen in Perl
 

SELFHTML/Quickbar  CGI/Perl  Perl-Sprachelemente

© 1998  Stefan Münz, muenz@csi.com

1