С момента выхода 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()
- perlapi, perlguts, perlxs и perlxstut теперь отдают предпочтение
- perlpacktut — исправлены имена переменных в примерах.
- Также изменены разделы: perlgit, perlguts, perlop, perlsyn, perlunifaq.
>>> Подробности