| use Perl::pronix.pl |
|
|
6.1. if else Kontrollstrukturen
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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";
}
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.