1

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

例如

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

我只想打印键 Lemon & Lime。

4

4 回答 4

7

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

print "$_\n" foreach grep { $hash{$_} eq ""  } keys %hash;
于 2013-09-05T11:02:38.460 回答
2

遍历键,用空白/undef值打印每个键:

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

如果你不想要undef

$hash{$_} eq '' && say for keys %hash;
于 2013-09-05T11:02:45.970 回答
1

你可以看到,perl 中的空字符串是假等价的(perl 没有 bool 类型)。所以:

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

结果将是错误的。您可以使用以下代码解决您的问题:

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

它也会处理 undef 。

于 2013-09-05T11:48:12.417 回答
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    
于 2013-09-05T11:40:25.127 回答