Debian Unstable был обновлен до Perl 5.40.0, что принесло ряд новых функций, обновлений безопасности и исправлений ошибок. Разработчик Debian Нико Тини объявил о переходе в списке рассылки Debian, отметив, что пользователям следует ожидать, что в sid (кодовое название Debian Unstable) в течение нескольких дней будет доступна функция удаления, пока не будут завершены необходимые перестройки.
Новые пакеты Perl сначала появятся в нестабильной ветке Debian. Оттуда они попадут в тестовую ветку и, вероятно, будут включены в следующий стабильный выпуск Debian, возможно, в следующем году.
Обновление Debian Unstable до Perl 5.40.0 — заметное достижение. Оно вводит новые языковые функции, повышает безопасность и исправляет множество ошибок. Давайте обсудим некоторые новые функции, улучшения и заметные изменения в Perl 5.40.
Новые функции в Perl 5.40.0
Perl 5.40.0 — это основная версия с несколькими улучшениями, в том числе:
- Ключевое слово
class
: это новое ключевое слово позволяет разработчикам писать более современный и объектно-ориентированный код на Perl. Внутри метода,ADJUST
блока или выражения инициализатора поля ключевое слово__CLASS__
возвращает имя класса текущего экземпляра объекта. Это упрощает диспетчеризацию методов, особенно в конструкторах, где доступ к$self
запрещён. - Пробел в параметре командной строки
-M
: Perl теперь допускает пробел между параметром-M
и последующим именем модуля, что соответствует поведению параметра-I
- Логический оператор XOR (
^^
): Введён новый логический оператор XOR (^^
), дополняющий набор логических и побитовых операторов. - Стабилизация
try/catch
и многозначнойfor
итерации: функции, представленные в предыдущих версиях,try/catch
для обработки исключений и итерации по нескольким значениям с помощьюfor
, теперь считаются стабильными и больше не вызывают предупреждений. - Стабилизация модуля
builtin
: Модульbuiltin
, представленный в Perl 5.36.0, теперь считается стабильным. Однако некоторые функции в этом модуле остаются экспериментальными. use v5.40
Пакет функций: при использованииuse v5.40;
(или более поздней версии) импортируется соответствующий пакет функций, включая недавно стабилизированную функциюtry
. Кроме того, импортируется соответствующий пакетbuiltin
.
Улучшения безопасности
В этом выпуске устранены две заметные уязвимости в системе безопасности:
- CVE-2023-47038: эта уязвимость связана с потенциальным переполнением буфера с помощью специального регулярного выражения. Она была устранена в версиях с 5.30.0 по 5.38.0.
- CVE-2023-47039: устранена уязвимость, связанная с перехватом двоичных файлов в Perl для Windows. Эта уязвимость возникла из-за того, что Perl использует системный путь для поиска
cmd.exe
, что делает его уязвимым для эксплуатации путём размещения вредоносногоcmd.exe
в каталоге со слабыми разрешениями.
Заметные изменения
Обновление также включает некоторые несовместимые изменения:
reset EXPR
поведение:reset EXPR
теперь вызывает “set-magic” для скаляров, что потенциально приводит к распространению изменений на внутренние состояния или запуску исключений.- Вызов метода импорта неопределенного пакета: Вызов
import
orunimport
для неопределенного класса с аргументом теперь генерирует предупреждение, помогающее обнаружить опечатки и потенциальное неправильное использование. - Запрет косвенных объектов с помощью
return
: Операторreturn
больше не допускает косвенных объектов, устраняя источник путаницы. - Ограничение на использование ключевых слов класса в вызовах методов: ключевые слова класса больше не интерпретируются как дескрипторы файлов в конкретных вызовах методов при условии
no feature "bareword_filehandles"
.
Обновления модулей
Были обновлены несколько основных модулей, в том числе:
- Archive::Tar обновлен с версии 2.40 до версии 3.02_001.
- Term::Table добавлен в ядро (версия 0.018).
- Test2::Suite добавлен в ядро (версия 0.000162) и предоставляет инструменты для комплексного модульного тестирования.
builtin
Модуль: добавлена функцияload_module()
.
Различные другие модули получили обновления, включая, но не ограничиваясь, bytes
, Compress::Raw::Bzip2
, Compress::Raw::Zlib
Data::Dumper
, DB_File
Devel::Peek
Devel::PPPort
, diagnostics
и многие другие.
Полный список изменений задокументирован в дельта-документе Perl, который содержит подробную информацию для разработчиков. Если вы столкнулись с проблемами, которые, по вашему мнению, могут быть ошибками, пожалуйста, следуйте инструкциям по отправке сообщений на https://github.com/Perl/perl5/issues.
Ресурс: