如果哈希元素的值为" undef"则删除哈希元素。

时间:2016-05-25 12:29:01

标签: perl hash

我见过删除哈希元素的delete。但是,如果某些元素的日期值为undef,该怎么办?

我想删除值为undef的所有哈希元素。

我如何用一行或最简单的方式做到这一点。

2 个答案:

答案 0 :(得分:5)

我建议您删除哈希切片,使用grep确定哪些键对应于未定义的值

use strict;
use warnings 'all';

my %h = (
    a => 1,
    b => undef,
    c => 1,
    d => undef,
);

delete @h{ grep { not defined $h{$_} } keys %h };

use Data::Dump;
dd \%h;

输出

{ a => 1, c => 1 }

答案 1 :(得分:2)

foreach (keys %hash) {
    delete $hash{$_} unless defined $hash{$_};
}