Доброго дня.
Как известно, в 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;
Подскажите пожалуйста, как такое сделать элегантнее.