我想打印没有值的哈希键。如何在 perl 中实现这一点?
例如
my %hash = ( Lemon => "",
Orange => "orange",
Lime => "" );
我只想打印键 Lemon & Lime。
我想打印没有值的哈希键。如何在 perl 中实现这一点?
例如
my %hash = ( Lemon => "",
Orange => "orange",
Lime => "" );
我只想打印键 Lemon & Lime。
grep
无论你喜欢什么条件。你所有的键都有值,所以我假设你的意思是“它的值是空字符串”。
print "$_\n" foreach grep { $hash{$_} eq "" } keys %hash;
遍历键,用空白/undef
值打印每个键:
$hash{$_} || say for keys %hash;
如果你不想要undef
:
$hash{$_} eq '' && say for keys %hash;
你可以看到,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 。
或者只是一个小循环:
#!/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