Несколько часов назад состоялся релиз новой мажорной версии языка программирования Perl. Разработка Perl 5.20.0 заняла примерно 12 месяцев с момента выпуска Perl 5.18.0 и содержит около 470 000 строк изменений в 2 900 файлах от 124 авторов.
В этой версии достаточно много новшеств:
- Subroutine signatures
То, чего многие так ждали, а другие возражали привычным «ненужно»Таким образом теперь можно определять параметры функции в скобках после её имени. Есть и возможность задать значение по умолчаниюsub foo($bar, $baz) { print "\$bar=$bar, \$baz=$baz" }
О других особенностях новой экспериментальной возможности можно прочитать в perldoc perlsub. Стоит отметить, что старый механизм получения параметров функции из @_ также остаётся в силе.sub bar($foo, $baz=10) { print '$foo+$baz=', $foo+$baz }
- Новый синтаксис для получения среза ключей-значений/индексов-значений для хешей/массивов
%hash{...} и %array[...] соответственно%h = (blonk => 2, foo => 3, squink => 5, bar => 8); %subset = %h{'foo', 'bar'}; # срез ключ-значения для хеша # %subset теперь (foo => 3, bar => 8) @a = "a".."z"; @list = %a[3,4,6]; # срез индекс-значения для массива # @list теперь (3, "d", 4, "e", 6, "g")
- Постфиксное разыменовывание
К старому доброму разыменовыванию ссылок, навроде @$foo и %$bar, был добавлен вариант постфиксного разыменовывания: $foo->@* и $bar->%* соответственно. Синтаксис для других типов ссылок можно посмотреть в perldoc perlref - Механизм копирования при записи (copy-on-write) для строк
Теперь при присвоении переменной значения другой строковой переменной не создаётся копии буфера вплоть до тех пор, пока значение одной из переменных не будет изменено. Это увеличивает скорость присвоения и снижает потребление памяти. Теперь не потребуется передавать в функцию строковую переменную по ссылке, чтобы увеличить производительность.
>>> Подробности