http://www.perlmonks.org?node_id=470538
Tomtom has asked for the wisdom of the Perl Monks concerning the following question:

Hello monks,
I have a question about perl syntax :
I know that this piece of code is the correct way to do what I need :
use strict; my %hash = ( 'A' => 'on', 'B' => 'on', 'C' => 'off', 'D' => 'off', 'E' => 'off', ); for (keys %hash) { my $result = (exists $hash{$_} and $hash{$_} eq 'on') ? 'OK' : 'KO'; print $result, "\n"; }
but how comes the next piece of code ( which, in my opinion, would do the same thing ) doesn't work ? Could it be due to the exists function ( as suggested by a co-worker ) ? Here's the second piece of code :
use strict; my %hash = ( 'A' => 'on', 'B' => 'on', 'C' => 'off', 'D' => 'off', 'E' => 'off', ); for (keys %hash) { my $result; (exists $hash{$_} and $hash{$_} eq 'on') ? $result = 'OK' : $result = 'KO'; print $result, "\n"; }
In the second sample, $result is assigned 'KO' everytime, and I just don't understand why.
Does anyone have a good explanation ?

Thanks for your answers