我正在尝试从表中获取某些列,某些列可能具有null值。在填充我的主数据之前,我正在检查散列是否为null值。由于某些键具有null值,发出警告。
有没有办法检查哈希键是否没有值来阻止警告。
my $counter = 1;
while ( my $hashRef = $queryHandle1->fetchrow_hashref) {
foreach my $key (keys %{$hashRef} ) {
if ( $hashRef->{$key} ne "" ) { #some of the coloumn of table has null value
#warning is coming for the if check
$dbData{$counter}{$key} = $hashRef->{$key};
}
else {
$dbData{$counter}{$key} = "";
}
}
$counter++;
}
答案 0 :(得分:2)
当然有:defined
功能。
if (defined $hashRef->{$key}) {...}
或者,由于undef
的计算结果为false,因此您可以使用短路OR运算符在一步中分配其他内容而无需进行明确检查。
$dbData{$counter}{$key} = $hashRef->{$key} || '';
<强>更新强>
根据评论的建议,如果您的0
值也会评估为false,那么单行是危险的。所以你可以这样做:
$dbData{$counter}{$key} = defined $hashRef->{$key} ? $hashRef->{$key} : '';
答案 1 :(得分:1)
如果测试值的行为符合您的喜好并且您只想使警告静音,则可以在测试周围的小范围内使用no warnings 'uninitialized'
。这是国际海事组织最不重要的警告类别之一;事实上,我几乎称之为调试功能,而不是正确的警告。
那就是说,如果您要测试的是该值是否已定义,则应使用defined
函数作为stevenl建议。
修改
我不确定downvote的用途是什么,但让我回应一些Perl世界常见的情绪。 warnings
(以及strict
就此而言)很棒,应该永远使用,除非您知道为什么要将某些部分内容因特定原因而关闭。有时未初始化的值应该是假的和沉默的,这没关系。当你知道这就是你想要的时候,就把它关掉而不是跳过|| ''
箍;它更加自我记录。