我想知道如何在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
答案 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