变量具有正确的值,但显示“未初始化值”警告
问题描述:
存在包含某些数据的散列,其用户部分符合我的兴趣。变量具有正确的值,但显示“未初始化值”警告
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
。
即使打印命令也会输出正确的值和无意义的警告,如下所示。
Use of uninitialized value $mailtime in print at custom_log.pl line 51.
的自卸车的输出是:
$VAR1 = {
'id_local' => '0',
'mail_time' => '1117579067',
'id_global' => '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
答
我喜欢的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”即可。祝你好运,欢呼声;-)。
'使用未初始化的值$邮件在...'处打印''print $ mailtime;' – shampoo
您确定为每个用户设置了“mail_time”吗?是为循环的每个迭代给出的警告还是只针对特定的'$ user_key'? – kba
@Mat:当然可以。做到了。 – shampoo