См. также Новое в Perl 5.12 — часть I
each для массивов
Встроенная функция each работает с массивами. Она возвращает пары значений «индекс — значение», каждый раз сдвигаясь по массиву на единицу:
use v5.12;
my @a = 1..10;
while (my ($a, $b) = each @a) {
say "$a, $b";
}
Эта программа печатает следующее:
0, 1
1, 2
2, 3
3, 4
4, 5
5, 6
6, 7
7, 8
8, 9
9, 10
Постфиксная форма when
when теперь выглядит еще более независимым от given. В Perl 5.12 возможно использовать when в качестве модификаторов инструкций, как это разрешено для if и unless.
use v5.10;
for ('a'..'z', 'A'..'Z') {
say when /[aeiou]/i;
}
Локальный delete local для хешей
Комбинация ключевых слов delete local позволяет локально удалить элемент из хеша. После выхода из соответствующей области видимости хеш остается прежним.
use v5.12;
my %h = (
alpha => 'a',
beta => 'b',
gamma => 'g',
);
say for keys %h; say; # gamma beta alpha
{
delete local $h{beta};
say for keys %h; say; # gamma alpha
}
say for keys %h; say; # gamma beta alpha
Кроме того
- Perl 5.12 включает обновленные таблицы юникода.
- В функциях работы со временем решена проблема 2038 года.
- Разрешена перегрузка оператора qr.
- Находясь внутри when, // ведет себя как || (э-м-м, требует осмысления).
Наконец, есть некоторые изменения в работе смартматчинга (в том числе, и в given/when), которые появились еще в Perl 5.10.1 (часть 1, часть 2).
Удивил тот факт, что можно локализировать ключ хешал с лексической областью видимости ввиду того, что сам хеш нельзя локализировать )
Thanks Andy, great intro!
Она возвращает пары значений, каждый раз сдвигаясь по массиву на единицу
Оказалось, это не совсем так. each возвращает пару индекс—значение:
>miniperl.exe -e "@a = qw/a b c/; while (($x,$y)=each @a) {print qq/$x, $y\n/}" 0, a 1, b 2, c