Bedingte Anweisung
myMojito
- perl
Hallo SelfForum,
ich brauch einen kleinen Anschubser von Euch ;)
Ich habe eine bedingte Anweisung, die mir so gar nicht gefällt:
if ( ($format eq 'jpg') || ($format eq 'png') || ($format eq 'gif') ) {}
Eigentlich wollte ich die Anweisung zuerst so schreiben:
if ( $format eq ('jpg'||'png'||'gif') ) {}
hat aber nicht funktioniert! Kann mir jemans sagen wo mein Denkfehler ist?
greets
myMojito
Hallo SelfForum,
nachdem ich das Posting abgeschickt habe, ist bei mir der Groschen gefallen:
if ( $format eq ('jpg' or 'png' or 'gif') ) {}
Gehe ich jetzt richtig in der Annahme, das || und && nur binäre logische Operatoren sind (also nur true oder false kennen) und or und and (hört sich blöd an) auch als komplexe Operatoren einsetzbar sind?
Mir ist nur noch nicht klar, worin der Unterschied zwischen || und or ist!
Vielleicht kann ja trotzdem jemand was für meine Allgemeinbildung tun ;)
greets
myMojito
Hi,
if ( $format eq ('jpg' or 'png' or 'gif') ) {}
das ist hier im Prinzip das gleiche wie zuvor. Die feinen Unterschiede zwischen "||" und "or" entnimmt bitte
perldoc perlop
Cheatah
Hallo SelfForum,
Wieder nuss ich mich selbst verbessern!
if ( $format eq ('jpg' or 'png' or 'gif') ) {}
Funktioniert nur wenn mein Dateiformat jpg ist :(
greets
myMojito
Hi,
if ( $format eq ('jpg'||'png'||'gif') ) {}
hat aber nicht funktioniert! Kann mir jemans sagen wo mein Denkfehler ist?
daran, dass eine derartige Vereinfachung so ziemlich nirgendwo im Universum existiert - es ist einfach völlig aus der Luft gegriffen, was Du da vorhast.
Wenn Du wissen willst, was Perl da macht: Es wertet zuerst "('jpg'||'png'||'gif')" aus. "Wenn 'jpg' ein wahrer Wert ist, dann nimm es; andernfalls: Wenn 'png' ein wahrer Wert ist, dann nimm es; andernfalls: Nimm 'gif'." - Da 'jpg' im boole'schen Sinne wahr ist, liefert dieser Klammerausdruck 'jpg' zurück.
Cheatah
Hi myMojito,
Eigentlich wollte ich die Anweisung zuerst so schreiben:
if ( $format eq ('jpg'||'png'||'gif') ) {}
Du möchtest prüfen, ob Dein Wert ein Element einer Menge ist?
Was hältst Du davon, wenn Du
a) die entsprechende Menge als Datentyp modellierst (in Perl wäre das z. B. ein Hash) und
b) die entsprechende 'ist_element_von'-Zugriffmethode dafür verwendest (für den Hash wäre das 'defined')?
Ich halte die Verwendung von 'oder' (egal, in welcher Syntax) an dieser Stelle für falsch[tm].
Du denkst IMHO eine Ebene zu nah an der Maschine für das vorliegende Problem.
Viele Grüße
Michael
Hallo Michael,
wieder muss ich ein Kompliment für deine Antwort geben (ich habe innerlichst auch gehofft, das Du gerade im SelfRaum bist ;)
Mit dem Maschinennah hast Du gar nicht so unrecht! Ich komme eigentlich aus der Automatisierungstechnik und habe 7 Jahre SPS programmiert (was ich auch heute noch tue).
Dort funktioniert der komplette Ablauf fast ausschlieslich über binäre Operationen. Ich glaube von dieser Denkweise muss ich mich entfernen, auch wenn es schwer fällt.
Wünsch' Dir noch ein schönes Wochenende... jetzt müsste ich wieder alleine zurechtkommen.
greets
myMojito
Hi myMojito,
(ich habe innerlichst auch gehofft, das Du gerade im SelfRaum bist ;)
Du gehörst zu denjenigen Lesern, die empfänglich für meine Art von Antworten ist ... es gibt auch andere ...
Viele Grüße
Michael
Hallo SelfForum,
dank Eurer Hilfe bin ich zur folgenden Lösung gekommen:
my %grafik_formate = ( jpg => 1, gif => 1, png => 1 );
if ( defined $formate{$format} ) {}
Ist zwar nicht kürzer als meine erste Lösung, aber erweiterbar, wiederverwendbar und verständlich!
greets
myMojito
Guten Abend,
if ( ($format eq 'jpg') || ($format eq 'png') || ($format eq 'gif') ) {}
Wie wäre es mit einem einfachen RegEx, also so:
if($format =~ /jpg|png|gif/) {
format_okay();
}
mfg Torsten
Hallo Siechfred,
Wie wäre es mit einem einfachen RegEx, also so:
if($format =~ /jpg|png|gif/) {
format_okay();
}
Ähem.
my $format = 'hallopnghallo';
if ($format =~ /jpg|png|gif/) {
print 'ja';
} else {
print 'nein';
}
print "\n";
=> ja
Ich persönlich bevorzuge
my $formate = join '|', ('png', 'gif', 'jpg');
if ($format =~ /^($formate)$/) {
print 'ja';
} else {
print 'nein';
}
Viele Grüße,
Christian
Guten Abend Christian,
Wie wäre es mit einem einfachen RegEx, also so:
^^^^^^^^^
Zu mehr reicht mein momentaner Wissensstand nicht aus :(
Ich persönlich bevorzuge
[...]
Jetzt, wo du es sagst. Wäre ich allerdings von selber nicht drauf gekommen.
mfg Torsten
Hallo Torsten,
Wie wäre es mit einem einfachen RegEx, also so:
^^^^^^^^^Zu mehr reicht mein momentaner Wissensstand nicht aus :(
Nunja, eigentlich habe ich nur ^ und $ hinzugefügt. Und das ganze halt etwas wartbarer gemacht, was bei drei Formaten allerdings nicht unbedingt notwendig ist.
Wäre ich allerdings von selber nicht drauf gekommen.
Ach weißt Du, ich selbst komme auch auf viele Dinge nicht selbst... (da fällt mir gerade ein, dass ich noch ein Problem habe, an dem ich noch knobeln muss)
Viele Grüße,
Christian