Sehr Umfangreiche Webseite zum Programmieren in C Perl CGI, Skripting, Konvertieren, int ceil sprintf hex oct floor Runden AbschneidenPerl Kurs Skripting Kontrollstrukturen if else elsif SWITCH Vergleichsoperatoren eq Kontrollstrukturen if else elsif SWITCH Vergleichsoperatoren Perl Kurs Kapitel 6

6.1. if else Kontrollstrukturen           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

In jeder Programmiersprache gibt es sogenannte Kontrollstrukturen, mit denen Sie die Ausführung Ihres Programms steuern können. Dabei gibt es zwei Möglichkeiten von Ausführungen mit Kontrollstrukturen ...

Folgende Schlüsselwörter gibt es dabei in Perl ...

if, else, while, do, for, foreach, SWITCH

Für Leute die bereits Erfahrung in einer Programmiersprache haben, können ja die Kapitel if, else, while, do und for etwas schneller überfliegen, da diese in Perl genauso verwendet werden wie Beispielweise in C/C++. Neu dürfte für Sie das Schlüsselwort foreach sein.

Hier der Syntax von if ...

if(BEDINGUNG)
 {
 IST BEDINGUNG WAHR SIND WIR HIER IM
 ANWEISUNGSBLOCK;
 }

Die if-Bedingung überprüft, ob die Bedingung die in den Klammern steht, wahr ist. Falls diese wahr ist, wird der Code im Anweisungsblock, der zwischen geschweiften Klammern steht, ausgeführt. Ist die Bedingung nicht wahr. Wird der Code hinter dem Anweisungsblock ausgeführt.

#!/usr/bin/perl -w

$secret=123456;
$eingabe=0;

print "Bitte geben Sie Ihre Geheimzahl ein : ";
chomp($eingabe=<STDIN>);

if($secret == $eingabe)
 {
    print $eingabe . " war das richtige Passwort\n";
 }

Bei diesem Programm werden Sie aufgefordert, eine Zahl einzugeben. Die if-Bedingung überprüft anschließend diese Eingabe mittels ...

if($passwort == $eingabe)

Stimmt die Geheimzahl $secret mit der Variable $eingabe überein, wird die Anweisung im Anweisungsblock ausgeführt. Ansonsten wird das Programm ohne Ausgabe beendet.

Wenn Sie nun bei falscher Eingabe ausgeben wollen, dass die falsche Zahl eingegeben wurde, benötigen Sie eine else-Anweisung, was soviel bedeutet wie die Alternative ...

if(BEDINGUNG)
 {
  ANWEISUNGSBLOCK FÜR BEDINGUNG==WAHR;
 }
else
 {
  ANWEISUNGSBLOCK FÜR BEDINGUNG==FALSCH;
 }

Schreiben Sie nun die else-Anweisung in das Programm zuvor ...

#!/usr/bin/perl -w

$passwort=123456;
$eingabe=0;

print "Bitte geben Sie Ihre Geheimzahl ein : ";
chomp($eingabe=<STDIN>);

if($passwort == $eingabe)
 {
   print $eingabe . " war das richtige Passwort\n";
 }
else
 {
   print qq§Ihre Eingabe "($eingabe)" wahr falsch§ . "\n";
 }

Jetzt wird bei falscher Eingabe auch eine entsprechende Meldung ausgegeben.

6.2. Vergleichsoperatoren           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Nun benötigen Sie die Kenntnis der Vergleichsoperatoren, die Sie einsetzen können, um z.B. zwei Wert oder zwei Zeichenketten miteinander zu vergleichen.

Denn Zahlenoperator bei Gleichheit haben Sie ja soeben verwendet (==). Wenn Sie versuchen zwei Zeichenketten mit diesem Operator zu vergleichen, werden Sie an einer Fehlermeldung scheitern.

Um zwei Zeichenketten miteinander zu vergleichen benötigen Sie den Operator eq (equal). In C kennen Sie dies unter der Funktion strcmp. Schreiben Sie das Programm von eben um, damit eine Passwortabfrage mit einen Zeichenkette gemacht werden kann  ...

#!/usr/bin/perl -w

$passwort="pinguin";
$eingabe=0;

print "Bitte geben Sie Ihr Passwort ein : ";
chomp($eingabe=<STDIN>);

if($passwort eq $eingabe)
 {
   print $eingabe . " war das richtige Passwort\n";
 }
else
 {
   print qq§Ihre Eingabe "($eingabe)" wahr falsch§ . "\n";
 }

Mit diesem einfachen Operator sind Sie nun in der Lage zwei Zeichenketten auf Gleichheit zu prüfen. Hier nun ein Überblick der Operatoren die Sie verwenden können ...

Vergleich auf  Zahlenoperator Zeichenketten-Operator
Gleichheit  == eq (equal)
nicht Gleichheit  !=  ne (not equal)
größer als   gt (greater then)
kleiner als  <   lt (larger then)
kleiner oder gleich  <=  le (less or equal)
größer oder gleich >=  ge (greater or equal)
-1, 0, oder 1 <=>  


Der Operator <=> wird hauptsächlich zum Sortieren verwendet ...

#!/usr/bin/perl -w

@nummern = (12, 165, 2, 7);

print "Sortiert : ", join('-', sort { $a <=> $b } @nummern) , "\n";

