如何解决此错误?
foreach (values %{$args{car_models}}) {
push(@not_sorted_models, UnixDate($_->{'year'},"%o"));
}
错误: 在/.../BMW.pm第222行使用“strict refs”时,不能使用字符串(“1249998666”)作为HASH引用。
答案 0 :(得分:14)
Data::Dumper
模块在这种情况下非常有用 - 帮助您找出复杂数据结构无法满足您期望的原因。例如:
use Data::Dumper;
print Dumper(\%args);
答案 1 :(得分:11)
显然,%{ $args{car_models} }
中的一个值不是哈希引用。也就是说,数据结构不包含您的想法。因此,您可以修复数据结构或更改代码以匹配数据结构。由于您尚未提供数据结构,我无法对此发表评论。
在尝试访问成员之前,您可以使用ref
查看$_
是否包含对哈希的引用。
if ( ref eq 'HASH' and exists $_->{year} ) {
push(@not_sorted_models, UnixDate($_->{year},"%o"));
}
根据你的评论和我的ESP权力,我假设这些值是时间戳。所以,我猜,你试图从时间戳值(一个纪元的秒数)中找到年份。在这种情况下,您可能需要localtime
或gmtime
:
my $year = 1900 + (localtime)[5];
C:\Temp> perl -e "print 1900 + (localtime(1249998666))[5]" 2009
如果没有进一步的具体信息,关于你的数据结构应该包含什么,这是我最好的猜测。
答案 2 :(得分:0)
嗨,如果你有一个哈希引用变量(比如$ hash_ref)那么代码将是
if ( ref($hash_ref) eq 'HASH' and exists $hash_ref->{year} ) {
push(@not_sorted_models, UnixDate($hash_ref->{year},"%o"));
}
#instead of below:
if ( ref eq 'HASH' and exists $_->{year} ) {
push(@not_sorted_models, UnixDate($_->{year},"%o"));
}
谢谢, Manoj Shekhawat