当我遇到这种意外的情况时,我试图给另一个散列分配一个散列。来自Perl Dumper的意外输出
我正在打印翻斗车以验证散列是否正确形成。
当我迭代散列时,Data :: Dumper确实提供了期望的输出,但是当我打印整个散列时它显示出一些意想不到的结果。
请参阅下面的代码片段。任何见解都会有很大的帮助。
my (@aBugs) = (111,222,333);
my $phBugsRec;
my $phProfiles;
$phProfiles->{profiles} = { 'profile1' => 'default1' };
形成最终的哈希:
foreach my $pBugNo(@aBugs){
$phBugsRec->{bugAttributes}{$pBugNo}{totalEffort} = 0;
$phBugsRec->{bugAttributes}{$pBugNo}{profiles} = $phProfiles->{profiles};
}
如果我转储整个哈希,我没有得到预期的输出:
print '<pre>'.Dumper($phBugsRec).'</pre>';
$VAR1 = {
'bugAttributes' => {
'333' => {
'totalEffort' => 0,
'profiles' => {
'profile1' => 'default1'
}
},
'111' => {
'totalEffort' => 0,
'profiles' => $VAR1->{'bugAttributes'}{'333'}{'profiles'}
},
'222' => {
'totalEffort' => 0,
'profiles' => $VAR1->{'bugAttributes'}{'333'}{'profiles'}
}
}
};
但是,当我迭代散列,我得到预期的输出
foreach (sort keys $phBugsRec->{bugAttributes}){
print '<pre>'.$_.':'.Dumper($phBugsRec->{bugAttributes}{$_}).'</pre>';
}
111:$VAR1 = {
'totalEffort' => 0,
'profiles' => {
'profile1' => 'default1'
}
};
222:$VAR1 = {
'totalEffort' => 0,
'profiles' => {
'profile1' => 'default1'
}
};
333:$VAR1 = {
'totalEffort' => 0,
'profiles' => {
'profile1' => 'default1'
}
};
哪一部分是意外? Data :: Dumper正确地标识了对同一散列引用有多个引用,并且有助于显示它。 – tripleee
@tripleee:据我所知,Dumper显示了对同一个引用的多个引用。我期望看到的是散列散列的全部细节而不是引用。也许我对输出的理解略有错位。感谢您的澄清。 – Soumya
我正在写一个长期的解释... – simbabque