feature (особенность) - Perl прагма для включения нового функционала. Детальное описание feature можно найти в perldoc, а тут приведу лишь некий краткий анонс.
В общем случае feature в perl-коде включаются следующим образом:
no feature - отключает действие feature:
use feature 'say' - включает использование Perl6 функции say.
Функция say аналогична print, но к выводу добавляет "\n".
Эта feature доступна с версии Perl 5.10.
use feature 'state' - сообщает компилятору о включении переменных состояния (state).
Для детального ознакомления изучаем Persistent Private Variables.
Эта feature доступна с версии Perl 5.10.
use feature 'unicode_strings' - сообщает компилятору использовать правила Unicode во всех строковых операциях, попадающих в сферу его действия feature. Это же относится и к регулярным выражениям. При этом внутреннее представление не изменяется, меняется лишь их интерпретация.
Рекомендуется изучить Perl Unicode Bug во избежание сюрпризов и недоразумений.
Эта функция доступна начиная с Perl 5.12; была почти полностью реализована в Perl 5.14; и продлена в Perl 5.16, чтобы перекрыть quotemeta.
use feature 'fc' - говорит компилятору включить поддержку функции fc.
fc EXPR - возвращает регистронезависимую версию EXPR.
Комплектное включение feature
Неявная загрузка feature.
Вместо загрузки отдельных feature можно позволить Perl неявно загрузить всё самому.
Для "однострочников" можно вместо -e использовать -E.
В скриптах - указать минимально используемую версию Perl. То есть:
В общем случае feature в perl-коде включаются следующим образом:
Как правило невозможно добавит в perl-скрипт новый синтаксис, не нарушая существующий код. Использование feature даёт возможность минимизировать этот риск. Новые синтаксические конструкции могут быть включены лишь в часть кода и будут разбираться лишь тогда когда соответствующая прагма находится в области видимости. Тем не менее использование префикса CORE::префикса позволяет использовать все новые ключевые слова Perl, независимо от использование директивы feature. Например:use feature qw(say switch); given ($foo) { when (1) { say "\$foo == 1" } when ([2,3]) { say "\$foo == 2 || \$foo == 3" } when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" } when ($_ > 100) { say "\$foo > 100" } default { say "None of the above" } } use feature ':5.10'; # загружает все feature доступные в perl 5.10 use v5.10; # неявно загружает :5.10 feature
илиuse feature "say"; say "test0";
CORE::say "test0";
no feature - отключает действие feature:
use feature 'say'; say "say is available here"; { no feature 'say'; print "But not here.\n"; } say "Yet it is here.";
use feature 'say' - включает использование Perl6 функции say.
Функция say аналогична print, но к выводу добавляет "\n".
Эта feature доступна с версии Perl 5.10.
use feature 'state' - сообщает компилятору о включении переменных состояния (state).
Для детального ознакомления изучаем Persistent Private Variables.
Эта feature доступна с версии Perl 5.10.
Пример с использованием анонимной функции:use feature 'state'; sub gimme_another { state $x; return ++$x }
use feature 'state'; sub create_counter { return sub { state $x; return ++$x } }
use feature 'unicode_strings' - сообщает компилятору использовать правила Unicode во всех строковых операциях, попадающих в сферу его действия feature. Это же относится и к регулярным выражениям. При этом внутреннее представление не изменяется, меняется лишь их интерпретация.
Рекомендуется изучить Perl Unicode Bug во избежание сюрпризов и недоразумений.
Эта функция доступна начиная с Perl 5.12; была почти полностью реализована в Perl 5.14; и продлена в Perl 5.16, чтобы перекрыть quotemeta.
use feature 'fc' - говорит компилятору включить поддержку функции fc.
fc EXPR - возвращает регистронезависимую версию EXPR.
Теперь можно писать такlc($this) eq lc($that) # Wrong! # или uc($this) eq uc($that) # Also wrong! # или $this =~ /^\Q$that\E\z/i # Right!
fc($this) eq fc($that)
Комплектное включение feature
Комплект Включенные особенности --------- ----------------- :default array_base :5.10 say state switch array_base :5.12 say state switch unicode_strings array_base :5.14 say state switch unicode_strings array_base :5.16 say state switch unicode_strings unicode_eval evalbytes current_sub fc :5.18 say state switch unicode_strings unicode_eval evalbytes current_sub fc :5.20 say state switch unicode_strings unicode_eval evalbytes current_sub fcВключение подверсии в feature не оказывает никакого эффекта. Например
use feature ":5.14.0"; # тоже, что и ":5.14" use feature ":5.14.1"; # тоже, что и ":5.14"
Неявная загрузка feature.
Вместо загрузки отдельных feature можно позволить Perl неявно загрузить всё самому.
Для "однострочников" можно вместо -e использовать -E.
В скриптах - указать минимально используемую версию Perl. То есть:
неявно сделает:use v5.10.0;
no feature ':all'; use feature ':5.10';
Немає коментарів:
Дописати коментар