Nach einem Jahr Entwicklung veröffentlicht wurde eine neue stabile Version der Programmiersprache Perl veröffentlicht — 5.44. Bei der Vorbereitung der neuen Version wurden etwa 270.000 Codezeilen geändert (ohne Dokumentation und automatisch generierten Code – 110.000), die Änderungen betrafen 860 Dateien, und 71 Entwickler waren an der Entwicklung beteiligt.
Die Version 5.44 wurde gemäß dem vor dreizehn Jahren festgelegten Entwicklungszeitplan veröffentlicht, der vorsieht, dass neue stabile Versionen jährlich und Fehlerkorrektur-Updates vierteljährlich erscheinen. Etwa einen Monat später ist die Veröffentlichung des ersten Fehlerkorrektur-Updates Perl 5.44.1 geplant, das die schwerwiegendsten Fehler beheben wird, die beim Einsatz von Perl 5.44.0 festgestellt wurden. Mit der Veröffentlichung von Perl 5.44 wird die Unterstützung für die Version 5.40 eingestellt, für die Updates in Zukunft nur im Falle von kritischen Sicherheitsproblemen veröffentlicht werden können. Der Entwicklungsprozess für die experimentelle Version 5.45 hat begonnen, auf deren Grundlage in der ersten Hälfte des Jahres 2027 eine stabile Version Perl 5.46 erstellt wird, solange keine Entscheidung getroffen wird auf die Nummerierung 7.x zu wechseln.
- Hinzugefügt Eine experimentelle Möglichkeit zur Verwendung von benannten Parametern in Signaturen Funktionen, die die Liste der in die Funktion übergebenen Variablen nicht im Funktionskörper, sondern bei deren Deklaration festlegen. Diese neue Funktionalität ermöglicht es, Parameter in beliebiger Reihenfolge unter Verwendung von Schlüssel/Wert-Paaren und einem Syntaxschema, das der Zuweisung von Elementen in Hashes entspricht, zu übergeben:
- alter Syntax: sub f { my ($x, $y) = @_; …} f(1, 2);
- Signaturen: sub f ($x, $y) { … } f(1, 2);
- Signaturen mit benannten Parametern: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- Добавлена экспериментальная возможность использования алиасов (указателей на указатели) в циклах foreach с несколькими переменными. Реализованная возможность позволяет создавать алиас в цикле foreach при единовременном извлечением сразу нескольких значений в одной итерации цикла. Например, можно сформировать алиас для элемента хэша c массивом при переборе разом ключей и значений хэша: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "The $key array contains: @items"; } # До версии 5.44 потребовалось бы выполнять разыменование: foreach my ( $key, $var ) ( %hash ) { say "The $key array contains: @$var"; } # Без экспериментальных возможностей refaliasing и declared_refs: foreach my $key (keys %hash) { say "The $key array contains: @{$hash{$key}}"; }
- В регулярных выражениях implementiert. экспериментальный режим ‘enhanced_xx’, позволяющий использовать модификатор /xx с классами символов в квадратных скобках ([a-zA-Z]) для их разделения на несколько строк или подстановки комментариев. Например, условие if ($text =~ m/[a-zA-Z]/){ можно оформить так: if ($text =~ m/[ a-z # строчные буквы A-Z # заглавные буквы ]/xx) {
- Im Generator für Pseudorandom-Zahlen wird der Systemaufruf getentropy() verwendet, um Entropie auf Systemen mit dessen Unterstützung (Linux, BSD, macOS) zu gewinnen. Auf anderen Systemen erfolgt die Entropiegewinnung durch das Lesen von /dev/urandom oder unter Verwendung eines Hashs aus der Zeit, der Prozess-ID und dem Wert des Zeigers.
- Unterstützung der Spezifikation hinzugefügt Unicode 17.0.
- Es wird strikte Einhaltung der Unicode-Regeln für die Namen von Identifikatoren und Gruppen von regulären Ausdrücken gewährleistet, wobei nun etwa 160 Unicode-Zeichen, die zuvor in die Klasse w fielen, nicht mehr verwendet werden dürfen. Beispielsweise wurde die latine Buchstaben in Kreisen, die echten Buchstaben ähneln, aber nicht sind, aus der w-Klasse, die alle Buchstaben, Zahlen und den Unterstrich umfasst, entfernt. Diese Änderung betrifft nur Programme, die den Modus use utf8 verwenden.
- Schwächen, die durch Pufferüberläufe in den Funktionen Perl_study_chunk (CVE-2026-8376, die sich in 32-Bit-Bauten manifestieren) und S_measure_struct (CVE-2026-57432), sowie ein Überlauf des 16-Bit-Zählers im Regex-Engine (CVE-2026-13221), was zu einer fehlerhaften Auslösung des regulären Ausdrucks führen kann.
- Die Verwendung des goto-Befehls an Positionen innerhalb von Schleifen und Blockstrukturen ist nicht mehr erlaubt. Diese Möglichkeit wurde 2010 als veraltet erklärt.
- Leistungsoptimierungen wurden durchgeführt, die die Vorgänge von Addition, Subtraktion und Multiplikation mit Ganzzahlen, die Verarbeitung von Funktionssignaturen sowie das Befüllen von Hashes aus Schlüssel/Wert-Listen mit zur Compile-Zeit bekannten String-Schlüsseln beschleunigen.
Quelle: linux.org.ru
