LanX!: Seltsames Verhalten bei Rückgabe einer Liste

Beitrag lesen

Hi

Aber ich frag mich nur, warum, ich hab mir mit diesem Quatsch die ganze Mittagspause vermasselt, warum nur, warum ich!!11?

|| evaluiert den linken Operanden scalar, (und wenn dieser falsch ist den rechten) und gibt die "wahre"  Seite zurück. Außerdem hat || eine höhere präzedenz als =.

Links steht hier aber eine Liste die du mit checkit() zurückgegeben hast, also bekommst du den Scalar einer LISTE, d.h. den LETZTEN WERT!!!

(Beats Erstaunen liegt darin begründet das der Scalar eines ARRAYS die Anzahl der ARRAYELEMENTE ist, aber in Perl [leider] streng zw Array und Liste unterschieden werden muss).

Struppis Lösung mit "or" funktioniert fast genauso, allerdings mit anderer, viel geringeren Operatorpräzedenz, es entspricht

( ($x,$y,$z) = checkit() ) || die $!;

beachte das checkit für den Fehlerfall ein nacktes return; zurückgeben muss, return 0
würde nur $x=0 setzen.

siehe auch
C-style-Logical-Defined-Or