Kapitel 6 - Kontrollstrukturen und Vergleichsoperatoren
if else Kontrollstrukturen
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 ...
- die bedingte Ausführung (wird nur Ausgeführt wenn einen bestimmte Bedingung erfüllt wurde)
- die wiederholte Ausführung (wird solange wiederholt bis einen bestimmte Bedingung erfüllt ist)
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 die
Syntax von if ...
if(BEDINGUNG) {
WENN BEDINGUNG ZUTRIFFT, SIND WIR HIER IM
ANWEISUNGSBLOCK;
}
WENN NICHT, GEHT ES HIER WEITER;
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.
Vergleichsoperatoren
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
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.
Zurück zu Kapitel 5 |
Zur Übersicht |
Weiter zu Kapitel 7
--
EnricoEhrhardt - 18 Aug 2008