Новое в Perl 5.12 — часть I

| Комментариев: 4

21 марта на CPAN появился релиз-кандидат Perl 5.12. 29 марта — RC1. Еще через неделю пора ставить 5.12 в продакшн :-)

strict по умолчанию

Явное указание use v5.12 неявно делает активным strict.

Например, программа

use v5.10;
say $x;

отработает без ошибок, а похожая, но с явно упомянутой версией 5.12 (если быть точным, то более 5.11), уже не скомпилируется:

use v5.12;
say $x;

Global symbol "$x" requires explicit package name at 2.pl line 3.
Execution of 2.pl aborted due to compilation errors.

Версии модулей

В Perl 5.12 возможно указывать версию модуля одновременно с его именем, избавляясь от переменной $VERSION:

package Earth::Gravity 9.8;

sub g {
    return 9.8;
}

1;

Аналогичный синтаксис в директиве use работает по-прежнему, позволяя указывать минимально необходимую версию:

use v5.12;
use Earth::Gravity 9.8;

say g();

Важно помнить, что таким образом невозможно выбрать модуль конкретной версии, если в наличии есть несколько.

Например, если в каталоге lib лежит модуль Earth::Gravity 9.81, то успех будет зависеть от порядка просмотра каталогов:

$ perl5.12.0 -I. -Ilib test.pl
Earth::Gravity version 9.81 required--this is only version 9.8 at 2.pl line 3.
BEGIN failed--compilation aborted at 2.pl line 3.

$ perl5.12.0 -Ilib -I. test.pl 9.81

Номер версии по-прежнему доступен через переменную $VERSION, даже если она не была инициализирована явно:

$ perl5.12.0 -mEarth::Gravity -E'say $Earth::Gravity::VERSION' 9.8

Оператор Yada Yada (...)

(Еще один вопрос для собеседования :-)

Оператор ... создан для того, чтобы поставить временную заглушку вместо кода, который еще не написан. Perl разрешает компилировать код с этими точками, но запрещает выполнять его.

При попытке выполнить код, содержащий Yada Yada, возникнет ошибка (времени исполнения):

use v5.12;

sub calculate_salary {
    ...;
}

say 'before';
calculate_salary;
say 'after';

$ perl5.12.0 test.pl
before
Unimplemented at test.pl line 4.

Yada Yada правильно распознается только в том случае, если использовано в конструкции, подразумевающим законченное выражение. В остальных случаях ... может быть распознан как один из вариантов оператора диапазона.

Правильное использование:

sub calculate_salary {
    ...;
}

Неправильное использование (вызовет ошибку при компилировании):

say base_salary + ...;

Метасимвол \N в регулярных выражениях

Метасимвол \N совпадает со всеми символами, кроме перевода строки \n, причем независимо от наличия модификатора /s.

use v5.12;

"abc\ndef" ~~ /(\N+)/;
say $1; # abc

"abc\ndef" ~~ /(\N+)/s;
say $1; # abc

В этом значении метосимвол является экспериментальным; в частности, из-за возможных конфликтов в использовании с именованными символами, которые прагма charnames делает доступными с помощью очень похожиго синтаксиса: \N{GREEK SMALL LETTER PI}, в то время как повторы нескольких символов \N может быть записан с помощью стандартного квантификатора: \N{5}.

См. также Новое в Perl 5.12 — Часть II

Комментариев: 4

Fix pls "Аналогичный синтаксив"

Так же фикс /то в зависимости успех будет зависеть/успех будет зависеть/

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 30.03.2010 16:37. Автор — ash.

Предыдущая запись — 5.12.0 RC1

Следующая запись — Новое в Perl 5.12 — часть II

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.