Perl массив и манипулирование хешем с помощью карты - PullRequest
3 голосов
/ 08 марта 2010

У меня есть следующий тестовый код

use Data::Dumper;

my $hash = {
            foo => 'bar',
            os  => 'linux'
           };

my @keys = qw (foo os);

my $extra = 'test';

my @final_array = (map {$hash->{$_}} @keys,$extra);

print Dumper \@final_array;

Вывод

$VAR1 = [
          'bar',
          'linux',
          undef
        ];

Разве элементы не должны быть "bar, linux, test"?Почему последний элемент не определен и как мне вставить элемент в @final_array?Я знаю, что могу использовать функцию push, но есть ли способ вставить ее в ту же строку, что и команда map?

По сути, манипулируемый массив предназначен для использования в команде SQL в реальном скрипте, и я хочу избежать использования дополнительных переменных до этого и вместо этого сделать что-то вроде:

$sql->execute(map {$hash->{$_}} @keys,$extra);

Ответы [ 2 ]

6 голосов
/ 08 марта 2010

Вы также можете использовать фрагмент хеша, чтобы избежать зацикливания с картой:

my @final_array = (@$hash{@keys}, $extra);
6 голосов
/ 08 марта 2010

$extra проходит через map, и поскольку в хэше нет записи с ключом test, значение равно undef. Поставьте скобки вокруг map для принудительного разбора:

$sql->execute((map {$hash->{$_}} @keys),$extra);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...