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} 的值,它显示“未订阅”或“已订阅”,因此每次检查时该值都不为空。

有人可以帮我解决这个问题吗?如果您需要更多信息,请告诉我。

提前致谢 :)

4

2 回答 2

1

你有可能有一个 elsif 子句吗?elsif 中的一些警告将与 if 的行号一起报告。

于 2013-06-21T00:38:26.257 回答
0

注释数据转储器并运行,有时数据转储器会取消引用/取消引用对象。

于 2013-06-21T11:25:33.173 回答