2014-10-31 70 views
1

我想知道我是否可以使用變量來訪問散列。我可以使用名稱的標量變量來訪問Perl哈希值嗎?

例如:

my $var = "nameOfHash"; 
my $nameOfHash{'foo'} = "bar"; 

print $var{'foo'}; 

在上面的例子中,我想要的行爲是它返回字符串「bar」,但很明顯,我的代碼是不太正確的。

+1

關鍵問題是*你想要做什麼*?你已經想象出一種機制,儘管它存在於Perl中,但卻因爲它的符號表的任意總體而受到了很大的折磨。一旦你建立了所有這些哈希,你怎麼知道他們有什麼名字?像這樣的問題通常的解決方案是使用散列,它可以像小型私人符號表一樣工作,您可以方便地查詢它包含的密鑰。然而,如果你想解釋你正在試圖解決這個問題,那麼我們可以更好地爲你提供建議。 – Borodin 2014-10-31 22:08:02

回答

5

爲什麼你需要它?您可以使用哈希值(環比)的哈希值,而不是:

my %hoh; 
$hoh{nameOfHash}{foo} = 'bar'; 
print $hoh{nameOfHash}{foo}; 

對於什麼是錯與原來的想法的說明,請參見Why it's stupid to `use a variable as a variable name'

+0

感謝您的迴應,Choroba!相關問題:然後,我將如何獲得HoH的密鑰以存儲爲數組?我曾經只是做「@hashArray =鍵%nameOfHash;」但現在它存儲在$ hoh {nameOfHash}下,我很難找到正確的語法?提前致謝! – user3878370 2014-10-31 21:16:04

+0

使用解除引用:'keys%{$ hoh {$ nameOfHash}}'。 – choroba 2014-10-31 21:17:36

+1

這有很大的幫助。非常感謝Choroba,感謝您在正確的軌道上讓我這樣的業餘愛好者獲得巨大的幫助! – user3878370 2014-10-31 21:24:53

相關問題