[英]Getting HASH ref error in Perl
我試圖了解為什么在一種情況下而不是另一種情況下會出現HASH ref錯誤。 錯誤:在./a.pl第351行使用“ strict refs”時,不能將字符串(“ 1”)用作HASH ref。錯誤行由<-表示
問題代碼:
my $count = 0;
my %sort_total;
foreach my $host (keys %ips_per_host) {
foreach my $ip (keys %{$ips_per_host{$host}}) {
$sort_total{$count} = $ips_per_host{$host}{$ip};
$sort_total{$count}{'host'} = $host; <--
$sort_total{$count}{'ip'} = $ip;
$count++;
}
}
foreach $count (sort {$sort_total{$a} cmp $sort_total{$b} }keys %sort_total){
[...]
}
但是,如果我創建另一個哈希並使用它,則不會出錯。
my $count = 0;
my %sort_total;
my %sort_hosts;
foreach my $host (keys %ips_per_host) {
foreach my $ip (keys %{$ips_per_host{$host}}) {
$sort_total{$count} = $ips_per_host{$host}{$ip};
$sort_hosts{$count}{'host'} = $host;
$sort_hosts{$count}{'ip'} = $ip;
$count++;
}
}
foreach $count (sort {$sort_total{$a} cmp $sort_total{$b} }keys %sort_total){
[...]
}
誰能幫助我了解為什么會這樣? 我有幾次遇到它,我真的很想把它纏住。
您收到此錯誤的原因是因為以下表達式:
$ips_per_host{$host}{$ip}
返回數字1
。 將其存儲在$sort_total{$count}
是一件非常好的事情。
問題是您然后嘗試將東西放入$sort_total{$count}{'host'}
。
當您使用嵌套的數據結構時,Perl將嘗試“自動生存”(使之存在)嵌套物存在所必需的結構層。 因此,Perl檢查是否存在$sort_total{$count}
,並且確實存在。 然后,它檢查該值是否是對另一個哈希的引用,因為您的表達式具有兩級哈希。 但這不是; 它已經設置為值1
。 如果Perl要在其中自動保存哈希引用,它將刪除您已經存儲的內容,這可能不是您想要的。 因此,Perl退出並顯示錯誤,假設您寧願更正此錯誤而不是覆蓋數據。
因此,有一些選擇。
如果$ips_per_host{$host}{$ip}
應該實際上是在返回一個hashref而不是一個數字,那么那是一個錯誤,請對其進行修復。
如果$ips_per_host{$host}{$ip}
確實應該是數字,則將其分配給您要使用的哈希中的鍵,例如$sort_total{$count}{per_host} = $ips_per_host{$host}{$ip};
現在,請使用兩個單獨的哈希。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.