SELFHTML/Quickbar CGI/Perl Perl-Sprachelemente

| ## Bedingte Anweisungen
| 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