Spec-Zone.ru › Perl 5.28

функция

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • СИНОПСИС
  • ОПИСАНИЕ
    • Лексическое воздействие
    • отсутствие функции
  • ДОСТУПНЫЕ ФУНКЦИИ
    • Функция 'say'
    • Функция 'state'
    • Функция 'switch'
    • Функция 'unicode_strings'
    • Функции 'unicode_eval' и 'evalbytes'
    • Функция 'current_sub'
    • Функция 'array_base'
    • Функция 'fc'
    • Функция 'lexical_subs'
    • Функции 'postderef' и 'postderef_qq'
    • Функция 'signatures'
    • Функция 'refaliasing'
    • Функция 'bitwise'
    • Функция 'declared_refs'
  • ПАКЕТЫ ФУНКЦИЙ
  • НЕЯВНАЯ ЗАГРУЗКА

НАЗВАНИЕ

функция - Perl-pragma для активации новых функций

СИНОПСИС

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'; # loads all features available in perl 5.10

use v5.10;           # implicitly loads :5.10 feature bundle

ОПИСАНИЕ

Обычно невозможно добавить новый синтаксис в Perl, не сломав некоторые существующие программы. Данный pragma предоставляет способ минимизировать эту опасность. Новые синтаксические конструкции или новые семантические значения старых конструкций могут быть активированы с помощью use feature 'foo', и будут обработаны только при наличии соответствующего pragma функции. (Тем не менее, префикс CORE:: предоставляет доступ ко всем ключевым словам Perl независимо от этого pragmas).

Лексическое воздействие

Как и другие pragmas (use strict, например), функции имеют лексическое воздействие. use feature qw(foo) будет доступна только с этого момента до конца содержащего блока.

{
    use feature 'say';
    say "say is available here";
}
print "But not here.\n";

no feature

Функции также могут быть отключены с помощью no feature "foo". Это также имеет лексическое воздействие.

use feature 'say';
say "say is available here";
{
    no feature 'say';
    print "But not here.\n";
}
say "Yet it is here.";

no feature без указанных функций сбросит их на значения по умолчанию. Для отключения всех функций (необычный запрос!) используйте no feature ':all'.

ДОСТУПНЫЕ ФУНКЦИИ

Функция 'say'

use feature 'say' сообщает компилятору активировать функцию стиля Perl 6 say.

Для получения подробной информации см. "say" в perlfunc.

Эта функция доступна начиная с Perl 5.10.

Функция 'state'

use feature 'state' сообщает компилятору активировать переменные state.

Для получения подробной информации см. "Постоянные частные переменные" в perlsub.

Эта функция доступна начиная с Perl 5.10.

Функция 'switch'

ПРЕДУПРЕЖДЕНИЕ: Поскольку оператор умного соответствия является экспериментальным, Perl выведет предупреждение при использовании этой функции, если предупреждение не было отключено явно:

no warnings "experimental::smartmatch";

use feature 'switch' сообщает компилятору активировать конструкцию Perl 6 given/when.

Для получения подробной информации см. "Операторы switch" в perlsyn.

Эта функция доступна начиная с Perl 5.10.

Функция 'unicode_strings'

use feature 'unicode_strings' сообщает компилятору использовать правила Юникода во всех операциях со строками, выполняемых в пределах его области действия (если они также не находятся в области действия use locale или use bytes). То же самое относится ко всем регулярным выражениям, скомпилированным в области действия, даже если они выполняются за её пределами. Это не изменяет внутреннее представление строк, а только то, как они интерпретируются.

no feature 'unicode_strings' сообщает компилятору использовать традиционные правила Perl, в которых используются правила нативной кодировки, если Perl явно не определил необходимость использования Юникода. Это может привести к некоторым неожиданностям, когда поведение внезапно меняется. (См. "Ошибка Юникода" в perlunicode для получения подробной информации.) По этой причине, если вы потенциально используете Юникод в своей программе, под-pragma use feature 'unicode_strings' настоятельно рекомендуется.

Эта функция доступна начиная с Perl 5.12; почти полностью реализована в Perl 5.14; расширена в Perl 5.16, чтобы охватить quotemeta; ещё раз расширена в Perl 5.26 для охвата оператор диапазона; и снова расширена в Perl 5.28 для охвата разделения по специальным пробелам.

