下面的代碼工作正常有效的Perl 5.14.2:Perl的不兼容問題與每個哈希散列 - 5.14→5.8.8
my %hzones =();
#%hzones= (
# 'zone1' => {
# 'ns1' => 'ip1',
# 'ns1' => 'ip2',
# },
# 'zone2' => {
# 'ns1' => 'ip1',
# 'ns2' => 'ip2'
# }
#);
foreach my $k1 (keys %hzones) {
debug("# $k1",$d);
while (my ($key, $value) = each($hzones{ $k1 })) { # Problem is here 217
while (my ($nsname, $nsip) = each(%$value)) {
debug("## $nsname , $nsip",$d);
}
# Creation de la zone et ajout dans infoblox
$session->add(createZone($k1)) or error("Add zone for ".$k1." failed: ",
$session->status_code(). ":" .$session->status_detail());
}
}
現在,如果我嘗試在RedHat 5.3使用此代碼用Perl 5.8.8,我有以下錯誤:
Type of arg 1 to each must be hash (not hash element) at
./migration-arpa.pl line 217, near "}) "
Execution of ./migration-arpa.pl aborted due to compilation
errors.
問題:如何解決這個問題?我如何遍歷我的散列表?
Perl 5.7是*古代* **開發**版本。不要使用它。 – Quentin
Red Hat 5.3標配了Perl 5.8.8(參見http://vault.centos.org/5.3/os/i386/CentOS/)。如果您運行的是5.7版,那意味着有人已將您的Perl版本降級到Perl的開發版(即不穩定版)。真的,不要把它用於任何嚴肅的工作。 –
他說他在帖子中使用5.8.8。該主題必須是錯字。固定。 – ikegami