我编写了以下代码来尝试在hashref中打印出值。 hashref来自DBI $statement->fetchrow_hashref()
方法。
我想使用"string + $variable"
键来访问元素的值。当我运行代码时,我收到以下错误:
在main.pl第19行的字符串eq中使用未初始化的值$。
我认为在尝试使用它之前我正在检查该值,因此我不知道如何捕获该元素test3
是空的。
use strict;
use warnings;
# list is actually a hashref from DBI query
my $list = {"test1" => 'true=yes', "test2" => 'false=no', "test3" => ''};
my $value = "";
my_function($list);
sub my_function {
my ($list) = @_;
# Loop through values
foreach my $i(1..6) {
$value = $list->{"test$i"};
if(undef $value || $value eq "") {
next;
}
my ($k, $v) = split('=', $value);
print "$k = $v\n";
}
}
我也很好奇hashref和常规哈希之间的区别。
答案 0 :(得分:8)
致电undef $value
将 $value
设为undef
。
您需要使用defined
,而不是像这样
if (not defined $value or $value eq "") {
next;
}
或
next unless defined $value and $value ne '';
另请注意,除undef
和空字符串之外的唯一Perl false 值为零和字符串"0"
,因此最简单的方法是排除所有这些只是
next unless $value;
但在您的情况下,这也会排除您可能不需要的test4 => 0
和test5 => '0'
等元素。