2015-04-28 3 views
0

У меня есть ниже хэш:Perl хэш ссылки ломтика

my %gilligan_info = (
     name   =>  'Gilligan', 
     hat    =>  'white', 
     shirt   =>  'Red', 
     position  =>  'First Mate', 
); 

my %skipper_info = (
     name   =>  'Skipper', 
     hat    =>  'Black', 
     shirt   =>  'Blue', 
     position  =>  'Captain' 
); 

У меня есть массив хэшей:

my @crew = (\%gilligan_info, \%skipper_info); 

Я создал ссылку:

my $ref = \%{$crew[1]}; 

Я потянув ключ значения от второго хеша:

my @ref_values = @{$ref}{ qw (name position hat)}; 

Мой вопрос в том, как я могу получить значения хэшей, не указав номер элемента в ссылке «$ ref»?

Благодаря

+0

Что вы желаемый результат для вышеприведенного примера? –

+0

Я хотел бы указать нужный элемент в «@ref_values» –

+0

Итак, что должно быть содержимым '@ ref_values'? –

ответ

0

Если вы хотите значения всех хэшей в одном массиве,

my @ref_values = map @$_{ qw(name position hat) }, @crew; 
0

Я думаю, что вы хотите для @ref_values содержит массив значений для каждого из @crew.

Что-то вроде этого, возможно,

my @ref_values; 

for my $crew (@crew) { 
    push @ref_values, [ @$crew{ qw(name position hat) } ]; 
} 

Это также возможно с помощью map, если вы предпочитаете, по аналогии с решением от Сухой27

+0

Спасибо. Есть ли способ Эми, я могу использовать ссылку «$ ref» вместо прямого использования «@crew»? –

+0

@SamPinar: Ну да, но в вашем собственном коде '$ ref' является копией только второго элемента' @ crew', поэтому вы не сможете получить доступ к первому элементу через него. Я думаю, возможно, вам нужно показать нам * реальную проблему, чтобы получить правильный ответ. – Borodin

+0

Все, что я хочу сделать, это использовать $ ref = \% {$ crew} (не указывая на определенный элемент) и написать синтаксис в $ ref_values, который указывает на элемент, который я хочу –

Смежные вопросы