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

Bas*_*erl -3 perl hash

我已经看到delete删除哈希元素.但是如果某些元素的日期undef有价值呢?

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

我怎么能用一行或最简单的方式做到这一点.

Bor*_*din 7

我建议你删除一个哈希切片,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;
Run Code Online (Sandbox Code Playgroud)

产量

{ a => 1, c => 1 }
Run Code Online (Sandbox Code Playgroud)