获取Perl中的HASH ref错误
我试图理解为什么在一种情况下会出现HASH-ref错误,而不是在另一种情况下。错误:在./a.pl第351行使用“strict refs”时,不能将字符串(“1”)用作哈希引用。由指示的错误行出现此错误的原因是因为以下表达式:获取Perl中的HASH ref错误,perl,Perl,我试图理解为什么在一种情况下会出现HASH-ref错误,而不是在另一种情况下。错误:在./a.pl第351行使用“strict refs”时,不能将字符串(“1”)用作哈希引用。由指示的错误行出现此错误的原因是因为以下表达式: $ips_per_host{$host}{$ip} 返回数字1。这是存储在$sort\u total{$count}中的一件非常好的事情,您可以这样做 问题是,然后您尝试将内容放入$sort\u total{$count}{'host'} 当您使用嵌套数据结构时,Per
$ips_per_host{$host}{$ip}
返回数字1
。这是存储在$sort\u total{$count}
中的一件非常好的事情,您可以这样做
问题是,然后您尝试将内容放入$sort\u total{$count}{'host'}
当您使用嵌套数据结构时,Perl将尝试“自动激活”(使其存在)嵌套对象所需的结构层。所以Perl检查$sort\u total{$count}
是否存在,它确实存在。然后检查该值是否是对另一个散列的引用,因为表达式有两级散列。但事实并非如此;它已设置为值1
。如果Perl在那里自动激活散列引用,它将删除您已经存储的内容,这可能不是您想要的。因此,Perl退出时会出现一个错误,假设您希望更正此错误,而不是覆盖数据
所以有几个选择
$ips\u per_host{$host}{$ip}
实际上应该返回一个hashref而不是一个数字,那么这是一个bug,所以请修复它$ips\u per_host{$host}{$ip}
确实应该是一个数字,那么将其分配给要使用的哈希中的一个键,例如$sort\u total{$count}{per_host}=$ips\u per_host{$host}{$ip}代码>
出现此错误的原因是以下表达式:
$ips_per_host{$host}{$ip}
返回数字1
。这是存储在$sort\u total{$count}
中的一件非常好的事情,您可以这样做
问题是,然后您尝试将内容放入$sort\u total{$count}{'host'}
当您使用嵌套数据结构时,Perl将尝试“自动激活”(使其存在)嵌套对象所需的结构层。所以Perl检查$sort\u total{$count}
是否存在,它确实存在。然后检查该值是否是对另一个散列的引用,因为表达式有两级散列。但事实并非如此;它已设置为值1
。如果Perl在那里自动激活散列引用,它将删除您已经存储的内容,这可能不是您想要的。因此,Perl退出时会出现一个错误,假设您希望更正此错误,而不是覆盖数据
所以有几个选择
$ips\u per_host{$host}{$ip}
实际上应该返回一个hashref而不是一个数字,那么这是一个bug,所以请修复它$ips\u per_host{$host}{$ip}
确实应该是一个数字,那么将其分配给要使用的哈希中的一个键,例如$sort\u total{$count}{per_host}=$ips\u per_host{$host}{$ip}代码>
$ips_per_host{$host}{$ip}