是否有正确的测试方法,如果已经为特定的哈希键分配了任何值,即使该值为零?我一直在处理这样的声明:
%hash=();
$hash{a}=1;
$hash{b}=0;
if($hash{$key}) { do something }
但是,对于已经被触摸的键和已被赋值为0的键(例如,$ hash {b}和$ hash {c}都计算为'false'),这给出了相同的结果。有没有办法说出这两者之间的区别?
答案 0 :(得分:9)
使用defined运算符检查某些内容的值是否为undef
if ( defined $hash{ $key } ) {
//do stuff
}
使用exists运算符检查$key
是否已写入%hash
if ( exists $hash{ $key } ) {
//do stuff
}
区别在于defined
检查某个值是否为undef
和exists
以外的任何值,以验证$key
是否为哈希的关键字尽管它有价值。
答案 1 :(得分:5)
请参阅perldoc -f defined
和perldoc -f exists
:
my %hash = (foo => 0, bar => undef);
print defined $hash{foo}; # true
print defined $hash{bar}; # false
print exists $hash{bar}; # true
print exists $hash{baz}; # false
delete $hash{bar};
print exists $hash{bar}; # false
答案 2 :(得分:-2)
您可以使用defined()
检查密钥中是否存在密钥:
if (defined($hash{$key})) { do('something'); };