Po roku prac rozwojowych opublikowano wydanie nowej stabilnej wersji języka programowania Perl — 5.44. Przy przygotowaniu nowej wersji zmieniono około 270 tysięcy linii kodu (bez dokumentacji i automatycznie generowanego kodu — 110 tysięcy), zmiany dotyczyły 860 plików, w pracach wzięło udział 71 programistów.
Wersja 5.44 została wydana zgodnie z zatwierdzonym trzynaście lat temu ustalonym harmonogramem rozwoju, który przewiduje wydawanie nowych stabilnych wersji raz w roku i poprawek — co trzy miesiące. Za około miesiąc planowane jest wydanie pierwszej poprawki Perl 5.44.1, w której zostaną naprawione najistotniejsze błędy wykryte w trakcie wdrażania Perl 5.44.0. Równocześnie z wydaniem Perl 5.44 zakończono wsparcie dla wersji 5.40, dla której aktualizacje mogą być wydawane w przyszłości tylko w przypadku wykrycia krytycznych problemów z bezpieczeństwem. Rozpoczął się proces rozwoju eksperymentalnej wersji 5.45, na podstawie której w pierwszej połowie 2027 roku zostanie opracowana stabilna wersja Perl 5.46, jeśli nie zostanie podjęta decyzja o przejściu na numerację 7.x.
Kluczowe zmiany:
- Dodano eksperymentalna możliwość użycia nazwanych parametrów w sygnaturach funkcji, definiującej listę przekazywanych do funkcji zmiennych nie w ciele funkcji, a przy jej deklaracji. Nowa funkcjonalność pozwala na przekazywanie parametrów w dowolnej kolejności za pomocą par klucz/wartość i składni jak przy przypisywaniu elementów w haszach:
- stara składnia: sub f { my ($x, $y) = @_; …} f(1, 2);
- sygnatury: sub f ($x, $y) { … } f(1, 2);
- sygnatury z nazwanymi parametrami: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- Dodano eksperymentalną możliwość używania aliasów (wskaźników na wskaźniki) w pętlach foreach z wieloma zmiennymi. Zrealizowana funkcjonalność pozwala na tworzenie aliasów w pętli foreach przy jednoczesnym pobieraniu kilku wartości w jednej iteracji pętli. Na przykład, można utworzyć alias dla elementu hasha z tablicą podczas przetwarzania kluczy i wartości hasha w jednym przebiegu: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "Tablica $key zawiera: @items"; } # Przed wersją 5.44 należałoby przeprowadzić dereferencję: foreach my ( $key, $var ) ( %hash ) { say "Tablica $key zawiera: @$var"; } # Bez eksperymentalnych funkcji refaliasing i declared_refs: foreach my $key (keys %hash) { say "Tablica $key zawiera: @{$hash{$key}}"; }
- W wyrażeniach regularnych zrealizowano eksperymentalny tryb ‘enhanced_xx’, który pozwala używać modyfikatora /xx z klasami symboli w nawiasach kwadratowych ([a-zA-Z]) do ich podziału na kilka linii lub wstawiania komentarzy. Na przykład, warunek if ($text =~ m/[a-zA-Z]/){ można zapisać tak: if ($text =~ m/[ a-z # małe litery A-Z # wielkie litery ]/xx) {
- W generatorze liczb pseudolosowych dla uzyskania entropii zaangażowano wywołanie systemowe getentropy() w systemach, które je wspierają (Linux, BSD, macOS). W pozostałych systemach do uzyskania entropii odczytuje się z urządzenia /dev/urandom lub korzysta z hasha na podstawie czasu, identyfikatora procesu i wartości wskaźnika.
- Dodano wsparcie dla specyfikacji Unicode 17.0.
- Zagwarantowano ścisłe przestrzeganie zasad Unicode dla nazw identyfikatorów i grup wyrażeń regularnych, w których teraz zabronione jest używanie około 160 symboli Unicode, które wcześniej podlegały klasie w. Na przykład, z działania klasy w, obejmującego wszystkie litery, cyfry i znak podkreślenia, wykluczono litery łacińskie w okręgach, które przypominają prawdziwe litery, ale nimi nie są. Zmiana zachowania dotyczy tylko programów używających trybu use utf8.
- Usunięto luki, spowodowane przepełnieniami bufora w funkcjach Perl_study_chunk (CVE-2026-8376, manifestującą się w 32-bitowych wersjach) i S_measure_struct (CVE-2026-57432), a także przepełnienie 16-bitowego licznika w silniku Regex (CVE-2026-13221), co może prowadzić do nieprawidłowego działania wyrażenia regularnego.
- Nie jest dozwolone przechodzenie z wykorzystaniem operatora goto na pozycje wewnątrz pętli i konstrukcji blokowych. Możliwość ta została ogłoszona jako przestarzała w 2010 roku.
- Przeprowadzono optymalizacje wydajności, które przyspieszyły operacje dodawania, odejmowania i mnożenia liczb całkowitych, przetwarzanie sygnatur funkcji oraz wypełnianie hashy z list w formacie klucz/wartość z znanymi w czasie kompilacji kluczami tekstowymi.
Źródło: linux.org.ru
