Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: explorer en 30 Mayo 2022, 14:13 pm



Título: Perl v5.36, liberado
Publicado por: explorer en 30 Mayo 2022, 14:13 pm
Ya tenemos nueva versión de Perl, la v5.36 (https://metacpan.org/release/RJBS/perl-5.36.0).

Perl 5.36.0 representa aproximadamente un año de desarrollo desde Perl 5.34.0 y contiene aproximadamente 250 000 líneas modificadas a lo largo de 200 archivos por parte de 82 autores.

Excluyendo los archivos autogenerados, documentación y herramientas de publicación, fueron aproximadamente 190 000 líneas modificadas en 1300 archivos .pm, .t, .c y .h.

Las novedades (https://metacpan.org/release/RJBS/perl-5.36.0/view/pod/perldelta.pod) que trae (entre otras):

Cambios principales
  • signatures deja de ser experimental (desde v5.20) y se activa por defecto
Código
  1. use v5.36;
  2. sub add($x, $y) {
  3.    return $x + $y;
  4. }
Pero algunos elementos de las firmas de subrutina aún quedan como experimentales.
  • isa considerado característica estable (desde v5.32), por lo que se activa por defecto. Consultar perlop.
  • se desactivan las características indirect y multidimensional.
    Ya no se puede escribir $x = new Class; ni $x = $hash{3,5,42};
    Consultar feature.
  • la característica experimental switch (desde v5.10) se ha quitado de use v5.36. Se puede seguir usando (no recomendado), pero hay que activarla explícitamente.
  • nueva opción en línea de comandos, -g, es un alias de -0777. Consultar perlrun.
  • soporte para Unicode 14.0.
  • los "conjuntos regex" ya no se consideran experimentales (desde v5.18). Ejemplo: /(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])/
    Esta expresión casa con dígitos que son tanto Thai como Laosianos. Consultar perlrecharclass.
  • los vistazos hacia atrás de longitud variable en patrones de exp. reg. ya no se consideran experimentales. Ahora, en "aaz"=~/(?=z)(?<=(a|aa))/, $1 contendrá "aa" (la coincidencia de mayor longitud).
  • seguimiento estable de los valores booleanos. Ahora, los valores booleanos resultado de expresiones como !!0 y !!1 así como los de los resultados de funciones y operadores incorporados, mantienen su naturaleza como valor booleano. Hay una nueva función, is_bool() que puede servir para comprobar si un valor es booleano.
  • (experimental) iterar sobre múltiples valores al mismo tiempo:
Código
  1. for my ($key, $value) (%hash) { ... }
  2. for my ($left, $right, $gripping) (@moties) { ... }
Consultar perlsyn.
  • (experimental) nuevo módulo builtin.
    Ofrece información y acceso a nuevas funciones o a las nuevas funciones incorporadas experimentales. Las de v5.36 son:
    • builtin::trim Elimina los espacios en blanco que haya al principio y final de la cadena de texto
      · builtin::indexed Devuelve una lista el doble de grande que la lista argumento, con cada elemento precedido por el índice de ese elemento. Esto es útil para recorrer arrays.
    Código
    1. use builtin 'indexed';
    2. foreach my ($index, $val) (indexed @array) {
    • builtin:true, builtin::false, builtin::is_bool Valores de verdad y función para comprobar si un valor es booleano.
    • builtin::weaken, builtin::unweaken, builtin::is_weak Cambio en el tratamiento de referencias a una variable, para ser eliminada o no por el recolector de basura.
    • builtin::blessed, builtin::refaddr, builtin::reftype Más información sobre referencias (incluso si no lo son).
    • builtin::ceil, builtin::floor Redondeo al entero igual o inferior, o al igual o superior del valor dado.
  • (experimental) bloques defer. Definen secciones de código que se ejecutarán durante la salida del ámbito en que se encuentren esos bloques.
    Código
    1. use feature 'defer';
    2. {
    3.    say "This happens first";
    4.    defer {
    5.       say "This happens last";
    6.    }
    7.    say "And this happens inbetween";
    8. }
  • (experimental) try/catch ahora tiene un bloque finally. Proporciona código que se ejecutará al final de la construcción.
  • (experimental) delimitadores no ASCII para entrecomillar. Ahora se podrá escribir $text = qw« hola adios »;
  • (experimental) @_ experimental en firmas de subrutinas. Ejemplo:
    Código
    1. use v5.36;
    2. sub f ($x, $y = 123) {
    3.  say "The first argument is $_[0]";
    4. }
    provocará una advertencia.
Cambios incompatibles
  • un sort vacío (sin argumentos), ahora es un fallo en tiempo de compilación.
    @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:
    Código
    1. use v5.14;
    2. say "say está permitido";
    3. use v5.8;   # genera una advertencia
    4. print "Debemos usar print\n";

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