Функции 'unicode_eval' и 'evalbytes'

Вместе эти две функции предназначены для замены устаревшей функции строковой eval, которая ведёт себя проблематично в некоторых случаях. Они доступны начиная с Perl 5.16 и включены по умолчанию при объявлении use 5.16 или выше.

unicode_eval изменяет поведение обычной строковой eval, чтобы обеспечить более согласованную работу, особенно в мире Юникода. Некоторые (неправильные) действия не могли быть изменены без нарушения того, что на них полагаются, поэтому функция может быть включена и отключена. Подробности см. в "В разделе "функции unicode_eval" в perlfunc.

evalbytes похожа на строковую eval, но работает со потоком байтов, который не закодирован в UTF-8. Подробности см. в "evalbytes EXPR" в perlfunc. Без объявления use feature 'evalbytes' или use v5.16 (или выше) в текущей области видимости, к нему можно получить доступ, написав вместо этого CORE::evalbytes.

Функция 'current_sub'

Эта функция предоставляет маркер __SUB__, который возвращает ссылку на текущую подпрограмму или undef вне подпрограммы.

Эта функция доступна начиная с Perl 5.16.

Функция 'array_base'

Эта функция поддерживает устаревшую переменную $[. См. "$[" в perlvar и arybase. Она включена по умолчанию, но отключена в use v5.16 (см. "НЕЯВНАЯ ЗАГРУЗКА" ниже).

Эта функция доступна под этим именем начиная с Perl 5.16. В предыдущих версиях она просто постоянно была включена, и данный pragma ничего не знал о ней.

Функция 'fc'

use feature 'fc' сообщает компилятору активировать функцию fc, которая реализует сведение Юникод к нижнему регистру.

Для получения подробной информации см. "fc" в perlfunc.

Эта функция доступна в Perl 5.16 и более поздних версиях.

Функция 'lexical_subs'

В версиях Perl до 5.26 эта функция активировала объявление подпрограмм с помощью синтаксиса my sub foo, state sub foo и our sub foo. Для получения подробной информации см. "Лексические подпрограммы" в perlsub.

Эта функция доступна с Perl 5.18. От Perl 5.18 до 5.24 она считалась экспериментальной, и Perl выводил предупреждение при её использовании, за исключением случаев явного отключения:

no warnings "experimental::lexical_subs";

Начиная с Perl 5.26, использование этой функции больше не вызывает предупреждения, хотя категория предупреждений experimental::lexical_subs всё ещё существует (для совместимости с кодом, который её отключает). Кроме того, этот синтаксис не только перестал быть экспериментальным, но и включен во все коды Perl независимо от того, какие объявления функций присутствуют в области действия.

Функции 'postderef' и 'postderef_qq'

Функция 'postderef_qq' расширяет применимость синтаксиса постфиксной деференции постфиксной деференции, так что постфиксная деференция массивов и скаляров доступна в интерполяциях двойных кавычек. Например, она делает следующие два утверждения эквивалентными:

my $s = "[@{ $h->{a} }]";
my $s = "[$h->{a}->@*]";

Эта функция доступна начиная с Perl 5.20. В Perl 5.20 и 5.22 она считалась экспериментальной, и Perl выводил предупреждение при её использовании, за исключением случаев явного отключения:

no warnings "experimental::postderef";

Начиная с Perl 5.24, использование этой функции больше не вызывает предупреждение, хотя категория предупреждений experimental::postderef всё ещё существует (для совместимости с кодом, который её отключает).

Функция 'postderef' использовалась в Perl 5.20 и 5.22 для активации синтаксиса постфиксной деференции за пределами интерполяций двойных кавычек. В этих версиях её использование вызывало предупреждение experimental::postderef аналогично функции 'postderef_qq'. Начиная с Perl 5.24, этот синтаксис не только перестал быть экспериментальным, но и включён во все коды Perl независимо от того, какие объявления функций присутствуют в области действия.

Функция 'signatures'

ПРЕДУПРЕЖДЕНИЕ: Эта функция всё ещё является экспериментальной, и её реализация может измениться в будущих версиях Perl. По этой причине Perl выведет предупреждение при её использовании, если предупреждение не было отключено явно:

no warnings "experimental::signatures";

Это включает распаковку аргументов подпрограммы в лексические переменные с помощью синтаксиса, такого как

sub foo ($left, $right) {
    return $left + $right;
}

Для получения подробной информации см. "Функции" в perlsub.

Эта функция доступна начиная с Perl 5.20.

Функция 'refaliasing'

ПРЕДУПРЕЖДЕНИЕ: Эта функция всё ещё является экспериментальной, и её реализация может измениться в будущих версиях Perl. По этой причине Perl выведет предупреждение при её использовании, если предупреждение не было отключено явно:

no warnings "experimental::refaliasing";

Это включает алиасинг путём присваивания ссылкам:

\$a = \$b; # $a and $b now point to the same scalar
\@a = \@b; #                     to the same array
\%a = \%b;
\&a = \&b;
foreach \%hash (@array_of_hash_refs) {
    ...
}

Для получения подробной информации см. "Присваивание ссылкам" в perlref.

Эта функция доступна начиная с Perl 5.22.

Функция 'bitwise'

Это позволяет четырём стандартным побитовым операторам (& | ^ ~) обрабатывать свои операнды последовательно как числа, и вводит четыре новых оператора с точкой (&. |. ^. ~.), которые обрабатывают свои операнды последовательно как строки. То же самое относится к вариантам присваивания (&= |= ^= &.= |.= ^.=).

Подробности см. в разделе "Bitwise String Operators" в perlop.

Эта функция доступна начиная с Perl 5.22. Начиная с Perl 5.28, use v5.28 включит функцию. До версии 5.28 она всё ещё была экспериментальной и генерировала предупреждение в категории "experimental::bitwise".

Функция 'declared_refs'

ПРЕДУПРЕЖДЕНИЕ: Эта функция всё ещё находится на стадии эксперимента и её реализация может измениться в будущих версиях Perl. По этой причине Perl будет выводить предупреждение при использовании этой функции, если вы явно не отключили предупреждение:

no warnings "experimental::declared_refs";

Это позволяет объявить ссылку на переменную с помощью my, state, our our или локализовать с помощью local. Она предназначена в основном для совместного использования с функцией "refaliasing". Примеры см. в разделе "Declaring a Reference to a Variable" в perlref.

Эта функция доступна начиная с Perl 5.26.

ПАКЕТЫ ФУНКЦИЙ

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

use feature ":5.10";

Доступны следующие пакеты функций:

bundle    features included
--------- -----------------
: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

:5.22     say state switch unicode_strings
          unicode_eval evalbytes current_sub fc

:5.24     say state switch unicode_strings
          unicode_eval evalbytes current_sub fc
          postderef_qq

:5.26     say state switch unicode_strings
          unicode_eval evalbytes current_sub fc
          postderef_qq

:5.28     say state switch unicode_strings
          unicode_eval evalbytes current_sub fc
          postderef_qq bitwise

Пакет :default представляет набор функций, который включен до любой use feature или no feature декларации.

Указание подверсий, таких как 0 в 5.14.0 в пакетах функций, не имеет эффекта. Пакеты функций гарантированно остаются одинаковыми для всех подвариантов.

use feature ":5.14.0";    # same as ":5.14"
use feature ":5.14.1";    # same as ":5.14"

НЕЯВНАЯ ЗАГРУЗКА

Вместо загрузки пакетов функций по имени, проще позволить Perl выполнить неявную загрузку пакета функций за вас.

Существует два способа неявной загрузки прагмы feature:

  • Используя переключатель -E в командной строке Perl вместо -e. Это включит пакет функций для этой версии Perl в главном модуле компиляции (то есть, в однострочном фрагменте кода, который следует за -E).

  • Явно требуя минимальную версию Perl для вашей программы с помощью конструкции use VERSION. То есть,

    use v5.10.0;

    выполнит неявную

    no feature ':all';
    use feature ':5.10';

    и так далее. Обратите внимание, как конечная подверсия автоматически удаляется из версии.

    Но чтобы избежать предупреждений о переносимости (см. "use" в perlfunc), вы можете предпочесть:

    use 5.010;

    с тем же эффектом.

    Если требуемая версия старше Perl 5.10, вместо этого автоматически загружается пакет функций ":default".

    В отличие от use feature ":5.12", указание use v5.12 (или любой более поздней версии) также выполняет эквивалент use strict; см. "use" в perlfunc для получения дополнительной информации.

© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.28.3/feature

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API