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. - Нижняя граница диапазонного квантификатора теперь может быть опущена:
- Допускается наличие пробелов для заключённой в фигурные скобки части метасимволов: или
\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.
- bareword_filehandles
- Исправлена утечка памяти:
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
>>> Подробности