Назначение хэша с помощью List :: Util - PullRequest
1 голос
/ 07 марта 2012

Вот маленький код

use List::Util qw(first);

my $x = {FOO => undef};
my @array = (1,2,3,4,5,6,7,8,9);

$x->{FOO} =
    {
        'INFO' => first { $_ eq 1 } @array,
        'TI' => first { $_ eq 2 } @array,
    };

Это не создание вложенного хеша - у анонимного хеш-кода FOO есть только одна пара ключей. Вот о / п

$VAR1 = {
          'FOO' => {
                     'INFO' => 1
                   }
        };

Я не могу понять, почему это происходит? пожалуйста, помогите.

1 Ответ

3 голосов
/ 07 марта 2012

Функция first имеет прототип &@, что означает, что она принимает блок и список в качестве аргументов. Все после блока используется как список. Поэтому ваш код эквивалентен:

$x->{FOO} = {    
    'INFO' => first { $_ eq 1 } (@array, 'TI' => first { $_ eq 2 } @array),
};

Вы можете поместить целое выражение first в скобки или использовать анонимную подпрограмму:

$x->{FOO} = { 
    'INFO' => first(sub { $_ eq 1 }, @array),
    'TI'   => first(sub { $_ eq 2 }, @array),
}; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...