0

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」のいずれかが表示されます。

誰かがこれで私を助けてくれますか? さらに情報が必要な場合はお知らせください。

前もって感謝します :)

4

2 に答える 2

1

elsif 句がある可能性はありますか? elsif の一部の警告は、if の行番号とともに報告されます。

于 2013-06-21T00:38:26.257 に答える
0

データ ダンパーにコメントを付けて実行すると、データ ダンパーがオブジェクトを derefer/unrefer する場合があります。

于 2013-06-21T11:25:33.173 に答える