我使用这个scrub
函数来清理其他函数的输出。
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
my %h = (
a => 1,
b => 1
);
print scrub($h{c});
sub scrub {
my $a = shift;
return ($a eq '' or $a eq '~' or not defined $a) ? -1 : $a;
}
当我还想处理哈希中的密钥不存在的情况时会出现问题,该示例在scrub($h{c})
的示例中显示。
应该对scrub
进行哪些更改以便处理此案例?
答案 0 :(得分:6)
在检查是否已定义之前,您正在检查是否$a eq ''
,因此警告“在字符串eq中使用未初始化的值”。只需更改条件中的事物顺序:
return (!defined($a) or $a eq '' or $a eq '~') ? -1 : $a;
只要'或'匹配链中的任何内容,Perl就会停止处理条件,从而避免将undef与字符串进行比较的错误尝试。
答案 1 :(得分:-1)
在scrub
中,如果散列有密钥key
的条目,则检查为时已晚。如果哈希键不存在,scrub()
只会看到标量undef
。但哈希可以有一个值为undef
的条目,如下所示:
my %h = (
a => 1,
b => 1,
c => undef
);
所以我建议使用exists
函数检查哈希条目。