我想在散列中打印没有值的键。如何在perl中实现这一点?
e.g。
my %hash = ( Lemon => "",
Orange => "orange",
Lime => "" );
我想打印钥匙Lemon&只有石灰。
答案 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