Após um ano de desenvolvimento, foi lançado o novo ramo estável da linguagem de programação Perl — 5.42. Durante a preparação da nova versão, aproximadamente 280 mil linhas de código foram alteradas (sem incluir documentação e código gerado automaticamente — 93 mil), e as mudanças afetaram 1500 arquivos, com a participação de 64 desenvolvedores.
O ramo 5.42 foi lançado de acordo com o cronograma fixo aprovado há doze anos, que prevê o lançamento de novos ramos estáveis uma vez por ano e lançamentos corretivos a cada três meses. Aproximadamente um mês depois, está previsto o lançamento do primeiro lançamento corretivo Perl 5.42.1, que corrigirá os erros mais significativos identificados durante a implementação do Perl 5.42.0. Simultaneamente ao lançamento do Perl 5.42, o suporte ao ramo 5.38 foi encerrado, e futuras atualizações poderão ser lançadas apenas em caso de problemas críticos de segurança. Em breve, começará o desenvolvimento do ramo experimental 5.43, a partir do qual será formado o lançamento estável do Perl 5.44 em junho de 2026, a menos que seja decidido adotar a numeração 7.x.
Mudanças principais:
- Foram adicionados operadores experimentais de processamento de listas — "any { BLOCK } @list" e "all { BLOCK } @list", que são semelhantes ao operador "grep { BLOCK } @list", mas podem devolver apenas valores true ou false. O operador "all" retorna "true" se a condição for satisfeita para todos os elementos da lista, enquanto o operador "any" — se a condição for satisfeita para pelo menos um elemento. A funcionalidade dos operadores é semelhante às funções do módulo List::Util, mas as versões integradas são mais rápidas e consomem menos memória. use v5.42; use feature 'keyword_all'; no warnings 'experimental::keyword_all'; my @numbers = … if ( all { $_ % 2 == 0 } @numbers ) { say "Todos os números são pares"; }
- Para campos definidos dentro da classe, foi implementado o atributo ":writer", utilizado para criar automaticamente um método que grava o valor da variável no campo para a instância atual da classe. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
- Adicionada a suporte para a definição de métodos lexicais, que, assim como a definição de subprogramas lexicais («lexical_subs»), permite criar métodos disponíveis apenas na área de visibilidade lexical do bloco onde foram criados. Para criar tais métodos, utiliza-se a expressão «my nome_do_método».
- Adicionado o operador «->&», permitindo chamar subprogramas que se encontram na área de visibilidade lexical, como se fossem métodos. Em combinação com a capacidade de definir métodos lexicais, o novo operador implementa funcionalidades semelhantes a métodos privados.
- Adicionado o operador de atribuição «A ^^= B», que executa a operação «A = A XOR B».
- Adicionada a pragma «source::encoding», que define a codificação do código-fonte. Para código na codificação ASCII, pode-se especificar «use source::encoding ‘ascii'» (por padrão), e para UTF-8 — «use source::encoding ‘utf8'», sendo esta última expressão equivalente à expressão «use utf8». O interpretador retornará um erro se, em código marcado como ASCII, forem encontrados caracteres UTF-8, ou se, em código marcado como UTF-8, forem utilizadas sequências de escape «\x{}». Para desativar a verificação de parte do código, pode-se usar o valor «use no source::encoding». Na prática, a pragma adicionada pode ser útil para identificar casos em que o desenvolvedor esqueceu de indicar «use utf8» para código codificado em UTF-8.
- Adicionada a função chdir() ao namespace «CORE::». Por exemplo, agora esta função pode ser acessada como «&CORE::chdir($dir)» ou «my $ref = \&CORE::chdir; $ref->($dir)».
- Adicionada a expressão ‘no feature «apostrophe_as_package_separator»‘ para desativar o suporte ao uso do símbolo » ‘ » como separador de nomes de pacotes (por exemplo, «My’Module’Var» em vez de «My::Module::Var»). Inicialmente, no Perl 5.42, estava planejado remover o suporte a tais separadores, que anteriormente foram declarados obsoletos, mas durante as discussões foi decidido manter essa possibilidade por padrão, mas prever uma opção para desativá-la.
- As funcionalidades 'switch' e o operador '~~' foram transferidos para o conjunto de funcionalidades obsoletas, anteriormente marcados para remoção. A partir das versões Perl 5.36 e 5.42, as funcionalidades 'switch' e '~~' estão desativadas por padrão ao vincular o código a versões da linguagem (por exemplo, ao especificar 'use v5.42'), mas podem ser ativadas com as expressões 'use feature "switch"' e 'use feature "smartmatch"'.
- Suporte à especificação Unicode 16.0 adicionado.
Fonte: opennet.ru
