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-
|
---|
In Section
Seekers of Perl Wisdom