The real issue you have is that when the hash is empty, @keyarr gets no values from keys %hash. Thus, $keyarr[0] is undefined, causing the warning.
However, when the hash is not empty, @keyarr has values, so $keyarr[0] is defined and doesn't trigger the warning.
Add a print statement to show what's in @keyarr and then it may be clearer to you what is happening.
my (%hash); #my (%hash) = ( foo => 'bar' ); # Try this variation my (@keyarr)=(keys (%hash)); print "keys: '@keyarr'\n"; # Add this line if (defined ($hash{$keyarr[0]})) {print "hash is defined\n";} else {print "hash is undefined\n";}
-xdg
Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.
In reply to Re: Defined vs. undefined
by xdg
in thread Defined vs. undefined
by tamaguchi
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |