LINUX.ORG.RU

Получение «ключей» из массива

 ,


0

1

Доброго дня.

Как известно, в Perl можно запросто сделать хеш из массива:

my @arr = (key1 => 'value1', key2 => 'value2');
# эквивалентно @arr = ('key1', 'value1', 'key2', 'value2')
my %hash = @arr;
for my $key (keys %hash) {
    print "$key => $hash{$key}\n";
}
# выведет
# key2 => value2
# key1 => value1

Что я хочу сделать, это получить индексы элементов массива, которые станут ключами при такой конвертации. Сейчас накостылял вот такую конструкцию:

my @key_indexes = grep { !($_ &1) } 0 .. $#arr;

А если более глобально, то задача стоит такая: на вход подается массив (с чётным количеством элементов) на выходе необходимо сформировать строку вида key1=value1;key2=value2;... но важно сохнанить порядок элементов как в массиве (по этому вариант «через хеш» не подходит).

Сейчас делаю что-то такое:

my $str = join ';', map { qq/$arr[$_]=$arr[$_ + 1]/ } grep { !($_ & 1) } 0 .. $#arr;

Подскажите пожалуйста, как такое сделать элегантнее.

Ответ на: комментарий от disarmer

keys на массиве начал работать с 5.12.

Но да, выглядит красивее, чем 0 .. $#arr

KennyMinigun ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.