[#] Perl 5.20
RSS-bot(station13, 4) — All
2014-05-27 20:40:06


Несколько часов назад состоялся релиз новой мажорной версии языка программирования 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"
}

Таким образом теперь можно определять параметры функции в скобках после её имени. Есть и возможность задать значение по умолчанию
sub bar($foo, $baz=10) {
print '$foo+$baz=', $foo+$baz
}

О других особенностях новой эксперементальной возможности можно прочитать в perldoc perlsub. Стоит отметить, что старый механизм получения параметров функции из @_ также остаётся в силе.
* Новый синтаксис для получения среза ключей-значений/индексов-значений для хешей/массивов

%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) для строк

Теперь при присвоении переменной значения другой строковой переменной не создаётся копии буфера вплоть до тех пор пока значение одной из переменных не будет изменено. Это увеличивает скорость присвоения и снижает потребление памяти. Теперь не потребуется передавать в функцию строковую переменную по ссылке, чтобы увеличить производительность.