Here are a few code examples that work as expected:
1.
$hash{'a'};
print exists $hash{'a'}?'yes':'no';
#no
2.
$hash{'a'}=1;
print exists $hash{'a'}?'yes':'no';
#yes
3.
$hash{'a'}=$hash{'a'};
print exists $hash{'a'}?'yes':'no';
#yes
4.
sub foo{$_[0]}
foo($hash{'a'});
print exists $hash{'a'}?'yes':'no';
#no
5.
sub foo{$_[0]=1}
foo($hash{'a'});
print exists $hash{'a'}?'yes':'no';
#yes
6.
sub foo{$_[0]=$_[0]}
foo($hash{'a'});
print exists $hash{'a'}?'yes':'no';
#yes
7.
sub foo{
for($_[0]){
}
}
foo($hash{'a'});
print exists $hash{'a'}?'yes':'no';
#no
8.
sub foo{
for($_[0]){
$_=1;
}
}
foo($hash{'a'});
print exists $hash{'a'}?'yes':'no';
#yes
Now, this one is, well, it's not consistent with 7..
for($hash{'a'}){
}
print exists $hash{'a'}?'yes':'no';
#yes
This one doesn't make sense to me, does it make any to you?
sub foo{
for($_[0]){
$_=$_;
}
}
foo($hash{'a'});
print exists $hash{'a'}?'yes':'no';
#no