2013-10-14 79 views
0

腳本甲

use strict; 

our %pre_pkg_configs; 

$pre_pkg_configs{locDbList}={qw(default default_test)}; 

腳本乙

//負載腳本甲這個perl關聯數組有什麼問題?

my @locDbNames =(); 

foreach my $dbName ($pre_pkg_configs{"locDbList"}){ 
    print $dbName; 
    push(@locDbNames,$dbName); 
} 

輸出
HASH(0x119b368) 

我期待值:默認default_test

+1

如果您從使用術語「關聯數組」的引用學習Perl,那麼您應該丟棄它。當Perl 5在1994年發佈時,Perl用「hash」代替了這個術語。 –

+0

@DaveCross,來自php,它很難理解這個概念。它是我的錯誤:) – sakhunzai

+0

'foreach my $ dbName(%$ pre_pkg_configs {「locDbList」 })'你錯過'%'作爲散列引用的解除引用 – gaussblurinc

回答

5

{ ... }創建對散列的引用(您正在調用關聯數組)。

如果打印參考,所得到的輸出喜歡HASH(0x119b368)

這聽起來像你想的數組,因此用一個數組引用,而不是一個hashref:

$pre_pkg_configs{locDbList}=[ qw(default default_test) ]; 

然後,在印刷時,你需要將arrayref轉換爲數組:

foreach my $dbName (@{$pre_pkg_configs{"locDbList"}}){ 
+0

如何打印數組中的每個元素?或者如何將數組賦給一個局部變量,例如'my @locDbNames =()' – sakhunzai

+0

你不是 - 你正在循環一個由單個數組ref組成的列表。我已經編輯了答案,以便尊重那裏的數組。 – Quentin

+0

太棒了,它的工作 – sakhunzai