变量值正确但显示 'uninitialized value' 警告
Variable has correct value but 'uninitialized value' warning is shown
有一个包含一些数据的散列,我对它的用户部分感兴趣。
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'
};
如果没有看到 %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'};
分别。
my $mailtime = $users{$user_key}->{'mail_time'};
或最终
print $users->{$user_key}->{'mail_time'};
我现在不完全了解您的哈希结构,但我认为第一个示例应该适合您,第二个示例仅适用于此情况。下次,请转储根哈希,在您的例子中为“$data{'user'}”以查看它的整个结构。此外,使用 perl 调试器也不错,它可以为您提供更多信息,只需使用 "perl -d scriptname.pl" 即可。祝你好运,干杯 ;-).
有一个包含一些数据的散列,我对它的用户部分感兴趣。
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'
};
如果没有看到 %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'};
分别。
my $mailtime = $users{$user_key}->{'mail_time'};
或最终
print $users->{$user_key}->{'mail_time'};
我现在不完全了解您的哈希结构,但我认为第一个示例应该适合您,第二个示例仅适用于此情况。下次,请转储根哈希,在您的例子中为“$data{'user'}”以查看它的整个结构。此外,使用 perl 调试器也不错,它可以为您提供更多信息,只需使用 "perl -d scriptname.pl" 即可。祝你好运,干杯 ;-).