2012-03-13 36 views
1

不明白。Perl循環遍歷哈希數組給出的錯誤信息嘗試通過散列數組循環並得到一條錯誤消息,我不希望使用字符串(「密碼」)作爲HASH參考,而使用「嚴格參考」時使用

下面是使用Dumper創建散列數組的代碼它似乎包含所有的東西。像這樣它運行良好。

while ($getAdUserInfo->fetch()){ 

$name = $name || ''; 
$isactive = $isactive || ''; 
$loginid = $loginid || ''; 
$account_status = $account_status || ''; 
$password = $password || ''; 
#print "$name, $isactive, $loginid, $account_status, $password\n"; 
my %row = (
    name => $name, 
    isactive => $isactive, 
    loginid => $loginid, 
    account_status => $account_status, 
    password => $password, 
); 
push(@adUserInfo, %row); 
} 

但如果我通過它的代碼添加到循環

for my $rowRef (@adUserInfo) { 
print $rowRef->{password}; 
} 

我得到這個錯誤不能使用字符串(「密碼」)作爲HASH裁判而「嚴格裁判」在使用中adempiereToExo.pl line 64

現在我已經對這個錯誤進行了一些閱讀,並且大部分時候它看起來像是在數組中有某些內容不是哈希引用時發生的。但我不認爲這是事實。我對Perl非常陌生,所以我可能是錯的。它總是它呻吟的哈希中的最後一個元素?

我知道有很多人問這個錯誤,但我已經讀了很多答案,仍然無法弄清楚。

回答

3

更改此:

push(@adUserInfo, %row); 

(意思是「擴大%row的鍵和值出到一個列表,和所有的人都加入到@aduserInfo「,你可以添加一個print "@adUserInfo\n"得到的一個清晰的概念即),以這樣的:

push(@adUserInfo, \%row); 

(意思是 「創建到%row的引用,以及引用添加到@aduserInfo」)。

而且它始終是它呻吟的哈希中的最後一個元素?

這是任意的。哈希是無序的,所以沒有「最後一個元素」的概念。

1

以下兩個選項任選其一:

  1. push @adUserInfo, \%row;
  2. push @adUserInfo, {%row};

他們都推hashref到陣列堆棧,首先通過取消引用哈希這樣做。第二個通過將散列分解爲列表並將該列表的內容放入hashref來創建hashref。


你的錯誤來了,因爲$rowRef通過數組,而不是被hashrefs的陣列,是散列的鍵和值的一維數組循環。我認爲解釋器看到你的代碼爲"password"->{password},它的錯誤是正確的,你不能使用一個字符串作爲hashref。

相關問題