Các mã sau hoạt động tốt với Active Perl 5.14.2:Perl không tương thích vấn đề với nhau trong một băm băm - 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());
}
}
Bây giờ, nếu tôi cố gắng sử dụng mã này trên RedHat 5.3 với Perl 5.8.8, tôi có lỗi sau:
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.
Câu hỏi: làm thế nào để khắc phục lỗi này? Làm thế nào để tôi đi qua hashtable của tôi?
Perl 5.7 là bản phát hành * cổ * ** phát triển **. Không sử dụng nó. – Quentin
Red Hat 5.3 đi kèm với Perl 5.8.8 là tiêu chuẩn (xem http://vault.centos.org/5.3/os/i386/CentOS/). Nếu bạn đang chạy 5.7 thì điều đó có nghĩa là ai đó đã hạ cấp phiên bản Perl của bạn thành phiên bản phát triển (ví dụ: không ổn định) của Perl. Thực sự, đừng sử dụng nó cho bất kỳ công việc nghiêm túc nào. –
Ông nói rằng ông đang sử dụng 5.8.8 trong bài viết. Đối tượng phải là lỗi đánh máy. Đã sửa. – ikegami