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:Es equivalente aVer original
- field $nombre :reader;
Código perl:Se puede proporcionar un nombre alternativo:Ver original
- field $nombre;
Código perl:Para más detalles ver ":reader" en perlclass.Ver original
- field $nombre :reader(obtener_nombre);
- 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 BASH:Esto coincide con el comportamiento actual de la opción -I.Ver original
- $ perl -M Data::Dumper=Dumper -E 'say Dumper [1,2,3]'
- 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:Ver original
- $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:
Código perl:Ver original
- 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:producía:Ver original
Código:*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:Ahora, FH->binmode intentará resolver FH como una clase, resultando típicamente en un error en tiempo de ejecución.Ver original
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