Часть I
История и статистика
Perl 5.10 увидел свет в 20 день рождения языка — 18 декабря 2007 года. Уже прошло более двух лет, и за это время успели появиться девелоперские версии 5.11.0, 5.11.1, 5.11.2, 5.11.3 и 5.11.4, и вот-вот появится версия 5.12, предназначенная для использования в реальных приложениях.
Perl 5.10 представил много нововведений, и сегодня интересно посмотреть, как часто они используются авторами модулей CPAN — модулей, появившихся после релиза 5.10, либо обновленных с того времени.
На CPAN сейчас хранится около 80 000 модулей в 20 000 дистрибутивах, список авторов содержит около 8000 имен. Как часто здесь используются фичи Perl 5.10?
Ответ: новые фичи встречаются в двух сотнях модулей, созданных сотней авторов.
Часть II
Фичи Perl 5.10
Кратко о том, что появилось в Perl 5.10.
— Встроенная функция say, которая работает аналогично print, но добавляет перевод строки.
— Оператор сопоставления (смартматчинга) ~~ сопоставляет свои аргументы согласно здравому смыслу (и, разумеется, четким правилам, описанным в документации). Например, в этих примерах аргументы имеют разный тип, но используется один и тот же оператор.
$a ~~ /\d/ $a ~~ @list @list ~~ %hash
— Составной оператор выбора под условным названием switch. С помощью новых ключевых слов given, when и default возможно создать условную конструкцию, аналогичную switch/case в C и других языках. Важное отличие в том, что внутри given происходит не простое сравнение, а сопоставление (или смартматчинг).
given($x) {
when(/a/) {...}
when('b') {...}
default {...}
}
— Модификатор state позволяет создавать лексические переменные, сохраняющие значение между вызовами подпрограммы. Использование state похоже на объявление автоматической переменной со словом static в C.
sub counter {
state $c = 0;
return ++$c;
}
— Новшества в регулярных выражениях. Регулярные выражения существенно переработаны, в частности, добавлены именованные сохраняющие скобки. В этой статье про регулярные выражение почти не упоминается, поскольку они достойны отдельного рассказа.
(?<name>) \K \R %+ %- \g<name>
— Бинарный оператор defined-or (//). Возвращает первый из аргументов, который содержит определенное (не undef) значение. Может использоваться и в варианте с присвоением.
Следующие два примера иллюстрируют логику, которая часто прослеживается в сообщениях о вакансиях.
$city = $arg // 'Moscow';
$vacancy{city} //= 'Moscow';
Продолжение будет.