• Publicidad

Perl v5.36

Novedades y noticias acerca de todo lo relacionado a Perl.

Perl v5.36

Notapor explorer » 2023-07-31 05:30 @271

Estos son los cambios que trae la versión v5.36, del 28 de mayo de 2022.

Perl 5.36.0 representa aproximadamente 12 meses de desarrollo desde Perl 5.34.0 y contiene aproximadamente 250 000 líneas modificadas a lo largo de 2000 archivos por parte de 82 autores.

Las novedades que trae (entre otras):

Cambios principales
  • use v5.36
    Como siempre, use v5.36 activa el conjunto de características para esta versión de Perl.

    Se activa la característica signatures. Presentada en Perl v5.20.0 y modificada en varias ocasiones desde entonces, la característica de firmas en las subrutinas ya no se considera experimental. Se considera que ya es estable y ya no imprime una advertencia.
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    use v5.36;
    sub add ($x, $y) {
      return $x + $y;
    }
    Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

    Ciertos elementos de las subrutinas con firmas siguen siendo experimentales.

    Se activa la característica isa. Presentada en Perl v5.32.0, este operador no ha cambiado desde entonces. El operador se considera que es una característica estable. Para más detalles consultar "Class Instance Operator" en perlop.

    Se desactivan las características indirect y multidimensional. Prohibirán, respectivamente: el uso de llamadas "indirectas" a métodos (como $x = new Class;); el uso de una expresión de lista como una clave de hash para simular arrays multidimensionales. Lo específico de estos cambios se pueden encontrar en feature, pero el resumen es: esto es un poco como tener activado un modo aún más estricto, desactivando características que causan más problemas que lo que ofrecen.

    Además, use v5.36 también activará las advertencias, como si hubiera escrito use warnings.

    Finalmente, con esta publicación, la característica experimental switch, presente en cada paquete de características desde que se presentó en v5.10, se ha eliminado del paquete de características de v5.36. Si quieres usarla (en contra de nuestro consejo), tendrá que activarlo explícitamente.
  • opción de línea de comandos -g

    La opción de línea de comandos -g es un simple alias de -0777.

    Más información en "-g" en perlrun.
  • Unicode 14.0
  • Los conjuntos en regex ya no se consideran experimentales

    Antes de esta publicación, la característica de conjuntos en las regex (oficialmente llamada "Extended Bracketed Character Classes") se consideraba experimental. Presentada en Perl v5.18.0, y modificada en múltiples ocasiones desde entonces, ya se considera que es una característica estable del lenguaje y su uso ya no imprime una advertencia. Vea "Extended Bracketed Character Classes" en perlrecharclass.
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    /(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])/
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

  • Ya no se considera experimental los vistazos previos, de longitud variable

    Antes de esta publicación, cualquier forma de vistazo anterior de longitud variable se consideraba experimental. Con esta publicación su estatus de experimental se reduce a sólo los vistazos que contiene paréntesis de captura. Esto es porque no está claro si
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. "aaz"=~/(?=z)(?<=(a|aa))/
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

    debe coincidir y dejar $1 igual a "a" o "aa". Actualmente coincidirá con la alternativa más larga, "aa". Mientras que confiamos que la construcción coincidirá sólo cuando deba, no confiamos en que conserve el comportamiento de la "coincidencia más larga".
  • SIGFPE ya no se difiere

    Las excepciones de punto flotante ahora se gestionan inmediatamente, de la misma forma que otras señales de "fallo", tales como SIGSEGV. Esto significa que uno tiene al menos una oportunidad de capturar tal señal con un manejador $SIG{FPE}, por ejemplo die puede reportar la línea en que perl lo disparó.
  • Seguimiento estable de los booleanos

    Los valores booleanos "true" y "false", a menudo accesibles con construcciones como !!0 y !!1, así como devueltos por muchas funciones y operadores principales, ahora recuerdan su naturaleza booleana incluso en asignaciones a variables. La nueva función is_bool() en builtin puede comprobar si un valor tiene una naturaleza booleana.

    Esto es muy posible que sea útil cuando se opere con otros lenguajes o serialización de datos/tipos, aparte de otros sitios.
  • iterar sobre valores múltiples al mismo tiempo (experimental)

    Ahora puede iterar sobre valores múltiples al mismo tiempo especificando una lista de léxicas en paréntesis. Por ejemplo,
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    for my ($key, $value) (%hash) { ... }
    for my ($left, $right, $gripping) (@moties) { ... }
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

    Antes de Perl v5.36, intentar especificar una lista después de un for my era un error de sintaxis.

    Esta característica actualmente es experimental y provocará una advertencia de categoría experimental::for_list. Para más detalles vea "Compound Statements" en perlsyn. Vea también "builtin::indexed".
  • Funciones builtin (experimental)

    Se añade un nuevo módulo principal: builtin, que proporciona documentación para las nuevas y siempre presentes funciones que están incluidas en el intérprete.
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    say "Reference type of arrays is ", builtin::reftype([]);
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

    También proporciona un mecanismo de importación léxico para proveer de versiones de nombres más cortos para estas funciones.
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    use builtin 'reftype';
    say "Reference type of arrays is ", reftype([]);
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

    El mecanismo de la función builtin y las funciones que proporciona son todos experimentales. Esperamos que el propio builtin cesará de ser experimental en un futuro cercano, pero las funciones individuales se volverán estables poco a poco. Otras funciones se añadirán a builtin más adelante.

    Para más detalles, vea builtin, pero aquí hay un resumen de las funciones incluidas en v5.36:

    • builtin::trim
      Esta función trata a su argumento como una cadena, devolviendo el resultado de eliminar todo el espacio en blanco en su comienzo y en su final.
    • builtin::indexed
      Esta función devuelve una lista dos veces más grande que su lista de argumentos, donde cada elemento se precede con el índice dentro de esa lista. Esto se especialmente útil para usarlo con la nueva sintaxis de foreach con múltiples variables iteradoras, para iterar sobre un array o list, mientras que también se sigue con el índice a cada elemento:
      Sintáxis: [ Descargar ] [ Ocultar ]
      Using perl Syntax Highlighting
      use builtin 'indexed';

      foreach my ($index, $val) (indexed @array) {
          ...
      }
      Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

    • builtin::true, builtin::false, builtin::is_bool
      true y false devuelven los valores booleanos verdadero y falso. Perl sigue siendo perl, y no tiene un tipo estricto para booleanos, pero de estos valores se sabrá que se crearon para serlo. is_bool le dirá si un valor se sabe que fue creado como booleano.
    • builtin::weaken, builtin::unweaken, builtin::is_weak
      Estas funciones harán, respectivamente: debilitar una referencia; fortaleces una referencia; y comprobar si una referencia es débil. (Una referencia débil no se tiene en cuenta para los propósitos de recolección de basura. Vea perlref). Estas funciones pueden tomar el lugar de rutinas similares de Scalar::Util.
    • builtin::blessed, builtin::refaddr, builtin::reftype
      Estas funciones proporcionan más datos sobre referencias (¡o no referencias, realmente!) y pueden tomar el lugar de rutinas similares en Scalar::Util.
    • builtin::ceil, builtin::floor
      ceil devuelve el menor entero que sea igual o superior a su argumento. floor devuelve el mayor entero que sea menor o igual a su argumento. Estas pueden tomar el lugar de rutinas similares encontradas en POSIX.
  • Bloques defer (experimental)
    Esta publicación añade soporte para bloques defer (diferido), que son bloques de código prefijados con el modificador defer. Proporcionan una sección de código que se ejecutará al final, durante el ámbito de salida.

    En resumen, cuando se llega a un bloque defer en tiempo de ejecución, su cuerpo se pone aparte para ejecutarse cuando el ámbito que lo engloba termina.

    Bloques defer se pueden usar para tomar el lugar de objetos "guardián de ámbito", donde un objeto pasa un bloque de código para ejecutarse por parte del destructor.

    Para más información, vea "defer blocks" en perlsyn.
  • try/catch ahora puede tener un bloque finally (experimental)

    La sintaxis experimental try/catch se ha ampliado para soportar un tercer bloque opcional precedido por la palabra clave finally.
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    try {
        attempt();
        print "Success\n";
    }
    catch ($e) {
        print "Failure\n";
    }
    finally {
        print "This happens regardless\n";
    }
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

    Esto proporciona código que se ejecuta al final de la construcción try/catch, incluso si se abortó por una excepción o palabra clave de control de flujo. Son similares a los bloques defer.

    Para más información, vea "Try Catch Exception Handling" en perlsyn.
  • Delimitadores no-ASCII para operadores entrecomilladores (experimental)

    Perl ha permitido, tradicionalmente, sólo cuatro pares de delimitadores de cadenas/patrones: ( ) { } [ ] y < >, todos en el rango del ASCII. Unicode tiene cientos de posibilidades más, y usando esta característica activa muchos de ellos. Vea "The 'extra_paired_delimiters' feature" en feature para más detalles.
  • @_ es ahora experimental en firmas de subrutinas
    Aunque las firmas de subrutinas ya son estables, el uso del array de argumentos por defecto @_ con una subrutina que tiene una firma, sigue siendo experimental, con su propia categoría de advertencias. Silencias esa categoría experimental::signatures no es suficiente para deshacerse de ella. La nueva advertencia se emite con el nombre de categoría experimental::args_array_with_signatures.

    Cualquier subrutina que tenga una firma e intente hacer uso del array de argumentos por defecto, o un elemento de él (@_ o $_[ÍNDICE]), ni explícitamente ni implícitamente (tal como con un shift o pop sin argumentos) provocará una advertencia en tiempo de compilación:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    use v5.36;
    sub f ($x, $y = 123) {
      say "The first argument is $_[0]";
    }
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

    Sintáxis: [ Descargar ] [ Ocultar ]
    Using text Syntax Highlighting
    Use of @_ in array element with signatured subroutine is experimental
    at file.pl line 4.
    Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

    Ya no está especificado el comportamiento del código que intenta hacer esto, y puede estar sujeto a cambios en futuras versiones.

Cambios incompatibles

Un sort vacío ahora es un error en tiempo de compilación.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@a = sort @empty; # no afectado
@a = sort;        # ahora es error en tiempo de compilación
@a = sort ();     # también es un error en tiempo de compilación
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Un sort sin nada era una forma muy fea de crear una lista vacía; ahora rompe en tiempo de compilación. Este cambio pretende liberar algo del espacio de sintaxis para futuras mejoras a sort.

Obsolescencias

use VERSION (con VERSION inferior a 5.11) después de un use v5.11 (rebajar de versión), ahora es obsoleto. Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use v5.14;
say "say está permitido";
use v5.8;   # genera una advertencia
print "Debemos usar print\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Plataformas obsoletas
  • AT&T UWIN
  • DOS/DJGPP
  • NetWare

Plataformas actualizadas
  • z/OS
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Volver a Noticias de Perl

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron