如何在Perl中取消定义散列键的值?

时间:2009-12-22 00:44:40

标签: perl hash

我想知道如何在Perl中取消定义散列键的值。请问有人可以更正我的代码吗?

#!/usr/bin/perl

use strict; 
use warnings;
my %hash;


undef($hash{"a"});
undef($hash{"b"});
print scalar values %hash; # i need here 0
print scalar keys %hash; # and here 2

3 个答案:

答案 0 :(得分:8)

undef($hash{"a"});

相当于

$hash{"a"}=undef;

所以你添加值为'a'的键'a'。要从哈希中删除值,请使用“删除”。

delete $hash{"a"};

对于相同的哈希,不可能有不同大小的'keys'和'values'。您可以使用grep过滤不需要的元素。

答案 1 :(得分:4)

关于定义与存在的另一个答案是非常好的,但如果你实际想知道定义值的数量,你可以随时做

print scalar grep { defined $_ } values %hash

答案 2 :(得分:2)

undef $hash{$key};

这将在此键的值下:

print "E" if exists $hash{$key};    # will print E
print "D" if defined $hash{$key};   # will not print D