| HTML-Dateien selbst erstellen
|  | Dokumentation: CGI/Perl
|  |  | CGI und 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.

#### Komplettbeispiel eines CGI-Scripts in Perl:

    #!/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-Haeder 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-Haeder 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-Abrage 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-Abrage in der Regel eine Variable vorangestellt, im Beispiel der Skalar $Ergebnis. Der Variablen wird durch diese Art von Anweisung das Ergebnis der Entweder-Oder-Abrage zugewiesen.
Um Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren.

| Blättern: |
Vordefinierte Variablen in Perl |  |  | Schleifen und Sprungbefehle

| HTML-Dateien selbst erstellen
|  | Dokumentation: CGI/Perl
|  |  | CGI und Perl: Perl Sprachelemente