我該如何解決這個錯誤?當我嘗試訪問一個哈希元素時,爲什麼我會得到「不能使用字符串作爲哈希引用」錯誤?
foreach (values %{$args{car_models}}) {
push(@not_sorted_models, UnixDate($_->{'year'},"%o"));
}
錯誤: 不能使用字符串( 「1249998666」)作爲HASH REF而 「嚴格參」 在使用中/.../BMW.pm管線222
我該如何解決這個錯誤?當我嘗試訪問一個哈希元素時,爲什麼我會得到「不能使用字符串作爲哈希引用」錯誤?
foreach (values %{$args{car_models}}) {
push(@not_sorted_models, UnixDate($_->{'year'},"%o"));
}
錯誤: 不能使用字符串( 「1249998666」)作爲HASH REF而 「嚴格參」 在使用中/.../BMW.pm管線222
顯然,一個%{ $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
如果沒有進一步的,關於你的數據結構應該包含具體的信息,這是我最好的猜測。
Data::Dumper
模塊在這種情況下非常有用 - 幫助您找出爲什麼複雜的數據結構不能滿足您的期望。例如:
use Data::Dumper;
print Dumper(\%args);
嗨,如果你有一個哈希參考變量(如$ 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"));
}
感謝, 馬諾謝卡瓦特
@Kys您發佈的數據結構與上面的代碼和錯誤消息不一致。 – 2009-08-12 19:12:20