我有以下代码在perl中抛出未初始化的警告
警告:“在字符串ne中使用未初始化的值.......”
foreach my $sub (@{$decoded->{subscriptions}})
{
print STDERR Data::Dumper::Dumper $sub;
if (defined $sub and defined $sub->{status} and $sub->{status} ne 'unsubscribed')
{
push @subscriptions, $sub;
}
else
{
my $nowDate = Lib::Time::getSQLTime();
$nowDate =~ s/ /T/;
my $expireDate = $sub->{next_charge_at};
my $subtract = str2time($expireDate) - str2time($nowDate);
if ($subtract > 0)
{
push @subscriptions, $sub;
}
}
}
我正在检查我需要的值是否已定义,但即便如此,它也会抛出此警告,我不确定它为什么会这样做。
$ sub的值是:
{
'source' => 'xxxxxx',
'billing_system' => 'xxxxxxx',
'_id' => 'xxxxxxxxxxxxxxxx',
'status' => 'unsubscribed',
'userid' => xxxxxx,
'billing_key_type' => 'msisdn',
'created' => '2013-06-20T23:02:13',
'next_charge_at' => 2013-06-21T23:02:13',
'product' => 'xxxxxx',
'billing_key' => 'xxxxxxxxxxxxxxx'
};
当我将'ne'更改为'eq'时,它不会抛出该警告,即使对于这两个测试我使用相同的数据来比较该值。
在我进行检查之前,我还尝试打印$ sub-&gt; {status}的值,并显示'unsubscribed'或'subscribed',以便每次检查时该值都不为空。< / p>
有人可以帮我解决这个问题吗?如果您需要更多信息,请与我们联系。
提前致谢:)
答案 0 :(得分:1)
你有可能有一个elsif条款吗? elsif中的一些警告将与if的行号一起报告。
答案 1 :(得分:0)
评论数据转储器并运行,有时数据转储器将取消/取消该对象。