如何打印没有值的哈希键?

时间:2013-09-05 10:57:06

标签: perl

我想在散列中打印没有值的键。如何在perl中实现这一点?

e.g。

my %hash = ( Lemon  => "",
             Orange => "orange",
             Lime   => "" );

我想打印钥匙Lemon&只有石灰。

4 个答案:

答案 0 :(得分:7)

grep无论你喜欢什么条件。你的所有键都有值,所以我假设你的意思是“哪些值是空字符串”。

print "$_\n" foreach grep { $hash{$_} eq ""  } keys %hash;

答案 1 :(得分:2)

循环键,使用空白/ undef值打印每个键:

$hash{$_} || say for keys %hash;

如果您不想undef

$hash{$_} eq '' && say for keys %hash;

答案 2 :(得分:1)

你可以看到,perl中的空字符串是假等价的(perl hasnt bool types)。 所以:

my $var = '';
if ($var) {
    print 'true'
}
else {
    print 'false'
}

结果将为false。 您可以使用以下代码解决问题:

my %hash = (
    Lemon  => "",
    Orange => "orange",
    Lime   => ""
);
foreach (keys %hash) {
    print 'empty key: ', $_, "\n" if !$hash{$_};
}

它也将处理undef。

答案 3 :(得分:0)

或者只是一个小循环:

#!/usr/bin/perl
use warnings;
use strict;

my %hash = ( Lemon  => "",
             Orange => "orange",
             Lime   => "" );


for my $key (sort keys %hash) { 
    if ($hash{$key} eq "")  {print "$key\t$hash{$key}\n"}
}

输出:

Lemon   
Lime