2013-06-13 29 views
4
if((scalar keys ($this->{'libraries'}->{$y}->{'cellHash'})) == 0){ 

這是我得到「引用鍵的參數類型必須是未散列hashref或arrayref」錯誤的行。你能幫我解決這個問題嗎? 我不明顯的原因發佈代碼。引用鍵參數的類型必須是未散列的hashref或arrayref

+2

您可能無法發佈真正的代碼「出於顯而易見的原因」,但是如何處理一些示例,可運行的虛擬代碼,這些代碼可以顯示您遇到的問題,而無需公開真實代碼的完整上下文? –

+0

@Dave Sherohman,一般的好建議,但是問題已經解釋了,並且在你的評論前兩個小時提出了一個解決方案。您可以通過在OP的代碼之前複製問題:'$ y ='y'; $ this - > {'libraries'} - > {$ y} - > {'cellHash'} = bless({});'。請注意,您必須使用5.14或更高版本來獲取OP得到的錯誤。 – ikegami

回答

8

keys作爲參考的新功能在設計上被打破。 Perl的開發團隊無法弄清楚它應該如何處理一些引用,所以它只適用於某些引用。因此,keys接受參考的能力記錄爲experimental。無法解決此問題,此「功能」已被刪除5.24。您不應該使用它,因爲當您升級perl時,您的代碼將停止工作。

你碰到過這種情況,keys在給出參考時不起作用。改爲提供散列或數組。在這種情況下,你可能想

keys(%{ $this->{'libraries'}->{$y}->{'cellHash'} }) 

整個事情可以寫成如下:

if (!keys(%{ $this->{libraries}{$y}{cellHash} })) { ... } 
0

%{$本 - > { '圖書館'} - > {$ Y} - > { 'cellHash'}}。我錯過了花括號和%。

相關問題