有一个包含一些数据的哈希,其用户部分是我感兴趣的。
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'
};
答案 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”即可。祝你好运和欢呼; - )。