Perl未初始化的值错误

时间:2014-01-16 19:14:44

标签: perl

我编写了以下代码来尝试在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和常规哈希之间的区别。

1 个答案:

答案 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 => 0test5 => '0'等元素。