我正在查询两列的数据库并将它们写入.csv文件。我遇到的问题是下面的代码行导致此错误:“在第105行的字符串中使用未初始化的值”。
print $file "$hash_ref->{'UserNM'}" . join("\t", "$hash_ref->{'EventDT'}" . "\n");
我要找的是文件中的内容:
User ID Last Login TimeStamp user12 2012-12-27 12:21:12 user49 2011-06-13 12:21:12 user43 2010-09-15 12:21:12 user09 2013-01-07 12:21:12 user87 2012-08-12 12:21:12 user38 2013-01-07 12:21:12 user31 2009-04-30 12:21:12
询问是否需要更多代码。
答案 0 :(得分:2)
未定义其中一个哈希值。试试这个:
printf $file "%s\t%s\n", $hash_ref->{'UserNM'} // q{}, $hash_ref->{'EventDT'} // q{};
如果值未定义,则默认为空字符串(q{}
)。
答案 1 :(得分:0)
正如@gpojd所指出的,其中一个散列引用没有定义。您还可以为查询中的每个字段添加IFNULL/ISNULL
语句,该字段可能会返回NULL
,只是将它们设置为空白。
答案 2 :(得分: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");
答案 3 :(得分:0)
我决定使用以下代码简化连接并将列作为变量传递:
my $usernm = "$row->{'UserNM'}"; my $logindt = "$row->{'EventDT'}"; # dump users and last login timestamp into file print MYFILE "$usernm \t $logindt \n";
在我看来,这更简单,更清洁。它有效。有人不同意吗?