Perl: Stilfrage
-
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.