28.11.2021

Perl 5.34.0

С момента выхода Perl 5.32.0 прошло около десяти месяцев. Если исключить документацию, генерируемые автоматически файлы и инструментарий для формирования самого релиза, было изменено 150,000 строк в 1,300 .pm, t, .c и .h файлах.

Выход версии 5.34.0 был омрачён рядом склок, приведших к уходу Sawyer X из сообщества. Это последний релиз, выпущенный данным pumpking’ом.

Несколько слов в память KENTNL (Kent Fredric)

Кент скончался в феврале 2021 года. Он поддерживал 178 CPAN-модулей, участвовал в разработке Gentoo Linux и самого Perl. Я также благодарен ему за исчерпывающие ответы на глупые вопросы, которые я задавал на заре моей карьеры Perl-разработчика. Земля пухом.

Новая функциональность

  • Добавлена экспериментальная поддержка try/catch.
    use feature 'try'; try { a_function(); } catch ($e) { warn "An error occurred: $e"; }
    

    Данную функциональность реализовал Paul «LeoNerd» Evans, который в последнее время частенько занимается доработкой интерпретатора. Свежее интервью с LeoNerd’ом можно прочитать здесь. Также есть серия интересных статей, призванных помочь желающим присоединиться к доработке Perl.

  • Нижняя граница диапазонного квантификатора теперь может быть опущена: qr/{,n}/.
  • Допускается наличие пробелов для заключённой в фигурные скобки части метасимволов: \x{ FFFC } или qr/a{ 5, 7 }/.
  • Добавлен префикс 0o для записи восьмеричных констант: 0o123_456.
  • В модуль feature добавлены две включённых по умолчанию настройки-ограничителя, которые вылились из ожесточённых дискуссий по поводу гипотетической 7‑й версии интерпретатора. Суть споров в предложении Sawyer X включить по умолчанию вещи, которые и так считаются стандартом в сообществе, но что неминуемо привело бы к необходимости переписывать написанные в плохом стиле скрипты.
    • bareword_filehandles
      no feature qw( bareword_filehandles ); open( FP, "<", "./x" ); # Bareword filehandle "FP" not allowed under 'no feature "bareword_filehandles"' at bareword.pl line 3.
      # Execution of bareword.pl aborted due to compilation errors.

      Разумеется, данная прагма не влияет на поведение следующих идентификаторов без разыменовывающего префикса (т.н. «пустых слов»): STDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUT и _.

    • multidimensional
      no feature qw( multidimensional ); my %h = (); $h{1,2}; # Multidimensional hash lookup is disabled at multi.pl line 5, near "2}"
      # Execution of multi.pl aborted due to compilation errors.
      

  • Исправлена утечка памяти:
    use Devel::Leak;
    my $count = shift @ARGV; $string = "STRING 1"; my $handle;
    Devel::Leak::NoteSV($handle);
    for (1 .. $count) { $x = test_leak($string, "string 1"); $x = test_leak($string, "string 2");
    } Devel::Leak::CheckSV($handle);
    exit; sub test_leak { local ($string, $match) = @_; $match =~ s/\s/\\s/g; # This Leaks return ($string =~ /$match/i);
    } 

  • Расширен набор сообщений об ошибках и предупреждений.

Изменения в документации

  • Новые разделы
    • perldocstyle — руководство по работе с документацией, идущей в комплекте с Perl.
    • perlgov — документ, описывающий новую модель управления разработкой Perl’а. В perlpolicy также было произведено заметное количество правок для отражения случившихся изменений в управлении проектом.
  • Правки существующей документации
    • perlapi, perlguts, perlxs и perlxstut теперь отдают предпочтение SvPVbyte вместо SvPV.
    • Упоминания Pumpking’а заменены на «Руководящий комитет».
    • Документация split() упрощена путём удаления join() из примеров.
    • perlapi — продолжается работа по улучшению уже изложенной в разделе информации и документированию упущенных элементов API.
    • perlcommunity — s{irc.freenode.org/#perl.tw}{chat.freenode.org/#perl.tw}

      Данное изменение уже неактуально, в апстрим версии freenode заменена на libera.
    • perlfunc:
      • caller() — добавлено упоминание факта, что данная функция игнорирует блоки try{}.
      • my() и state() — читатель явно предупреждается, что лексические переменные не должны переопределяться в том же блоке или выражении, где они объявлены.
      • localtime() — описание было улучшено и добавлено упоминание, что результат всегда возвращается на английском языке.
      • sleep() — более подробно объясняется, как данная функция ведёт себя с нулевым или отрицательным параметром.
      • msgsnd()
  • perlpacktut — исправлены имена переменных в примерах.
  • Также изменены разделы: perlgit, perlguts, perlop, perlsyn, perlunifaq.

>>> Подробности

Источник.