Po roce vývoje byla vydána uvolnění nové stabilní verze programovacího jazyka Perl — 5.44. Při přípravě nového vydání bylo změněno přibližně 270 tisíc řádků kódu (bez dokumentace a automaticky generovaného kódu — 110 tisíc), změny se týkaly 860 souborů, na vývoji se podílelo 71 vývojářů.
Verze 5.44 byla vydána podle schváleného plánu vývoje, který byl stanoven před třinácti lety a předpokládá vydávání nových stabilních verzí jednou ročně a opravného vydání každé tři měsíce. Přibližně za měsíc se plánuje vydání prvního opravného vydání Perl 5.44.1, ve kterém budou opraveny nejzávažnější chyby, které se objevily během implementace Perl 5.44.0. Společně s vydáním Perl 5.44 byla ukončena podpora verze 5.40, pro kterou mohou být aktualizace vydány v budoucnu pouze v případě, že budou nalezeny kritické problémy se zabezpečením. Zahájila se vývojová fáze experimentální verze 5.45, na jejímž základě bude v první polovině roku 2027 vytvořeno stabilní vydání Perl 5.46, pokud nebude přijato rozhodnutí přejít na číslování 7.x.
Klíčové změny:
- Byla přidána experimentální možnost použití pojmenovaných parametrů v signaturách funkcí, které definují seznam proměnných předávaných do funkce nikoli uvnitř těla funkce, ale při jejím vyhlášení. Nová možnost umožňuje předávat parametry v libovolném pořadí pomocí párů klíč/hodnota a syntakticky jako při přiřazování prvků do hashů:
- starý syntax: sub f { my ($x, $y) = @_; …} f(1, 2);
- signatury: sub f ($x, $y) { … } f(1, 2);
- signatury s pojmenovanými parametry: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- Byla přidána experimentální možnost použití aliasů (ukazatelů na ukazatele) v cyklech foreach s více proměnnými. Implementovaná funkce umožňuje vytvářet alias uvnitř cyklu foreach při současném získání několika hodnot v jedné iteraci cyklu. Například lze vytvořit alias pro prvek hash s polem při procházení najednou klíčů a hodnot hash: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "Pole $key obsahuje: @items"; } # Do verze 5.44 by bylo nutné provést deference: foreach my ( $key, $var ) ( %hash ) { say "Pole $key obsahuje: @$var"; } # Bez experimentálních možností refaliasing a declared_refs: foreach my $key (keys %hash) { say "Pole $key obsahuje: @{ $hash{$key}}"; }
- V regulárních výrazech realizováno byla přidána experimentální režim ‘enhanced_xx’, který umožňuje použití modifikátoru /xx s třídami symbolů v hranatých závorkách ([a-zA-Z]) pro jejich rozdělení na více řádků nebo nahrazení komentářů. Například podmínku if ($text =~ m/[a-zA-Z]/) lze sestavit takto: if ($text =~ m/[ a-z # malá písmena A-Z # velká písmena ]/xx) {
- V generátoru pseudo-náhodných čísel se pro získání entropie používá systémový volání getentropy() na systémech, které jej podporují (Linux, BSD, macOS). Na ostatních systémech se entropie získává čtením z zařízení /dev/urandom nebo pomocí hashe z času, identifikátoru procesu a hodnoty ukazatele.
- Byla přidána podpora specifikace Unicode 17.0.
- Bylo zajištěno přísné dodržování pravidel Unicode pro názvy identifikátorů a skupin regulárních výrazů, ve kterých je nyní zakázáno používat přibližně 160 Unicode symbolů, které dříve spadaly do třídy w. Například z akce třídy w, která zahrnovala všechna písmena, čísla a symbol podtržení, byly vyloučeny latinské písmena v kruzích, které připomínají skutečná písmena, ale nejsou jimi. Změna chování se dotýká pouze programů využívajících režim use utf8.
- Byly odstraněny zranitelnosti způsobené přetečením vyrovnávací paměti v funkcích Perl_study_chunk (CVE-2026-8376, projevující se v 32-bitových sestaveních) a S_measure_struct (CVE-2026-57432), a také přetečení 16-bitového počítadla v Regex enginu (CVE-2026-13221), což může vést k nesprávnému vyhodnocení regulárního výrazu.
- Použití operátoru goto k přechodu na pozici uvnitř cyklů a blokových konstrukcí je zakázáno. Tato možnost byla vyhlášena jako zastaralá v roce 2010.
- Byly provedeny optimalizace výkonu, které urychlily operace sčítání, odčítání a násobení celých čísel, zpracování podpisů funkcí a plnění hashů ze seznamů ve formátu klíč/hodnota s předem známými řetězcovými klíči během kompilace.
Zdroj: linux.org.ru
