变量具有正确的值但是未初始化的值'显示警告

时间:2016-02-13 12:03:12

标签: perl perl-data-structures

有一个包含一些数据的哈希,其用户部分是我感兴趣的。

my %users = %{$data{'users'}};
foreach my $user_key (keys %users){
        print Dumper $users{$user_key};
        my $mailtime      =  $users{$user_key}{'mail_time'};
        my $id_local       =  $users{$user_key}{'id_local'};
        my $id_global      =  $users{$user_key}{'id_global'};
        print $mailtime;
}

除了print $mailtime行的抛出警告外,一切正常 即使是print命令也会输出正确的值以及无意义的警告,如下所示。

Use of uninitialized value $mailtime in print at custom_log.pl line 51.

翻斗车的输出是:

$VAR1 = {                                                    
          'id_local' => '0',                                 
          'mail_time' => '1117579067',                       
          'id_global' => '2'                                 
        };

2 个答案:

答案 0 :(得分:2)

如果没有看到%data的转储,就无法确定它失败的原因,但是一些测试表明您的某个用户错过了mail_time密钥。如果我按照以下方式创建%data并运行您的脚本......

my %data = (
    users => {
        user1 => {
            id_local  => '0',
            mail_time => '1117579067',
            id_global => '2',
        },
        user2 => {
            id_local  => '0',
            # purposely missing mail_time <---
            id_global => '2',
        },
    },
);

然后我遇到了同样的问题......输出如下

Use of uninitialized value $mailtime in print at custom_log.pl line 27.
1117579067

答案 1 :(得分:0)

我喜欢perl,因为你必须要精确。 尝试用以下方法读出你的价值:

print $users{$user_key}->{'mail_time'};

RESP。

my $mailtime = $users{$user_key}->{'mail_time'};

或最终

print $users->{$user_key}->{'mail_time'};

我现在不完全是你的哈希的结构,但我认为第一个例子对你有用,第二个例子就是这个例子。下一次,请转储root-hash,在您的情况下为“$ data {'user'}”以查看它的整个结构。此外,使用perl-debugger可以提供更多信息,只需使用“perl -d scriptname.pl”即可。祝你好运和欢呼; - )。