2012-01-03 2 views
0

Я в настоящее время используется следующий хэш, который работает отличноPerl запрос о структуре данных

 
%hash = ( 
    'env1' => 'server1:port1, server11:port11', 
    'env2' => 'server2:port2, server22:port22' 
) ; 

Однако то, что я действительно хочу сделать, это создать такую ​​структуру данных, что сделает его более легким для меня, чтобы извлечь информацию , Очевидно, что это не работает.

 
(
    env1 => "server=server1, port=port1", "server=server11, port=port11", 
    env2 => "server=server2, port=port2", "server=server22, port=port22" 
) ; 

Если у вас есть предложения по созданию структуры данных, которая бы соответствовала моим требованиям.

+0

Как вы начинаете первый хеш? –

+0

Как вы собираетесь использовать значения? – TLP

ответ

10

Написать это:

%hash = (
    env1 => ["server=server1, port=port1", "server=server11, port=port11"], 
    env2 => ["server=server2, port=port2", "server=server22, port=port22"] 
) ; 

И тогда доступ к элементам, как это:

$hash{'env1'}->[0] == "server=server1, port=port1" 
$hash{'env2'}->[1] == "server=server22, port=port22" 

Это хеш, где значения являются ссылки на анонимные массивы.

Но когда я смотрю на вас данные, которые я думаю, может быть, есть лучший способ сохранить его:

%hash = (
    env1 => [{'server' => 'server1', 'port' => 'port1'}, {'server' => 'server11', 'port' => 'port11'}], 
    env2 => [{'server' => 'server2', 'port' => 'port2'}, {'server' => 'server22', 'port' => 'port22'}] 
) ; 

И тогда доступ к элементам, как это:

$hash{'env1'}->[0]->{'server'} == "server1" 
$hash{'env2'}->[1]->{'port'} == "port22" 
+1

Спасибо Dan. Я все еще работаю над созданием цикла, который перейдет выше хэш (последняя часть вашего сообщения), но детали, которые вы предоставили, именно то, что я искал! – bubbly

0

Трудно сказать точно, что вы «Искал данный вопрос. Я подозреваю, что хеш хешей будет достаточным. Вы бы настроить его так:

%hash = ('env1' => { 'server' => 'server1', 'port' => 'port1' }, 
      'env2' => { 'server' => 'server2', 'port' => 'port2' }); 

Чтобы получить значения, вы могли бы сделать что-то вроде этого:

print $hash{'env2'}->{'server'}; 

Вы можете добавить дополнительные значения, как это:

$hash{'env3'} = {'server' => 'server3', 'port' => 'port3'}; 
Смежные вопросы