2010-07-07 2 views
-3

Хорошо .. это работает ...Perl разбить строку в 2d массива

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 -> ARRAY (0x9111618)

qboc5 -> ARRAY (0x9111504)

qboc32 -> ARRAY (0x90e20cc)

qboc28 -> ARRAY (0x90e1d28)

qboc30 -> ARRAY (0x90e1f38)

qboc23 -> ARRAY (0x9111540)

qboc27 -> ARRAY (0x911181c)

qboc29 -> ARRAY (0x91115ac)

КДК -> ARRAY (0x90e2294)

+0

И то, что ваша проблема в том, что вам нужна помощь? – Daenyth

+1

Нет ответа без конкретного вопроса - как ваш код не работает? Как выглядят данные, которые анализируются 'split'? – Ether

+0

'split' возвращает массив, поэтому вам нужно назначить ссылку на массив:' $ apsrv {$ cluster} = [split (...)] '. В противном случае я понятия не имею, каков ваш вопрос. – mob

ответ

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

Вы хотите отсортировать ключи (sort keys %apsrv) перед печатью, если заказ имеет важное значение.

1

$ apsrv {$ кластер} является ссылкой на массив, так что если вы хотите, чтобы напечатать ее содержимое вы можете сделать:

my %apsrv = getApSrvs(); 
for my $cluster (keys %apsrv) { 
    print "$cluster -> ", join(', ', @$apsrv{$cluster}), "\n"; 
} 
Смежные вопросы