HTML Diff
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 @_ &gt;= 2; die "Слишком мало аргументов для корутины" unless @_ &lt;= 2; my($left, $right) = @_; return $left + $right; }<p>С помощью сигнатур его можно переписать следующим образом:</p>
5 sub foo { die "Слишком много аргументов для корутины" unless @_ &gt;= 2; die "Слишком мало аргументов для корутины" unless @_ &lt;= 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 в качестве парных разделителей. Например, вместо &lt; &gt;, (), { } и [] можно использовать символы " " и “ ".</p>
18 try { attempt(); print "Удача\n"; } catch ($e) { print "Неудача\n"; } finally { print "Это выполнится в любом случае\n"; }<p><strong>Новые символы для разделителей</strong>. В операторах экранирования текста - например, qr -<a>добавили</a>возможность использовать символы не только формата ASCII в качестве парных разделителей. Например, вместо &lt; &gt;, (), { } и [] можно использовать символы " " и “ ".</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&amp; 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&amp; T UWIN, DOS/DJGPP и Novell NetWare.</p>
22 <p>Подробнее обо всех изменениях можно прочитать на <a>сайте Perl</a>.</p>
22 <p>Подробнее обо всех изменениях можно прочитать на <a>сайте Perl</a>.</p>
23  
23