[vienna.pm] Conditional Operator ?

Peter J. Holzer hjp at wsr.ac.at
Wed Mar 13 06:06:41 CST 2002


On 2002-03-13 12:02:21 +0100, Baier Oliver INT SD wrote:
> Um wegen einer kleinen Entscheidung nicht gleich ein ganzes
> if-then-else Konstrukt zu basteln, habe ich mich fuer die
> Verwendung des wesentlich kuerzeren Conditional parameters
> entschieden.
> 
> Nur leider scheine ich bei dieser Funktion irgendwie auf
> der Leitung zu stehen.
> 
> ------- kurzes Script -------
> #!/usr/local/bin/perl -w
> 
> $value = "100:10";
> 
> ($value) = split /:/, $value;
> print "$value => ";
> $value > 20 ? $value = "groesser" : $value = "kleiner";
> print "$value\n";
> -----------------------------
> 
> ----- Output des Scripts ----
> 100 => kleiner
> -----------------------------
> 
> Warum entscheidet es sich fuer "kleiner",
> wenn 100 doch eindeutig groesser als 20 ist?

perldoc perlop:

           right       ?:
           right       = += -= *= etc.

?: bindet also stärker als =, daher ist das, was Du geschrieben hast,
äquivalent zu:

    ($value > 20 ? $value = "groesser" : $value) = "kleiner";

Wenn also $value > als 20 ist, bekommt $value den Wert größer, sonst
passiert nichts, der Wert des Klammerausdrucks ist aber auf jeden Fall
der L-Value $value. Man kann den Ausdruck also zu

    $value = "kleiner";

vereinfachen. 



Du hättest schreiben müssen:

    $value > 20 ? $value = "groesser" : ($value = "kleiner");

Da `$value = ' in beiden Hälften das Ausdrucks vorkommt, kann man es
herausziehen (immer gut, wenn man algebraische Umformungen, die man
schon in der Volksschule gelernt hat, auch in Programmiersprachen
anwenden kann :-) und den Ausdruck zu 

    $value = $value > 20 ? "groesser" : "kleiner";

umformen. Das ist die Form, die man meistens verwendet.

	hp

-- 
   _  | Peter J. Holzer      | My definition of a stupid question is
|_|_) | Sysadmin WSR / LUGA  | "a question that if you're embarassed to
| |   | hjp at wsr.ac.at        | ask it, you stay stupid."
__/   | http://www.hjp.at/   |    -- Tim Helck on dbi-users, 2001-07-30
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 431 bytes
Desc: not available
Url : http://mail.pm.org/archives/vienna-pm/attachments/20020313/a919e854/attachment.bin


More information about the Vienna-pm mailing list