我有以下代码在 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->{status} 的值,它显示“未订阅”或“已订阅”,因此每次检查时该值都不为空。
有人可以帮我解决这个问题吗?如果您需要更多信息,请告诉我。
提前致谢 :)