Foros del Web » Programación para mayores de 30 ;) » Programación General »

Perl v5.42

Estas en el tema de Perl v5.42 en el foro de Programación General en Foros del Web. Estos son los cambios que trae la versión v5.42 , del 3 de julio de 2025. Perl 5.42.0 representa aproximadamente 13 meses de desarrollo desde ...
  #1 (permalink)  
Antiguo Ayer, 10:50
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 527
Antigüedad: 19 años, 7 meses
Puntos: 11
Sonrisa Perl v5.42

Estos son los cambios que trae la versión v5.42, del 3 de julio de 2025.

Perl 5.42.0 representa aproximadamente 13 meses de desarrollo desde Perl 5.40.0 y contiene aproximadamente 280 000 líneas modificadas a lo largo de 1600 archivos por parte de 65 autores.

Las novedades que trae (entre otras):

Cambios principales
  • Más subrutinas CORE::
    chdir se ha añadido como una subrutina al espacio de nombres CORE::

    Anteriormente, código como &CORE::chdir($dir) o my $ref = \&CORE::chdir; $ref->($dir) generaba un error que decía &CORE::chdir cannot be called directly. Ahora, estos casos son totalmente compatibles.
  • Nuevo pragma source::encoding
    Esto le permite declarar que la parte de un programa para el resto del alcance léxico de este pragma está codificada completamente en ASCII (para use source::encoding 'ascii') o si también se permite UTF-8 (para use source::encoding 'utf8'). No se aceptan otras codificaciones. La segunda forma es completamente equivalente a use utf8, y se puede usar indistintamente.

    El propósito de este pragma es detectar de manera temprana los casos en los que se olvidó especificar use utf8.

    use source::encoding 'ascii' se habilita automáticamente dentro del alcance léxico de use v5.41.0 o superior.

    no source::encoding desactiva toda esta comprobación para el resto de su alcance léxico. El significado de los caracteres no ASCII queda entonces indefinido.
  • Nuevo atributo :writer en las variables de campo
    Las clases definidas mediante use feature 'class' ahora pueden crear automáticamente accesores de escritura para campos escalares, mediante el atributo :writer, de manera similar a la forma en que :reader ya crea accesores de lectura.
    [perl]class Point {
    field $x :reader :writer :param;
    field $y :reader :writer :param;
    }

    my $p = Point->new( x => 20, y => 40 );
    $p->set_x(60);[/perl]
  • Nuevos operadores any y all
    Se han agregado dos nuevas características experimentales, que presentan los operadores de procesamiento de listas any y all.

    [perl]use v5.42;
    use feature 'keyword_all';
    no warnings 'experimental::keyword_all';

    my @numbers = ...

    if ( all { $_ % 2 == 0 } @numbers ) {
    say "All the numbers are even";
    }[/perl]
    Estas palabras clave funcionan de forma similar a grep "excepto" que solo devuelven "verdadero" o "falso", comprobando si alguno (o todos) de los elementos de la lista hacen que el bloque de prueba devuelva "verdadero". Por ello, pueden cortocircuitarse, evitando la necesidad de probar más elementos si un elemento determinado determina el resultado final.

    Éstas están inspiradas en las funciones del mismo nombre en el módulo List::Util, excepto que se implementan como operadores centrales directos y, por lo tanto, funcionan más rápido y no producen un marco de pila de llamadas de subrutina adicional para invocar el bloque de código.

    Las banderas de feature que habilitan estas características se han llamado keyword_any y keyword_all para evitar confusiones con la capacidad del módulo feature de hacer referencia a todas sus características mediante la marca de exportación :all.

    Las banderas de advertencia experimentales relacionadas se denominan en consecuencia experimental::keyword_any y experimental::keyword_all.
  • El apóstrofo como separador de nombres global se puede desactivar
    Esto quedó obsoleto en Perl 5.38 y se eliminó como estaba previsto en Perl 5.41.3, pero después de un tiempo de discusión se ha restablecido de manera predeterminada.

    Esto se puede controlar con la característica apostrophe_as_package_separator que está habilitada de manera predeterminada, pero está deshabilitada a partir del paquete de funciones 5.41 en adelante.

    Si desea deshabilitar el uso dentro de su propio código, puede deshabilitar explícitamente la función con:

    [perl]no feature "apostrophe_as_package_separator";[/perl]
    Tenga en cuenta que deshabilitar esta función solo impide el uso del apóstrofo como separador de paquetes dentro del código; las referencias simbólicas aún tratan ' como :: con la función deshabilitada:

    [perl]my $symref = "My'Module'Var";
    # default features
    my $x = $My'Module'Var; # bien
    no feature "apostrophe_as_package_separator";
    no strict "refs";
    my $y = $$symref; # como $My::Module::Var
    my $z = $My'Module'Var; # error sintaxis[/perl]
  • Declaración de método léxico usando my method
    Al igual que sub desde la versión 5.18 de Perl, method ahora se puede prefijar con la palabra clave my. Esto declara una subrutina con visibilidad léxica, en lugar de visibilidad de paquete. Consulte perlclass para más detalles.
  • Operador de invocación de método léxico ->&
    Además de la capacidad de declarar métodos léxicamente, esta versión también permite invocar una subrutina léxica como si fuera un método, omitiendo la resolución de métodos habitual basada en nombres.

    Combinadas con la declaración de métodos léxicos, estas dos nuevas habilidades crean el efecto de tener métodos privados.
  • El operador de Switch y Smart Match se mantiene, por medio de una característica
    La función "switch" y el operador de coincidencia inteligente, ~~, se presentaron en la v5.10. Su comportamiento cambió significativamente en la v5.10.1. Cuando se añadió el sistema "experimental" en la v5.18.0, las funciones "switch" y "smartmatch" se declararon experimentales retroactivamente. Con el paso de los años, han surgido y desaparecido propuestas para corregir o complementar estas funciones.

    Quedaron obsoletos en Perl v5.38.0 y su eliminación estaba prevista para Perl v5.42.0. Tras un amplio debate, su eliminación se ha pospuesto indefinidamente. Su uso ya no genera una advertencia de obsolescencia.

    Switch aún requiere la feature switch, que está habilitada de forma predeterminada en los paquetes de funciones de la versión 5.9.5 a la 5.34. Switch permanece deshabilitado en los paquetes de características 5.35 y posteriores, pero puede habilitarse por separado:

    [perl]# no switch aquí
    use v5.10;
    # switch aquí
    use v5.36;
    # no switch aquí
    use feature "switch";
    # switch aquí[/perl]
    La coincidencia inteligente (Smart) ahora requiere la feature smartmatch, que está habilitada por defecto e incluida en todos los paquetes de funciones hasta la versión 5.40. Está deshabilitada para el paquete de funciones 5.41 y posteriores, pero se puede habilitar por separado:

    [perl]# smartmatch aquí
    use v5.41;
    # no smartmatch aquí
    use feature "smartmatch";
    # smartmatch aquí[/perl]
  • Compatible con Unicode 16.0
    Perl ahora es compatible con Unicode 16.0: https://www.unicode.org/versions/Unicode16.0.0/, incluidos los cambios introducidos en la versión 15.1: https://www.unicode.org/versions/Unicode15.1.0/
  • Asignación del operador xor lógico ^^=
    Perl 5.40.0 introdujo el operador lógico "o exclusivo" de precedencia media ^^. En aquel momento, no se observó que la variante de asignación ^^= también faltaba. Ahora se ha añadido.


Cambios incompatibles
  • Se eliminaron las referencias a funciones que contenían funciones sin evaluación
    Perl 5.40 reintrodujo referencias incondicionales desde funciones a sus funciones contenedoras para corregir un error introducido en Perl 5.18 que rompía el comportamiento especial del eval EXPR en el paquete DB que usa el depurador.

    En algunos casos, este cambio generó cadenas de referencia circulares entre cierres y otras referencias existentes, lo que provocó fugas de memoria.

    Este cambio se ha revertido, solucionando [GH #22547] pero volviendo a romper [GH #19370].

    Esto significa que los bucles de referencia no se producirán y que las variables léxicas y las funciones de las funciones adjuntas pueden no ser visibles en el depurador.

    Tenga en cuenta que al llamar eval EXPR a una función de manera incondicional, esta hace referencia a las funciones que la encierran, como siempre lo ha hecho.
__________________
JF^D Perl Programming en Español



La zona horaria es GMT -6. Ahora son las 13:29.