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} の値を出力しようとしましたが、チェックを行うたびに値が空にならないように、「unsubscribed」または「subscribed」のいずれかが表示されます。
誰かがこれで私を助けてくれますか? さらに情報が必要な場合はお知らせください。
前もって感謝します :)