• Lunes 18 de Noviembre de 2024, 12:28

Autor Tema:  Perl v5.40  (Leído 1378 veces)

explorer

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Perl v5.40
« en: Martes 11 de Junio de 2024, 11:59 »
0
Estos son los cambios que trae la versión v5.40.0, del 9 de junio de 2024.

Perl 5.40.0 representa aproximadamente 11 meses de desarrollo desde Perl 5.38.0 y contiene aproximadamente 160 000 líneas modificadas a lo largo de 1500 archivos por parte de 75 autores.

Las novedades que trae (entre otras):

Cambios principales

  • Nuevo identificador __CLASS__
    Ahora, cuando se usa la característica class, en el código de un método, bloque ADJUST o expresión de inicialización de un campo, se permite usar el nuevo identificador __CLASS__. Éste devuelve el nombre de una clase, de forma similar a __PACKAGE__, pero mientras que este último da el nombre del paquete del código en tiempo de compilación, el identificador __CLASS__ tiene en cuenta la clase a la que pertenece la instancia del objeto, en tiempo de ejecución. Esto es útil para el despachado de métodos de esa clase, especialmente en los constructores, donde no se permite el acceso a $self.

    Para más información, consultar "__CLASS__" en perlfunc.

  • Atributo :reader para las variables field
    Mientras se usa la característica class, las variables field pueden tener un atributo :reader. Esto solicita que se cree un método de acceso de forma automática que simplemente retorne el valor de la variable field, desde la instancia indicada.
Código: Perl
  1.     field $nombre :reader;
Es equivalente a
Código: Perl
  1.     field $nombre;
  2.     method nombre () { return $nombre; }
Se puede proporcionar un nombre alternativo:
Código: Perl
  1.     field $nombre :reader(obtener_nombre);
Para más detalles ver ":reader" en perlclass.

  • Se permite un espacio en la opción de línea de comandos -M
    Cuando se procesan las opciones en la línea de comandos, perl ahora permite un espacio entre la opción -M y el nombre del módulo que le sigue.
    Código: [Seleccionar]
        $ perl -M Data::Dumper=Dumper -E 'say Dumper [1,2,3]'Esto coincide con el comportamiento actual de la opción -I.

  • Restricciones en las declaraciones de use VERSIÓN
    En Perl v5.36 se añadió una advertencia de obsolescencia cuando se degrada una declaración use VERSIÓN desde una que esté por encima de la versión 5.11, hacia abajo. Ahora esto se ha convertido en un error fatal.

    Adicionalmente, ahora es un error fatal una posterior declaración use VERSIÓN cuando exista otra en el mismo ámbito, si es una versión 5.39 o superior. Esto es para evitar complicaciones a las funciones léxicas importadas desde builtin. También se añadió una advertencia de obsolescencia para cualquier otra declaración posterior de use VERSION que esté por debajo de la versión 5.39, para avisar que ya no se permitirá en la Perl versión 5.44.

  • Nuevas funciones experimentales builtin::inf y builtin::nan

    Se han añadido dos nuevas funciones, inf y nan, al espacio de nombres builtin. Actúan como constantes que devuelven los valores en punto flotante infinito y Not-a-Number (No es-un-Número), respectivamente.

  • Nuevo operador xor lógico ^^

    Perl siempre ha tenido tres operadores lógicos de baja precedencia: and, or y xor, así como tres versiones binarias de alta precedencia: &, | y ^. Hasta esta versión, mientras que también estaban presentes los operadores lógicos de media precedencia && y ||, no existía un equivalente a or-exclusivo. Esta versión de Perl añade el último operador ^^, completando el conjunto.

    Código: Perl
    1.     $x ^^ $y and say "Uno de x o y es verdadero, pero no ambos";

  • La característica try/catch ya no es experimental

    Antes de esta versión, la característica try/catch para el manejo de errores estaba considerada como experimental. Presentada en Perl versión 5.34.0, se considero que era una característica estable del lenguaje y su uso ya no imprimía una advertencia. Se debe seguir activando con la feature 'try'.

    Ver "Manejo de excepciones con Try y Catch" en perlsyn.

  • Iterar múltiples valores con for al mismo tiempo ya no es experimental

    Antes de esta versión, iterar sobre múltiples valores al mismo tiempo se consideró experimental. Presentada en Perl versión 5.36.0, ahora se considera una característica estable del lenguaje y su uso ya no imprime una advertencia. Ver "Sentencias compuestas" en perlsyn.

  • El módulo builtin ya no es experimental

    Antes de esta versión, el módulo builtin y todas sus funciones se consideraban experimentales. Presentadas en Perl versión 5.36.0, este módulo se considera ahora estable y su uso ya no imprime una advertencia. Sin embargo, muchas de sus funciones se siguen considerando experimentales.

  • La feature empaquetada :5.40 añade try

    La última versión de la feature empaquetada contiene ahora la reciente característica estable try. Ya que esta característica empaquetada se usa por la opción -E de línea de comandos, está disponible inmediatamente para los scripts -E.

  • use v5.40; importa las funciones builtin

    Además de la característica empaquetada de feature, use v5.40; (o siguientes versiones) importa la correspondiente versión de builtin empaquetada.
Cambios incompatibles

  • reset EXPRESIÓN ahora llama a set-magic en escalares
    Lo hacía con arrays y hashes, pero no con escalares.
  • Llamar a un método import de un paquete desconocido produce una advertencia
    Ahora, llamar a un código como este genera una advertencia:
    [perl]    Clase::Que::No::Existe->import("foo");[/perl]
  • return ya no permite un objeto indirecto
    La sintasix del operador return ahora rechaza los objetos indirectos. En la mayor parte de los casos compilaría e incluso se ejecutaría, pero no estaba documentado y podía producir resultados confusos, por ejemplo:
    Código: Perl
    1.     # note que "sum" no está definido
    2.     sub sum_positive {
    3.         return sum grep $_ > 0, @_;
    4.         # interpretado inesperadamente como:
    5.         #   return *sum, grep $_ > 0, @_;
    6.         # ... con la palabra suelta actuando como un argumento extra de tipo typeglob
    7.     }
    8.     say for sum_positive(-1, 2, 3);
    producía:
    Código: [Seleccionar]
        *main::sum
        2
        3
  • Las clases literales ya no se resuelven como manejadores de archivo, en llamadas de método bajo no feature "bareword_filehandles"
    Había un error con la ejecución de no feature "bareword_filehandles". Se permitía hacer esto:
    Código: Perl
    1.     open FH, "<", $archivo or die;
    2.     no feature 'bareword_filehandles';
    3.     FH->binmode;
      Ahora,
    FH->binmode intentará resolver FH como una clase, resultando típicamente en un error en tiempo de ejecución.
Obsolescencias

  • Usar goto para saltar desde un ámbito externo a un ámbito interno es obsoleto y se eliminará completamente en Perl v5.42
Nuevas plataformas
  • Serenity OS
« última modificación: Martes 11 de Junio de 2024, 12:07 por explorer »