2013-01-18 44 views
0

請幫我解決這個問題無法遍歷哈希在Perl腳本數組

pre_package_config.pm

use strict; 
our %pre_pkg_configs; 

$pre_pkg_configs{locDbList}=['default','default_test']; 

second.pl

#!/usr/bin/perl 
use Expect; 
use strict; 

our %pre_pkg_configs; 

my $pre_pkg_file = './pre_package_config.pm'; 

eval {require $pre_pkg_file}; 

foreach my $db ($pre_pkg_configs{locDbList}){ 
    print $db; 
} 

輸出:

ARRAY(0x10092ae88)

本來應該是:

默認 default_test

+1

調試時,使用[數據::自卸車(http://search.cpan.org/perldoc?Data%3A%3ADumper)模塊來打印您的調試信息。它會讓事情變得更容易。 – TLP

回答

3

$pre_pkg_configs{locDbList}是單(標)值。迭代它只會給你一個值(這恰好是對數組的引用)。如果你想遍歷數組的內容,您需要取消引用:

for my $db (@{ $pre_pkg_configs{locDbList} }) { 
    print $db; 
} 

注意,這將輸出defaultdefault_test,不default default_test。獲得後者的最簡單方法是:

print join(" ", @{ $pre_pkg_configs{locDbList} }), "\n"; 

要了解有關參考的更多信息,請參閱perldoc perlreftut
(此外,你應該在此外,每文件use strict;use warnings;。)

+0

但我在前面的文件中設置了'$ pre_pkg_configs {locDbList}'數組?例如'$ pre_pkg_configs {locDbList} = ['default','default_test'];' – sakhunzai

+0

我應該怎麼做$ pre_pkg_configs {locDbList}一個我可以迭代的數組? – sakhunzai

+0

@sakhunzai不,這是對數組的引用,而不是數組。哈希不能包含數組,它們只能包含標量。參見['perlreftut'](http://perldoc.perl.org/perlreftut.html)。 – melpomene