|
|
||||||||||||||||||||||||||||||||
![]() |
Tutorial - Kapitel 5: if...else und unlessVoraussetzungen für dieses Kapitel
EinleitungWir sind jetzt mit dem Aufbau eines Perl-Scripts vertraut und können auch mit Variablen, Arrays und Hashes umgehen. Jetzt können wir uns - endlich - einmal mit den wichtigsten Befehlen vertraut machen und dann mit dem programmieren so wirklich beginnen. Anfangen möchte ich mit der IF-Abfrage... Die IF-AbfrageDie IF-Abfrage ist die einfachste Art einer Abfrage und macht eigentlich nichts anderes als sich eine Frage zu stellen: Ist die Bedingung erfüllt? Wenn ja: mach etwas. Schauen wir das einmal in einem Script (if.cgi) an... #!/usr/bin/perl print "Content-type: text/html\n\n"; $meineZahl=50; print "<html><body>"; if ($meineZahl > 30) { print "Die eingegebene Zahl ($meineZahl) ist grösser als 30!"; } print "</body></html>"; Was passiert? Zuerst definieren wir eine Variable $meineZahl mit dem Wert 50. Daraufhin machen wir eine IF-Abfrage und prüfen, ob $meineZahl grösser als 30 ist: ($meineZahl > 30). Ist dies der Fall, werden alle Anweisungen zwischen den geschweiften Klammern ({ }) ausgeführt. Wenn nicht werden diese Anweisungen ausgelassen. Versuchen Sie es einmal und nehmen Sie auch einmal eine Zahl unter 30. Weisen Sie der Variable einen Text zu, so wird der Text auch nicht erscheinen (Text = 0 = <30). Der Aufbau einer IF-Abfrage sieht also wie folgt aus: if (Bedingung) {
eine oder mehrere Anweisungen, die ausgeführt werden sollen, wenn Bedingung wahr ist
}
Es gibt verschiedene Abfrage-Möglichkeiten:
Wenn es also numerische Vergleiche gibt, gibt es sicher auch etwas für Texte, oder? Natürlich:
Es ist also wichtig, dass man sich immer überlegt, ob man zwei Werte nun numerisch oder alphanumerisch vergleichen möchte. Wie gesagt, ist dies in der Praxis eine häufige Fehlerquelle... Perl kann Übrigens noch viel mehr, als einfach zwei Texte oder Zahlen zu vergleichen: die Regular Expressions. Diese leistungsfähigen Abfragen sind DIE Stärke von Perl. Dies schauen wir jedoch erst in einem späteren Kapitel an, wenn wir Perl etwas besser beherrschen... IF-Abfragen mit nur einer einzigen Anweisung können auch verkürzt dargestellt werden, indem die IF-Abfrage an das Ende der Zeile (vor dem Strichpunkt) gesetzt wird: print "$zahl ist grösser als 30" if ($zahl > 30); if...else AbfrageWenn Sie die IF-Abfrage verstanden haben, ist die IF...ELSE-Abfrage eine Kleinigkeit für Sie. Der einzige Unterschied liegt darin, dass es noch möglich ist, SONST-Anweisungen auszuführen. Auch hier ein Beispiel (if_else.cgi), dann ist es schnell klar: #!/usr/bin/perl print "Content-type: text/html\n\n"; $meineZahl=50; print "<html><body>"; if ($meineZahl > 30) { print "Die eingegebene Zahl ($meineZahl) ist grösser als 30!"; } else { print "Die eingegebene Zahl ($meineZahl) ist kleiner oder gleich 30!"; } print "</body></html>"; Wir hängen also einfach am Ende der IF-Abfrage noch ein else { } an und können hier Anweisungen hinschreiben, die ausgeführt werden sollen, wenn die Bedingung nicht wahr ist: if (Bedingung) {
DANN-Anweisungen (Bedingung wahr)
} else {
SONST-Anweisungen (Bedingung nicht wahr)
}
Verstanden? Dann erweitern wir die IF-Abfrage doch nochmals...
if...elsif...else-AbfrageDies ist nochmals eine Erweiterung der IF-Abfrage: Ist Bedingung1 wahr? Ja: Anweisungen1. Nein: Ist Bedingung2 wahr? Ja: Anweisungen2. Auch nicht? Anweisungen3. Als Code (elsif.cgi): #!/usr/bin/perl print "Content-type: text/html\n\n"; $meineZahl=50; print "<html><body>"; if ($meineZahl > 30) { print "Die eingegebene Zahl ($meineZahl) ist grösser als 30!"; } elsif ($meineZahl == 30) { print "Die eingegebene Zahl ist gleich 30!"; } else { print "Die eingegebene Zahl ($meineZahl) ist kleiner als 30!"; } print "</body></html>"; Nochmals in reiner Textform: if (Bedingung) {
DANN-Anweisungen (Bedingung wahr)
} elsif (Bedingung2) {
DANN-Anweisungen für Bedingung2 (Bedingung2 wahr)
} else {
SONST-Anweisungen (Bedingung sowie Bedingung2 nicht wahr)
}
unlessunless ist ein etwas gewöhnungsbedürftiger Befehl, der den Code nicht gerade sehr übersichtlich macht, trotzdem ist er mir ans Herz gewachsen. Deshalb möchte ich ihn hier auch noch kurz erklären. unless ist nicht anderes als eine AUSSER-Abfrage, die hinter einen Befehl gestellt werden kann. Beispiel gefällig (unless.cgi)? #!/usr/bin/perl print "Content-type: text/html\n\n"; $meineZahl=50; print "<html><body>"; print "Die eingegebene Zahl ist kleiner als 30" unless ($meineZahl >= 30); print "</body></html>"; Der print-Befehl ausgeführt, AUSSER die Bedingung ($meineZahl >= 30) ist wahr. Wie schon erwähnt eine sehr kompakte Schreibweise um mal einen Befehl auszulassen, dient jedoch nicht gerade der Übersichtlichkeit... Wie Sie auch gesehen haben, wird die unless-Bedingung hinter eine Anweisung, vor dem Strichpunkt eingefügt. ZusammenfassungNach diesem Kapitel beherrschen wir die IF-, IF...ELSE- sowie die IF...ELSIF...ELSE-Abfrage. Wir wissen auch, wie wir Zahlen und Texte miteinander vergleichen können und kennen die Fehlerquelle mit den verwechselten numerischen- und alphanumerischen Abfragen (z.B. "==" statt "eq"). Ebenfalls haben wir den unless-Befehl ganz kurz angeschaut. Wie geht's weiter?Kapitel 6 beschäftigt sich mit den verschiedenen Schleifen unter Perl. Im vorherigen Kapitel (4) beschäftigten wir uns mit Arrays uns Hashes. Sie können aber auch zurück zum Inhaltsverzeichnis und dort ein beliebiges anderes Kapitel auswählen.
|
|||||||||||||||||||||||||||||||