and, or, not vs. &&, ||, !

04/11/2009 - 07:29 von Manuel Reimer | Report spam
Hallo,

das es verschiedene Möglichkeiten gibt, leuchtet ja noch ein. So kann
man sich aussuchen, welche Syntax einem besser gefàllt und Perl ist ja
dafür bekannt, dass es immer mehr als eine Möglichkeit gibt, um etwas zu
machen.

Komisch finde ich aber, dass die "Dinger" sich unterschiedlich
verhalten.

Beispiel:

if (!-d $path && !mkdir($path)) {
die("mkdir failed for $path");
}

verhàlt sich so, wie ich es erwarten würde. Perl prüft erst nach, ob das
Verzeichnis existiert und wenn nicht, dann wird versucht es zu
erstellen. Beides fehlgeschlagen? Dann Fehler und Ende.

Schreibe ich das gleiche so:

if (not -d $path && not mkdir($path)) {
die("mkdir failed for $path");
}

dann bekomme ich nur noch den Fehler und es wird garkein Verzeichnis
mehr erstellt.

Frage also: Warum so eine Verwirrung? Wo ist der Unterschied zwischen
der "englischen Syntax" und der Syntax mit den Sonderzeichen?

Gleiche Kritik könnte man anbringen bei "==, !=, <, >, ..." vs. "eq, ne,
lt, gt, ...". Hier habe ich zwar verstanden, dass erstere für Zahlen und
letztere für Strings verwendet werden, aber der Sinn der Unterscheidung
erschließt sich mir auch hier nicht, zumal ich von diesen
"String-Funktionen" bisher nur "eq" und "ne" verwendet habe. Wirklich
einen Sinn im Vergleich der "größe" eines Strings habe ich noch nie
gesehen. Wann nutzt man sowas? Beim Basteln von Sortieralgorithmen?

CU

Manuel

Alle wollen zurück zur Natur - aber keiner zu Fuß
Der Mensch erfand Maschinen, um sich damit die Arbeit zu erleichtern.
Nur leider hat er vergessen, rechtzeitig damit aufzuhören...
Beitràge mit *X-No-Html Header* kann ich weder lesen, noch beantworten!
 

Lesen sie die antworten

#1 mlelstv
04/11/2009 - 07:50 | Warnen spam
Manuel Reimer writes:

Frage also: Warum so eine Verwirrung? Wo ist der Unterschied zwischen
der "englischen Syntax" und der Syntax mit den Sonderzeichen?



In der Prioritàt der Operatoren. In der Regel sollte man &&,||,! innerhalb
eines Ausdrucks verwenden und and,or,not für Statements, das spart Klammern
und sieht auch schicker aus. Machen aber die wenigsten und fallen dann
immer über die dann doch seltsamen Prioriàten.

Gleiche Kritik könnte man anbringen bei "==, !=, <, >, ..." vs. "eq, ne,
lt, gt, ...". Hier habe ich zwar verstanden, dass erstere für Zahlen und
letztere für Strings verwendet werden, aber der Sinn der Unterscheidung
erschließt sich mir auch hier nicht, zumal ich von diesen
"String-Funktionen" bisher nur "eq" und "ne" verwendet habe.



Zahlen kann man auch als Strings vergleichen und Strings als Zahlen.
Das Ergebnis ist durchaus unterschiedlich und du musst halt irgendwie
vorgeben, wie es gemeint ist. Das ist die Folge davon, dass Variablen
in perl nicht wirklich einen Typ haben.

Wirklich
einen Sinn im Vergleich der "größe" eines Strings habe ich noch nie
gesehen. Wann nutzt man sowas? Beim Basteln von Sortieralgorithmen?



Es wird auch nicht die "größe" verglichen, weder Lànge noch Breite
noch Tiefe noch literarischer Gehalt sondern, tada, die Sortierreihenfolge
gemàß ihrer Kodierung. Und basteln muss man da nichts, ist alles
schon eingebaut.

Michael van Elst
Internet:
"A potential Snark may lurk in every tree."

Ähnliche fragen