Christian Kruse: "||" und "or" nicht dasselbe!?!

Beitrag lesen

Hallo Volker,

das Verhalten erklaert sich aus dem Benutzen fehlerhafter
Beispiele :)

ich dachte bisher immer (so wie es auch in Selfhtml steht)
das "||" und "or" dasselbe ist. Dem ist nicht der Fall.

Nein. Der Unterschied liegt in der Prioritaet der
Operatoren. Prioritaets-Tabelle:

SYNOPSIS
       Perl operators have the following associativity and precedence, listed
       from highest precedence to lowest.  Operators borrowed from C keep the
       same precedence relationship with each other, even where C's precedence
       is slightly screwy.  (This makes learning Perl easier for C folks.)
       With very few exceptions, these all operate on scalar values only, not
       array values.

left        terms and list operators (leftward)
           left        ->
           nonassoc    ++ --
           right       **
           right       ! ~ \ and unary + and -
           left        =~ !~
           left        * / % x
           left        + - .
           left        << >>
           nonassoc    named unary operators
           nonassoc    < > <= >= lt gt le ge
           nonassoc    == != <=> eq ne cmp
           left        &
           left        | ^
           left        &&
           left        ||
           nonassoc    ..  ...
           right       ?:
           right       = += -= *= etc.
           left        , =>
           nonassoc    list operators (rightward)
           right       not
           left        and
           left        or xor

print 0 || 1 ? "hallo" : "huhu";
ergebnis: hallo
print $a = 0 || 1 ? "hallo" : "huhu";

Du meinst hier wohl '$a == 0'? Mit '$a = 0' weisst du $a
einen Wert zu, und diese Zuweisung wird fast immer 'true'
ergeben. Der -w Flag haette dir das aber auch gezeigt.

print $a = 0 or 1 ? "hallo" : "huhu";
ergebnis: 0

Dito hier.

interessant sind auch folgendes unterschiedliche
ergebnisse (sollte eigentlich dasselbe sein):
print (0 or 1) ? "hallo"  : "huhu";

Hier wird das in Klammern stehende (0 or 1) als Argument fuer
print gewertet. Das danach folgende ist ein Return value in
void context, der -w Flag haette dir das aber auch gezeigt.

hat jemand genauere informationen?

perldoc perlop. Die perldoc ist auch auf

http://www.perldoc.com/

verfuegbar.

Gruesse,
 CK

--
http://cforum.teamone.de/
http://wishlist.tetekum.de/
If God had meant for us to be in the Army, we would have been born with green, baggy skin.