Perl: Stilfrage
-
Welche Notationen sind in Perl üblicher:
&& oder and || oder or ! oder not
Ich weiß bei den ersten beiden Paaren gibt es einen kleinen Unterschied,
aber das hat ja nicht unbedingt etwas damit zu tun, was normalerweise
benutzt wird.
-
IHMO nutzt man, genauso wie in C/C++, &&, ||, !
mfg
v R
-
Mir scheinen die meisten Perlprogrammierer die Wörter zu bevorzugen.
-
hmmm...ok, bin zu sehr von mir ausgegangen
mfg
v R
-
Vorsicht: Die Rangfolge von and/or ist niedriger als die von || und &&. Siehe Perldocu.
As more readable alternatives to
&&' and
||' when used
for control flow, Perl provides `and' and `or' operators
(see below). The short-circuit behavior is identical.
The precedence of "and" and "or" is much lower, however,
so that you can safely use them after a list operator
without the need for parentheses:unlink "alpha", "beta", "gamma"
or gripe(), next LINE;With the C-style operators that would have been written
like this:unlink("alpha", "beta", "gamma")
|| (gripe(), next LINE);
-
Jupp, ich weiß. Und bei and / or wird die zweite Bedingung nicht ausgewertet,
wenn nach der ersten das Ergebnis schon fest steht, bei && / || wird sie
es trotzdem (wie in C++).
-
Original erstellt von Taurin:
Jupp, ich weiß. Und bei and / or wird die zweite Bedingung nicht ausgewertet,
wenn nach der ersten das Ergebnis schon fest steht, bei && / || wird sie
es trotzdem (wie in C++).in C++ gibt es lazy evaluation und es waere komisch wenn Perl bei && und || nicht die selbe semantik besitzen wuerde... (aber ich kann kein perl)
-
Taurin: ähm, natürlich ist das in C++ nicht so. Ein Ausdruck a&&b oder a||b wird von links nach rechs ausgewertet, und zwar exakt solange, bis das Ergebnis feststeht.
-
Ich bezog mich auch gar nicht auf C++, sondern auf die Besonderheit in Perl...
Um noch mal auf die Ausgangsfrage zurückzukommen:
Die meisten Perlprogrammierer schreiben and/or/not, aber es ist nicht so,
dass &&/||/! wirklich "verpönt" wäre. Richtig?[ Dieser Beitrag wurde am 09.07.2003 um 21:20 Uhr von Taurin editiert. ]
-
Warum schreibst du dann "(wie in C++)"?
-
... und ich dachte immer entweder Perl oder Stil
SCNR
-
Nochmal ganz unmissverständlich:
Die Operatoren and/or funktionieren in Perl anderes als die Operatoren &&/|| :
and/or werten den rechten Operanden nicht aus, wenn der durch den linke Operand
das Ergebnis des Vergleichs schon gegeben ist. && / || untersuchen auf jeden
Fall auch den linken Operanden, damit verhalten sie sich genau so wie in C++.
-
Könnten wir uns auf
hier links hier rechts
einigen? In C++ wird der rechte Ausdruck nicht immer ausgewertet (wobei es da Unterschiede zwischen den eingebauten und überladenen Operatoren gibt).
virtual: Danke für den Hinweis. Mein Perl muss grauenvoll sein ... Ich sollte diesen Stil professionalisieren, denke ich.
[ Dieser Beitrag wurde am 09.07.2003 um 21:30 Uhr von Daniel E. editiert. ]
-
In Perl verhalten sich die && und || Operatoren übrigens auch so, dass sie den zweiten Operanden nur bei Bedarf auswerten.
-
Schweinerei: Dann hat mir mein Buch mist erzählt.
Dann ist das ganze gerde dazu wohl redundant.
-
Original erstellt von Taurin:
**and/or werten den rechten Operanden nicht aus, wenn der durch den linke Operand das Ergebnis des Vergleichs schon gegeben ist. && / || untersuchen auf jeden Fall auch den linken Operanden, damit verhalten sie sich genau so wie in C++.
**in C++ wird von links nach rechts ausgewertet. insofern wird natuerlich immer die linkeste bedingung geprueft. allerdings wird die rechte nur dann geprueft wenn das resultat noch nicht feststeht.
wuerde mich wundern wenn es in perl anders herum waere...
dann koennte man ja ein
foo() || die()
nicht schreiben, da die() als erstes ausgewertet wirdnaja, vielleicht ist ja das der grund warum man immer nur foo() or die() liest.
das die() habe ich von PHP entlehnt, ich nehme an Perl hat was aehnliches.