如果我註釋掉Dumper($cmd_string)
那麼while
循環從來沒有采取。什麼是Data :: Dumper()的副作用?
不自卸車()對$ cmd_string什麼副作用嗎?
這裏是$ cmd_string是子調用之前:
VAR1 = {
'The Java Runtime Library' => {
'apt-get install -y' => 'sun-java6-jre'
}
};
sub installPackages
{
my $cmd_string = shift;
my %rc_hash;
my $rc;
Dumper($cmd_string);
for my $desc (keys %{$cmd_string})
{
while (my ($cmd, $arg) = each %{$cmd_string->{$desc}})
{
print "system($cmd $arg)\n";
$rc = system("$cmd $arg");
if ($rc)
{
$rc_hash{$desc}{$cmd} = '';
}
}
}
return \%rc_hash;
}
如果我跑,而不翻車機(Perl調試器),並使用然後cmd_string在$ x命令它的工作原理,但如果我只是一步通過代碼它不起作用。
這是僅限於子結束步進雖然現在的代碼
DB<3> x $cmd_string
0 HASH(0x2769550)
'' => HASH(0x2769880)
empty hash
'The Java Runtime Library' => HASH(0x25cc2a0)
'apt-get install -y' => 'sun-java6-jre'
DB<4> x $cmd_string->{$desc}
0 HASH(0x2769880)
empty hash
,如果我之前在for循環X $ cmd_string後,我得到這個在次月底
main::installPackages(msi.pl:1979): return \%rc_hash;
DB<3> x $cmd_string
0 HASH(0x1125490)
'The Java Runtime Library' => HASH(0xf852a0)
'apt-get install -y' => 'sun-java6-jre'
至少有一個很老的版本自卸車在它傾倒哈希年底不小心留下的迭代器。 – ysth 2011-03-23 21:31:43
快速,準確,正確。我喜歡SO ... – bitbucket 2011-03-23 21:41:54
Dumper()'重置內部迭代器。這會導致無限循環:'perl -MData :: Dumper -e'%x =(0,0); Dumper%x while $ k = each%x'' – 2011-03-23 21:57:33