Die Variablen $a und $b sind weitere Standardvariablen die dafür verwendet werden.

Nun ein weiteres Beispiel zu den Operatoren ...

#!/usr/bin/perl -w

$zahl1=0;

print "Bitte geben Sie eine Zahl ein : ";
chomp($zahl1=<STDIN>);

print "\n", "Ich vergleiche die beiden Zahlen","\n";

if($zahl1 > 10)
 {
   print "\n" . $zahl1 . " ist grösser als 10\n";
 }
if($zahl1 < 10)
 {
   print "\n" . $zahl1 . "ist kleiner als 10\n";
 }
else
 {
   print "\nSie haben den Wert 10 eingeben\n";
 }

Wenn Sie in diesem Beispiel den Wert 20 eingeben, wird anschließend dennoch überprüft ob die Zahl auch kleiner wie 10 ist. Dies können Sie sich mit dem Schlüsselwert elsif ersparen ...

if(BEDINGUNG1)
  {Anweisung};
elsif(BEDINGUNG2)
  {Anweisung};
elsif(BEDINGUNG3)
  {Anweisung}
   ............
   ...........
else
   {Anweisung}

Sie können so viele elsif mit der if-Bedingung verschachteln wie Sie wollen. Dies können Sie nun wieder in dem Beispiel zuvor Miteinbauen ...

#!/usr/bin/perl -w

$zahl1=0;
$zahl2=0;

print "Bitte geben Sie eine Zahl ein : ";
chomp($zahl1=<STDIN>);

print "Bitte geben Sie noch eine Zahl ein : ";
chomp($zahl2=<STDIN>);

print "\n", "Ich vergleiche die beiden Zahlen","\n";

if($zahl1 > $zahl2)
 {
   print "\n" . $zahl1 . " ist grösser als " . $zahl2 . "\n";
 }
elsif($zahl1 < $zahl2)
 {
   print "\n" . $zahl1 . " ist kleiner als " . $zahl2 . "\n";
 }
else
 {
   print "\nDie beiden Zahlen haben den selben Wert\n";
 }

SWITCH-Kontrollstruktur           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

Nun haben Sie eine Möglichkeit kennen gelernt wie Sie mit if, elsif und else Ihr Programm Steuern bzw. Verzweigen können. Was machen Sie jetzt, wenn unser Programm auf mehrere Werte oder Zeichenketten überprüft werden soll? Beispielsweise ...

#!/usr/bin/perl -w

$zahl1=0;

print "Bitte geben Sie eine Zahl zwischen 1-5 ein : ";
chomp($zahl1=<STDIN>);


if($zahl1==1)
 {
   print "Toll Sie haben ", $zahl1, " eingegeben" ,"\n";
 }
elsif($zahl1==2)
 {
   print "Wow das war die ", $zahl1, "\n";
 }
elsif($zahl1==3)
 {
   print "Jessas die ", $zahl1, "\n";
 }
elsif($zahl1==4)
 {
   print "Endlich die ", $zahl1, "\n";
 }
elsif($zahl1==5)
 {
   print "Das war die ", $zahl1, "\n";
 }
else
 {
   print "Ich sagt doch geben Sie ein Zahl zwischen 1-5 ein\n";
 }

Dies sieht nicht besonders komfortabel aus. In Perl gibt es auch eine Konstruktion die der switch...case Verzweigungen von C sehr ähnlich ist ...

#!/usr/bin/perl -w

$zahl1=0;

print "Bitte geben Sie eine Zahl zwischen 1-5 ein : ";
chomp($zahl1=<STDIN>);

SCHALTER: {
            $zahl1==1 && do { print "Toll Sie haben ". $zahl1. " eingegeben" ."\n";
                              last SCHALTER; } ;
            $zahl1==2 && do { print "Wow das war die ". $zahl1. "\n";
                              last SCHALTER; } ;
            $zahl1==3 && do { print "Jessas die ", $zahl1, "\n";
                              last SCHALTER; };
            $zahl1==4 && do { print "Endlich die ", $zahl1, "\n";
                              last SCHALTER; };
            $zahl1==5 && do { print "Das war die ", $zahl1, "\n";
                              last SCHALTER; } ;
                         do { print "Ich sagt doch geben Sie ein Zahl zwischen 1-5 ein\n";
                              last SCHALTER; } ;
                      }

Dieser Code erfüllt den selben Zweck, wie unser Konstrukt mit den if-elsif-else-Verzweigungen. Hierzu nun die Erklärung. Zuerst wird die Bedingung überprüft ...

$zahl1==1

Diese wird automatisch mit dem UND-Operator (&&) und dem Schlüsselwort do Verknüpft. Wäre zum Beispiel die Bedingung wahr, wird die do-Anweisung in den geschweiften Klammern ausgeführt. In unserem Fall wird ausgegeben, welche Zahl Sie eingegeben haben. Um zu vermeiden, dass nicht die nächste Bedingung auch überprüft wird, beenden wir unseren Anweisungsblock mit ...

last SCHALTER;

Was in C soviel bedeutet wie break. Die letzte Anweisung in der Sie keine Bedingung überprüfen, bedeutet soviel wie else (sonst). Oder im Beispiel der C-Programmierung switch-case ist diese gleichbedeutend zu default.