2010-07-07 78 views
-3

好吧..这个工程...perl的字符串分割到二维数组

sub getApSrvs 
{ 
my %apsrv; 
my $cluster; 

    foreach $cluster (getClusters()) 
    { 
    $apsrv{$cluster} = [split('\s+', `/$cluster/bin/gethosts -t app|sort -u`)]; 
    } 
return %apsrv; 
} 

...现在怎么在火腿三明治我得到这个打印像这样$集群 - > $主机名

好吧,我说:

my %apsrv = getApSrvs(); 
for my $cluster (keys %apsrv) { 
print "$cluster -> $apsrv{$cluster}\n"; 
} 

和我...

qboc22 - >阵列(0x9111618)

qboc5 - >阵列(0x9111504)

qboc32 - >阵列(0x90e20cc)

qboc28 - >阵列(0x90e1d28)

qboc30 - > ARRAY (0x90e1f38)

qboc23 - >阵列(0x9111540)

qboc27 - >阵列(0x911181c)

qboc29 - >阵列(0x91115ac)

QBO - >阵列(0x90e2294)

+0

什么一直是你的问题? – Daenyth 2010-07-07 20:16:46

+1

没有具体问题没有答案 - 你的代码不工作?数据看起来像是由split分析的? – Ether 2010-07-07 20:17:45

+0

'split'返回一个数组,因此您需要为该数组指定一个引用:'$ apsrv {$ cluster} = [split(...)]'。否则,我不知道你的问题是什么。 – mob 2010-07-07 20:18:50

回答

0
my %apsrv = getApSrvs(); 
for my $cluster (keys %apsrv) { 
    print "$cluster -> $apsrv{$cluster}\n"; 
} 

您将要打印,如果顺序很重要,之前的按键(sort keys %apsrv)排序。

1

$ apsrv {$ CLUSTER}是一个数组的引用,所以如果你想打印它的内容,你可以这样做:你需要帮助

my %apsrv = getApSrvs(); 
for my $cluster (keys %apsrv) { 
    print "$cluster -> ", join(', ', @$apsrv{$cluster}), "\n"; 
}