Perl:如何测试是否已将任何值(甚至为零)分配给散列键

时间:2011-08-18 15:30:58

标签: perl hash

是否有正确的测试方法,如果已经为特定的哈希键分配了任何值,即使该值为零?我一直在处理这样的声明:

%hash=();
$hash{a}=1;
$hash{b}=0;
if($hash{$key}) { do something }

但是,对于已经被触摸的键和已被赋值为0的键(例如,$ hash {b}和$ hash {c}都计算为'false'),这给出了相同的结果。有没有办法说出这两者之间的区别?

3 个答案:

答案 0 :(得分:9)

使用defined运算符检查某些内容的值是否为undef

if ( defined $hash{ $key } ) {
  //do stuff
}

使用exists运算符检查$key是否已写入%hash

if ( exists $hash{ $key } ) {
  //do stuff
}

区别在于defined检查某个值是否为undefexists以外的任何值,以验证$key是否为哈希的关键字尽管它有价值。

答案 1 :(得分:5)

请参阅perldoc -f definedperldoc -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'); };