perlquestion
Sprad
Observing a hash changes its contents...
<p>
I'm using a hash of hashes, and doing an existence check. If the check fails, I print a usage giving the valid keys. Strangely, the invalid key is being created by the existence check. I added a line to delete it, which fixes it, but why is this happening at all?
<p>
Here's a sample repro:
<p>
<code>
#!/usr/bin/perl -w
use strict;
my %hash = ('a' => {
'value' => 1,
'foo' => 'bar',
},
'b' => {
'value' => 2,
'foo' => 'bar',
},
'c' => {
'value' => 3,
'foo' => 'bar',
},
);
if (! $hash{'d'}->{'value'}) {
print "That key doesn't exist. Valid keys are: ";
print join (", ", keys %hash);
}
</code>
'd' appears in the output list. No change if I use defined() for the exist check.
<!-- Node text goes above. Div tags should contain sig only -->
<div class="pmsig"><div class="pmsig-64446">
<p>
<font size = -1>---<br>
A fair fight is a sign of poor planning.</font>
</div></div>