0

我正在查询数据库中的两列并将它们写入 .csv 文件。我遇到的问题是下面的代码行导致此错误:“在第 105 行的字符串中使用未初始化的值”。

打印 $file "$hash_ref->{'UserNM'}" 。join("\t", "$hash_ref->{'EventDT'}" . "\n");

我在文件中寻找的是这样的东西:

用户 ID    上次登录时间戳
用户12 2012-12-27 12:21:12
用户 49 2011-06-13 12:21:12
用户 43 2010-09-15 12:21:12
用户09 2013-01-07 12:21:12
用户87 2012-08-12 12:21:12
用户 38 2013-01-07 12:21:12
用户 31 2009-04-30 12:21:12

只需询问是否需要更多代码。

4

4 回答 4

2

您的哈希值之一未定义。试试这个:

printf $file "%s\t%s\n", $hash_ref->{'UserNM'} // q{}, $hash_ref->{'EventDT'} // q{};

q{}如果值未定义,它将默认为空字符串 ( )。

于 2013-01-07T17:56:56.573 回答
0

正如@gpojd 指出的那样,未定义哈希引用之一。您还可以为IFNULL/ISNULL查询中的每个字段包含一个语句,该语句可能返回NULL只是将它们设置为空白。

于 2013-01-07T18:00:11.763 回答
0

听起来这仍然不适合您。在尝试打印之前检查是否同时定义了 $hash_ref->{'UserNM'} 和 $hash_ref->{'EventDT'} 可能对您的调试有指导意义。这将允许您为每个变量提供一个备用默认值,并至少让您分析一些输出。

my $UserNM;
my $EventDT;

if (defined($hash_ref->{'UserNM'})) {
    $UserNM = $hash_ref->{'UserNM'};
} else {
    $UserNM = "default username";
}

if (defined($hash_ref->{'EventDT'})) {
    $EventDT= $hash_ref->{'EventDT'};
} else {
    $EventDT= "default event date";
}

print $file "$UserNM" . join("\t", "$EventDT" . "\n");
于 2013-01-07T22:01:17.700 回答
0

我决定使用以下代码简化连接并将列作为变量传递:

    我的 $usernm = "$row->{'UserNM'}";
    我的 $logindt = "$row->{'EventDT'}";

    # 将用户和上次登录时间戳转储到文件中
        打印 MYFILE "$usernm \t $logindt \n";

在我看来,这更简单,更干净。它有效。有人不同意吗?

于 2013-01-08T18:57:28.200 回答