use Mosche;
Also das _if ($rc)_ ist mein Problem. Was passiert da?
In Perl ist jeder skalare Wert "true", der nicht 0 oder die leere
Zeichenkette ist.
(Hm, wie das mit undef ist, weiß ich gerade nicht auswendig.)
Also von 1 bis unendlich und a bis Z usw. (also strings z.B., jkhkhkh) ist alles true.
Na gut, ich komm auf Dich zurück! ;-)
Schau noch mal in mein "Erklärposting", da habe ich es erklärt:
Im logischen Kontext wird $rc folgend ausgewertet:
- Wenn $rc zu 1 ausgewertet wird (zB durch 1, 2, 'blah',
aber Vorsicht: auch '000', da es ein String ist)
ist die Bedingung wahr
- Wenn $rc zu 0 ausgewertet wird (zB durch undef, 0, '')
ist die Bedingung falsch.
$rc wird in dem if($rc) Kontext umgewandelt in entweder 1 oder 0 (wahr/falsch). falsch kommt immer dann, wenn $rc undef (der undefinierte Wert), 0 oder '' ist, ansonsten ist es wahr. Siehe dazu zB das Kapitel 4 in "Einführung in Perl" (O'Reilly).
Wenn Du also weißt, daß in $rc eine Zahl steht, dann ist
if ($rc)
gleichbedeutend mit
if ($rc != 0)
Wie kommt man darauf, dass
if ($rc)
gleichbedeutend mit
if ($rc != 0)
ist? Oder hat man das einfach festgelegt, oder ist das Mathematik? Hätt ich dann wohl verpasst in der Schule!
Das wird auf obige Definition von wahr/falsch zurückgeführt und ist, wie gesagt, nur richtig, wenn du weisst, dass in $rc nur Zahlen sind.
Die Änderung von $rc läßt sich übrigens aus der Abfrage herausziehen
und die Zuweisung der Farbe etwas abkürzen:
$color = ($rc ? '#CFCFCF' : '#EFEFEF');
$rc = 1 - $rc;
So kommt man dann völlig ohne explizites "if" aus.
Michael, für so etwas brauch ich noch etwas Bedenkzeit...so auf den ersten Blick...
Egentlich ganz einfach:
$color wird gesetzt auf:
wenn $rc == 1 ist, auf '#CF-....'
ansonsten auf '#EF....'
Wenn $rc in der nächsten Zeile den Wert 0 hat, wird es 1 (da 1-0==1)
wenn $rc in der nächsten Zeile den Wert 1 hat, wird es 0 (da 1-1==0)
use Tschoe qw(Matti);