Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Question about ternary condition

by robartes (Priest)
on Jun 28, 2005 at 09:45 UTC ( [id://470546]=note: print w/replies, xml ) Need Help??


in reply to Question about ternary condition

You're being bitten by precedence. Ternary ?: has a higher precedence than =, so what perl parses is:

Y:\tmp>perl -MO=Deparse,-p 470538.pl (my(%hash) = ('A', 'on', 'B', 'on', 'C', 'off', 'D', 'off', 'E', 'off' +)); foreach $_ (keys(%hash)) { my($result); (((exists($hash{$_}) && ($hash{$_} eq 'on')) ? ($result = 'OK') : +$result) = 'KO'); print($result, "\n"); } 470538.pl syntax OK

You're effectively doing ($result='OK')='KO' in the case of a match, hence your output. The solution is of course to use parentheses:

(exists $hash{$_} and $hash{$_} eq 'on') ? ($result = 'OK') : ($result = 'KO');

Nice gotcha you found there :)

CU
Robartes-

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://470546]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2024-04-19 05:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found