Está disponible el lenguaje de programación Perl 5.42

Después de un año de desarrollo, se publica el lanzamiento de la nueva rama estable del lenguaje de programación Perl — 5.42. En la preparación de esta nueva versión, se modificaron aproximadamente 280 mil líneas de código (sin incluir documentación y código generado automáticamente — 93 mil), los cambios afectaron a 1500 archivos y 64 desarrolladores participaron en el desarrollo.

La rama 5.42 se ha publicado de acuerdo con el calendario fijo aprobado hace doce años, que implica el lanzamiento de nuevas ramas estables una vez al año y lanzamientos de mantenimiento cada tres meses. Aproximadamente en un mes se planea lanzar la primera versión de mantenimiento Perl 5.42.1, que corregirá los errores más significativos encontrados durante la implementación de Perl 5.42.0. Al mismo tiempo, con el lanzamiento de Perl 5.42, se ha suspendido el soporte para la rama 5.38, para la cual se pueden lanzar actualizaciones en el futuro solo en caso de que se detecten problemas críticos de seguridad. En breve comenzará el proceso de desarrollo de la rama experimental 5.43, sobre la cual se formará la versión estable de Perl 5.44 en junio de 2026, a menos que se decida cambiar a la numeración 7.x.

Cambios clave:

  • Se han añadido operadores experimentales para el procesamiento de listas — «any { BLOCK } @list» y «all { BLOCK } @list», que son similares al operador «grep { BLOCK } @list», pero pueden devolver solo valores true o false. El operador «all» devuelve «true» si la condición se cumple para todos los elementos de la lista, mientras que el operador «any» lo hará si la condición se cumple al menos para uno de los elementos. La funcionalidad de los operadores es análoga a las funciones del módulo List::Util, pero las versiones incorporadas son más rápidas y consumen menos memoria. use v5.42; use feature ‘keyword_all’; no warnings ‘experimental::keyword_all’; my @numbers = … if ( all { $_ % 2 == 0 } @numbers ) { say «Todos los números son pares»; }
  • Para los campos definidos dentro de la clase, se ha implementado el atributo «:writer», que se utiliza para crear automáticamente un método que escribe el valor de la variable en el campo del objeto actual de la clase. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
  • Se añadió soporte para la definición de métodos léxicos, que, análogamente a la definición de subprogramas léxicos («lexical_subs»), permite crear métodos disponibles solo en el ámbito léxico del bloque en el que fueron creados. Para crear tales métodos se utiliza la expresión «my nombre_método».
  • Se añadió el operador «->&» que permite llamar a subprogramas que se encuentran en el ámbito léxico, como si fueran métodos. En combinación con la capacidad de definir métodos léxicos, el nuevo operador implementa una funcionalidad similar a los métodos privados.
  • Se añadió el operador de asignación «A ^^= B», que realiza la operación «A = A XOR B».
  • Se añadió la pragma «source::encoding», que define la codificación del código fuente. Para código en codificación ASCII, se puede especificar «use source::encoding 'ascii'» (por defecto), y para UTF-8 — «use source::encoding 'utf8'», esta última expresión es equivalente a «use utf8». El intérprete generará un error si en el código marcado como ASCII aparecen caracteres UTF-8, o si en el código marcado como UTF-8 se utilizan secuencias de escape «\x{}». Para desactivar la comprobación de parte del código, se puede utilizar el valor «use no source::encoding». En la práctica, la pragma añadida puede ser útil para detectar casos en los que el desarrollador olvidó especificar «use utf8» para el código en codificación UTF-8.
  • Se añadió la función chdir() al espacio de nombres «CORE::». Por ejemplo, ahora se puede llamar a esta función como «&CORE::chdir($dir)» o «my $ref = \&CORE::chdir; $ref->($dir)».
  • Se añadió la expresión ‘no feature «apostrophe_as_package_separator»‘ para deshabilitar el soporte para el uso del carácter » ‘ » como separador de nombres de paquetes (por ejemplo, «My'Module'Var» en lugar de «My::Module::Var»). Originalmente, en Perl 5.42 se planeaba eliminar el soporte para dichos separadores, que anteriormente habían sido declarados obsoletos, pero en las discusiones se decidió mantener esta posibilidad por defecto, pero prever una opción para desactivarla.
  • Se han trasladado las funcionalidades de «switch» y el operador «~~» a las capacidades devueltas, que anteriormente estaban marcadas como obsoletas y estaban programadas para ser eliminadas. A partir de las versiones Perl 5.36 y 5.42, las funcionalidades de «switch» y «~~» están desactivadas por defecto al vincular el código a las versiones del lenguaje (por ejemplo, al especificar «use v5.42»), pero pueden ser activadas con las expresiones ‘use feature «switch»‘ y ‘use feature «smartmatch»‘.
  • Se ha añadido el soporte para la especificación Unicode 16.0.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster