2009-08-12 42 views

回答

9

顯然,一個%{ $args{car_models} }中的值不是哈希引用。也就是說,數據結構並不包含你認爲它的作用。因此,您可以修復數據結構或更改代碼以匹配數據結構。由於您尚未提供數據結構,因此我無法對此發表評論。

您可以使用ref來查看在嘗試訪問成員之前$_是否包含對散列的引用。

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

根據您的評論和我的ESP權力,我假設這些值是時間戳。所以,我猜測,你正在試圖從一個時間戳值(從一個時代的秒數)中找到一年。在這種情況下,你可能想localtimegmtime

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

如果沒有進一步的,關於你的數據結構應該包含具體的信息,這是我最好的猜測。

+0

我的意圖是將這些數字作爲數字推入@non_sorted_models數組,以便我可以在數組上調用排序。我該如何將它轉換爲整數 – Kys 2009-08-12 18:10:47

+0

順便說一句,把這些檢查到位仍然給了我同樣的錯誤。 – Kys 2009-08-12 18:12:25

+1

@Kys我不明白你在說什麼。你是說'values%{$ args {car_models}}'不應該是哈希引用嗎?如果是這樣的話,你爲什麼將它們解除引用,好像它們應該是? **顯示你的數據結構**否則這是一個盲人領導盲人的案例。 – 2009-08-12 18:30:07

11

Data::Dumper模塊在這種情況下非常有用 - 幫助您找出爲什麼複雜的數據結構不能滿足您的期望。例如:

use Data::Dumper; 
print Dumper(\%args); 
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")); 
} 

感謝, 馬諾謝卡瓦特

相關問題