Após um ano de desenvolvimento foi publicado lançamento de um novo ramo estável da linguagem de programação Perl — 5.44. Ao preparar um novo lançamento, cerca de 270 mil linhas de código foram alteradas (sem documentação e código gerado automaticamente — 110 mil), as mudanças abrangeram 860 arquivos, e 71 desenvolvedores participaram do desenvolvimento.
O ramo 5.44 foi lançado de acordo com o cronograma fixo aprovado há treze anos, que prevê o lançamento de novos ramos estáveis uma vez por ano e correções — a cada três meses. Aproximadamente um mês depois, está previsto o lançamento da primeira versão de correção Perl 5.44.1, que corrigirá os erros mais significativos identificados durante a implementação do Perl 5.44.0. Com o lançamento do Perl 5.44, o suporte para o ramo 5.40 foi encerrado, e atualizações poderão ser lançadas no futuro apenas em caso de problemas críticos de segurança. Começou o processo de desenvolvimento do ramo experimental 5.45, a partir do qual será formado um lançamento estável do Perl 5.46 na primeira metade de 2027, a menos que seja tomada a decisão de mudar para a numeração 7.x.
Principais mudanças:
- Adicionada uma nova possibilidade experimental de uso de parâmetros nomeados em assinaturas de funções, que definem a lista de variáveis passadas à função não no corpo da função, mas na sua declaração. Esse novo recurso permite passar parâmetros não em uma ordem estrita, mas em uma ordem arbitrária usando pares chave/valor e uma sintaxe semelhante à de atribuição de elementos em hashes:
- sintaxe antiga: sub f { my ($x, $y) = @_; …} f(1, 2);
- assinaturas: sub f ($x, $y) { … } f(1, 2);
- assinaturas com parâmetros nomeados: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- Foi adicionada uma funcionalidade experimental que permite o uso de aliases (ponteiros para ponteiros) em loops foreach com múltiplas variáveis. A funcionalidade implementada permite criar um alias dentro do loop foreach enquanto se extrai simultaneamente vários valores em uma única iteração do loop. Por exemplo, é possível formar um alias para um elemento de hash com um array ao percorrer chaves e valores do hash: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "O array $key contém: @items"; } # Antes da versão 5.44, seria necessário realizar a desreferenciação: foreach my ( $key, $var ) ( %hash ) { say "O array $key contém: @$var"; } # Sem as funcionalidades experimentais refaliasing e declared_refs: foreach my $key (keys %hash) { say "O array $key contém: @{$hash{$key}}"; }
- Em expressões regulares implementado o modo experimental ‘enhanced_xx’, que permite usar o modificador /xx com classes de caracteres entre colchetes ([a-zA-Z]) para dividi-las em várias linhas ou substituir por comentários. Por exemplo, a condição if ($text =~ m/[a-zA-Z]/) pode ser formatada assim: if ($text =~ m/[ a-z # letras minúsculas A-Z # letras maiúsculas ]/xx) {
- No gerador de números pseudoaleatórios, a chamada de sistema getentropy() é utilizada para obter entropia em sistemas que a suportam (Linux, BSD, macOS). Em outros sistemas, a entropia é obtida lendo do dispositivo /dev/urandom ou utilizando um hash a partir do tempo, identificador do processo e valor do ponteiro.
- Suporte adicionado para a especificação Unicode 17.0.
- Foi garantido o cumprimento rigoroso das regras do Unicode para nomes de identificadores e grupos de expressões regulares, nos quais agora é proibido usar cerca de 160 caracteres Unicode, que anteriormente se encaixavam na classe w. Por exemplo, as letras latinas em círculos, que se assemelham a letras reais, mas não são, foram excluídas do conjunto de caracteres da classe w, que abrange todas as letras, dígitos e o caractere de sublinhado. Essa mudança de comportamento afeta apenas programas que utilizam o modo use utf8.
- Eliminadas as vulnerabilidades causadas por estouros de buffer nas funções Perl_study_chunk (CVE-2026-8376, que se manifestam em compilações de 32 bits) e S_measure_struct (CVE-2026-57432), assim como o estouro de um contador de 16 bits no motor de Regex (CVE-2026-13221), o que pode levar a falsos positivos em expressões regulares.
- É proibido o uso do operador goto para transições dentro de laços e estruturas de bloco. Esta possibilidade foi considerada obsoleta em 2010.
- Foram realizadas otimizações de desempenho que aceleraram as operações de adição, subtração e multiplicação de números inteiros, o processamento de assinaturas de funções e o preenchimento de hashes a partir de listas no formato chave/valor com chaves de string conhecidas em tempo de compilação.
Fonte: linux.org.ru
