当我尝试访问哈希元素时,为什么会出现"无法将字符串用作HASH ref"错误?

Kys*_*Kys 9 perl

我该如何解决这个错误?

foreach (values %{$args{car_models}}) {
   push(@not_sorted_models, UnixDate($_->{'year'},"%o"));
}
Run Code Online (Sandbox Code Playgroud)

错误:在/.../BMW.pm第222行使用"严格参考"时,不能使用字符串("1249998666")作为HASH参考.

FMc*_*FMc 14

Data::Dumper模块在这种情况下非常有用 - 帮助您找出复杂数据结构无法满足您期望的原因.例如:

use Data::Dumper;
print Dumper(\%args);
Run Code Online (Sandbox Code Playgroud)


Sin*_*nür 11

显然,其中一个值%{ $args{car_models} }不是哈希引用.也就是说,数据结构不包含您的想法.因此,您可以修复数据结构或更改代码以匹配数据结构.由于您尚未提供数据结构,我无法对此发表评论.

您可以在尝试访问成员之前ref查看是否$_包含对哈希的引用.

if ( ref eq 'HASH' and exists $_->{year} ) {
    push(@not_sorted_models, UnixDate($_->{year},"%o")); 
}
Run Code Online (Sandbox Code Playgroud)

根据你的评论和我的ESP权力,我假设这些值是时间戳.所以,我猜,你试图从时间戳值(一个纪元的秒数​​)中找到年份.在这种情况下,您可能想要localtimegmtime:

my $year = 1900 + (localtime)[5];
Run Code Online (Sandbox Code Playgroud)
C:\Temp> perl -e "print 1900 + (localtime(1249998666))[5]"
2009

没有进一步的,关于你的数据结构应该包含什么的具体信息,这是我最好的猜测.