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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.