获取“在字符串ne中使用未初始化的值...”,即使在检查值已定义时也是如此

时间:2013-06-20 23:44:32

标签: perl operators

我有以下代码在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>

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

提前致谢:)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

评论数据转储器并运行,有时数据转储器将取消/取消该对象。