0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p>На сайте Perl 28 мая<a>вышел</a>пресс-релиз для новой версии языка -<a>5.36</a>. Из нововведений - поддержка сигнатур функций, инфиксный оператор isa, обработка предупреждений, Unicode 14.0, стабильный regex и многое другое. Одновременно с этим разработчики Perl прекратили поддержку ветки 5.32 и <a>создали</a>экспериментальную ветку - 5.37, на основе которой в мае или июне 2023 года выйдет стабильный релиз Perl 5.38.</p>
1
<p>На сайте Perl 28 мая<a>вышел</a>пресс-релиз для новой версии языка -<a>5.36</a>. Из нововведений - поддержка сигнатур функций, инфиксный оператор isa, обработка предупреждений, Unicode 14.0, стабильный regex и многое другое. Одновременно с этим разработчики Perl прекратили поддержку ветки 5.32 и <a>создали</a>экспериментальную ветку - 5.37, на основе которой в мае или июне 2023 года выйдет стабильный релиз Perl 5.38.</p>
2
<p>Все новые функции можно использовать, указав прагму "use v5.36". Рассмотрим основные изменения.</p>
2
<p>Все новые функции можно использовать, указав прагму "use v5.36". Рассмотрим основные изменения.</p>
3
<p><strong>Сигнатуры функций.</strong>Разработчики<a>добавили</a>сигнатуры функций, которые позволяют явно определять перечень переменных и автоматизировать проверку и присвоение значений из массива входящих параметров.</p>
3
<p><strong>Сигнатуры функций.</strong>Разработчики<a>добавили</a>сигнатуры функций, которые позволяют явно определять перечень переменных и автоматизировать проверку и присвоение значений из массива входящих параметров.</p>
4
<p>Например, у нас есть код ниже:</p>
4
<p>Например, у нас есть код ниже:</p>
5
sub foo { die "Слишком много аргументов для корутины" unless @_ >= 2; die "Слишком мало аргументов для корутины" unless @_ <= 2; my($left, $right) = @_; return $left + $right; }<p>С помощью сигнатур его можно переписать следующим образом:</p>
5
sub foo { die "Слишком много аргументов для корутины" unless @_ >= 2; die "Слишком мало аргументов для корутины" unless @_ <= 2; my($left, $right) = @_; return $left + $right; }<p>С помощью сигнатур его можно переписать следующим образом:</p>
6
sub foo ($left, $right) { return $left + $right; }<p>Сигнатуры также добавляют возможность указывать необязательные аргументы и задавать им значения по умолчанию. А ещё при вызове функций с числом аргументов, отличных от заданных в сигнатуре, интерпретатор выведет ошибку.</p>
6
sub foo ($left, $right) { return $left + $right; }<p>Сигнатуры также добавляют возможность указывать необязательные аргументы и задавать им значения по умолчанию. А ещё при вызове функций с числом аргументов, отличных от заданных в сигнатуре, интерпретатор выведет ошибку.</p>
7
<p>В функциях, объявленных как сигнатуры, присвоение через "@_" теперь объявлено как экспериментальное и будет приводить к выводу предупреждения.</p>
7
<p>В функциях, объявленных как сигнатуры, присвоение через "@_" теперь объявлено как экспериментальное и будет приводить к выводу предупреждения.</p>
8
<p><strong>Оператор isa.</strong>Разработчики доработали инфиксный оператор isa, который нужен для проверки объекта на экземпляр класса или класса, производного от него.</p>
8
<p><strong>Оператор isa.</strong>Разработчики доработали инфиксный оператор isa, который нужен для проверки объекта на экземпляр класса или класса, производного от него.</p>
9
if( $obj isa Package::Name ) { ... }<p><strong>Builtin-функции</strong>. Интерпретатор Perl теперь имеет набор встроенных функций, который документирован в модуле<a>builtin</a>. Указываются они через префикс "builtin::", а для сокращённого использования можно указать прагму "use" - например, "use builtin ‘reftype’".</p>
9
if( $obj isa Package::Name ) { ... }<p><strong>Builtin-функции</strong>. Интерпретатор Perl теперь имеет набор встроенных функций, который документирован в модуле<a>builtin</a>. Указываются они через префикс "builtin::", а для сокращённого использования можно указать прагму "use" - например, "use builtin ‘reftype’".</p>
10
<p>Список некоторых встроенных функций:</p>
10
<p>Список некоторых встроенных функций:</p>
11
<ul><li>builtin::trim - чистка граничных пробелов;</li>
11
<ul><li>builtin::trim - чистка граничных пробелов;</li>
12
<li>builtin::indexed - нумерация элементов списка;</li>
12
<li>builtin::indexed - нумерация элементов списка;</li>
13
<li>builtin::true, builtin::false - булевые выражения нуля и единицы;</li>
13
<li>builtin::true, builtin::false - булевые выражения нуля и единицы;</li>
14
<li>builtin::is_bool - проверка на булевую переменную;</li>
14
<li>builtin::is_bool - проверка на булевую переменную;</li>
15
<li>builtin::ceil, builtin::floor - округление вниз, вверх.</li>
15
<li>builtin::ceil, builtin::floor - округление вниз, вверх.</li>
16
</ul><p><strong>Отложенные блоки.</strong>Разработчики<a>добавили</a>defer-блоки, которые позволяют запускать фрагменты кода после выхода из поля видимости. Если блок defer встретился во время выполнения, он пропускается и вызывается только на стадии выхода. Например:</p>
16
</ul><p><strong>Отложенные блоки.</strong>Разработчики<a>добавили</a>defer-блоки, которые позволяют запускать фрагменты кода после выхода из поля видимости. Если блок defer встретился во время выполнения, он пропускается и вызывается только на стадии выхода. Например:</p>
17
use feature 'defer'; { say "Первый"; defer { say "Последний"; } say "Второй"; }<p><strong>Ключевое слово finally</strong>. Для обработчика исключений try/catch<a>добавили</a>поддержку третьего ключевого слова - finally, которое выполняет блок с кодом в самом конце конструкции try/catch, даже если обработчик будет прерван исключением или оператором перехода.</p>
17
use feature 'defer'; { say "Первый"; defer { say "Последний"; } say "Второй"; }<p><strong>Ключевое слово finally</strong>. Для обработчика исключений try/catch<a>добавили</a>поддержку третьего ключевого слова - finally, которое выполняет блок с кодом в самом конце конструкции try/catch, даже если обработчик будет прерван исключением или оператором перехода.</p>
18
try { attempt(); print "Удача\n"; } catch ($e) { print "Неудача\n"; } finally { print "Это выполнится в любом случае\n"; }<p><strong>Новые символы для разделителей</strong>. В операторах экранирования текста - например, qr -<a>добавили</a>возможность использовать символы не только формата ASCII в качестве парных разделителей. Например, вместо < >, (), { } и [] можно использовать символы " " и “ ".</p>
18
try { attempt(); print "Удача\n"; } catch ($e) { print "Неудача\n"; } finally { print "Это выполнится в любом случае\n"; }<p><strong>Новые символы для разделителей</strong>. В операторах экранирования текста - например, qr -<a>добавили</a>возможность использовать символы не только формата ASCII в качестве парных разделителей. Например, вместо < >, (), { } и [] можно использовать символы " " и “ ".</p>
19
<p><strong>Новый флаг -g</strong>. Он <a>позволяет</a>включать режим загрузки файла целиком, а не построчно. Его действие аналогично "-0777".</p>
19
<p><strong>Новый флаг -g</strong>. Он <a>позволяет</a>включать режим загрузки файла целиком, а не построчно. Его действие аналогично "-0777".</p>
20
<p><strong>Оптимизация производительности</strong>. Разработчики добавили возможность хранить ключи хэшей большего размера - без использования разделяемых таблиц строк. Ещё значительно повышена производительность создания новых скалярных значений. Например, следующий код теперь выполняется на 30% быстрее:</p>
20
<p><strong>Оптимизация производительности</strong>. Разработчики добавили возможность хранить ключи хэшей большего размера - без использования разделяемых таблиц строк. Ещё значительно повышена производительность создания новых скалярных значений. Например, следующий код теперь выполняется на 30% быстрее:</p>
21
$str = "A" x 64; for (0..1_000_000) { @svs = split //, $str }<p><strong>Что ещё?</strong>При указании прагмы "use v5.36" теперь по умолчанию включён режим предупреждений - "<a>use warnings</a>", также<a>добавили</a>поддержку Unicode 14.0, отключили поддержку экспериментального механизма ветвления - "<a>feature switch</a>", запретили вызов функции sort без аргументов, а также прекратили поддержку платформ AT& T UWIN, DOS/DJGPP и Novell NetWare.</p>
21
$str = "A" x 64; for (0..1_000_000) { @svs = split //, $str }<p><strong>Что ещё?</strong>При указании прагмы "use v5.36" теперь по умолчанию включён режим предупреждений - "<a>use warnings</a>", также<a>добавили</a>поддержку Unicode 14.0, отключили поддержку экспериментального механизма ветвления - "<a>feature switch</a>", запретили вызов функции sort без аргументов, а также прекратили поддержку платформ AT& T UWIN, DOS/DJGPP и Novell NetWare.</p>
22
<p>Подробнее обо всех изменениях можно прочитать на <a>сайте Perl</a>.</p>
22
<p>Подробнее обо всех изменениях можно прочитать на <a>сайте Perl</a>.</p>
23
23