Greboca  

DLFP - Dépêches  -  Perl 5.36.0 est sorti

 -  28 septembre - 

La toute dernière version de Perl, la 5.36.0, est sortie le 28 mai 2022. Vous la retrouverez bientôt dans votre distribution préférée.

Perl est un langage généraliste créé en 1987 par Larry Wall. Il est distribué sous une double licence : Artistic Licence et GPL v1+. La plupart des modules du CPAN, dépôt de référence pour des modules tiers, suivent également ce même traitement. Perl est inclus dans la quasi-totalité des distributions GNU/Linux.

Tout d’abord un petit lien vers la précédente dépêche sur la sortie de Perl 5.32.0 ainsi que vers la dépêche annonçant la sortie de Perl 5.30.0.

Sommaire

Améliorations de base

Comme toujours, use v5.36; active les fonctionnalités pour cette version de Perl. Le bundle 5.36 permet la fonctionnalité « signatures ». Introduite dans la version 5.20.0 de Perl et modifiée plusieurs fois depuis, la fonctionnalité de « signatures » de sous-programmes n’est désormais plus considérée comme expérimentale. Elle est considérée comme une fonctionnalité de langage stable et n’affiche plus d’avertissement.

use v5.36;

sub add ($x, $y) {
  return $x + $y;
}

Malgré cela, certains éléments des sous-programmes signés restent expérimentaux ; voir ci-dessous.

Le bundle 5.36 active aussi la fonctionnalité isa. Introduite dans la version 5.32.0 de Perl, cet opérateur est resté inchangé depuis. L’opérateur est désormais considéré comme une fonctionnalité de langage stable. Pour plus de détails, vous pouvez lire la documentation de l’opérateur.

Le bundle 5.36 désactive la fonctionnalité « indirect »

L’utilisation d’appels de méthode « indirects » est très puissante et permet d’émuler des constructions comme $x = new Class;.

D’un autre côté, cette possibilité complique le travail de l’interpréteur en rendant de nombreuses erreurs détectable uniquement à l’exécution. C’est ce qui fait de la désactivation de cette fonctionnalité un « mal pour un bien » et donc une amélioration.

Le bundle 5.36 désactive la fonctionnalité « multidimensional »

L’utilisation d’une expression de liste comme clé de hachage pour simuler des tableaux multidimensionnels clairsemé

Les détails de ces changements peuvent être trouvés dans la documentation de Perl-5.36.0 mais la version courte est : c’est un peu comme avoir use strict; activé, les fonctionnalités qui causent plus de problèmes que de solutions sont désactivées. De plus, ajouter use 5.36; dans votre code activera également les avertissements comme si vous aviez écrit use warnings;

Enfin, avec cette version, la fonctionnalité expérimentale switch, présente dans chaque bundle de fonctionnalités depuis leur introduction dans la v5.10, a été supprimée du bundle v5.36. Si vous souhaitez l’utiliser (contre l’avis des développeurs du langage), vous devrez l’activer explicitement.

Ricardo Signes a annoncé le 28 mai 2022 des exceptions avec des blocs finally, des blocs defer, des boucles for avec plusieurs variables d’itération, Unicode 14 et une nouvelle classe de fonctions d’assistance importées via le pragma 'builtin'.

L’argument de ligne de commande -g

Un nouvel argument de ligne de commande, -g, est disponible. C’est un alias plus simple pour -0777.

Cet argument est utile pour les “one-liners” car il permet de lire un fichier en entier plutôt que ligne par ligne.

Par exemple un fichier data:

foo
bar
baz

Pourra être lu en une seule fois avec -0777 ou -g:

$ cat data | perl -g -e 'while (<>) { chop; print "[$_]"; }'
[foo
bar
baz]

Attention, cet argument change également le comportement d’autres fonctionnalités (comme chomp).

Prise en charge d’Unicode 14.0

Comme toujours, cette version de Perl améliore le support d’Unicode. Vous pouvez lire Unicode® 14.0.0 pour plus de détails. On pourra par exemple utiliser l’émoji “troll” et ce, même si on n’est pas vendredi.

Les ensembles de regex ne sont plus considérés comme expérimentaux

Avant cette version, la fonctionnalité des ensembles de regex (officiellement appelée “Extended Bracketed Character Classes”) était considérée comme expérimentale. Introduite dans la version 5.18.0 de Perl et modifié plusieurs fois depuis, elle est désormais considérée comme une fonctionnalité stable du langage et son utilisation n’affiche plus d’avertissement. Les personnes intéressées pourront lire la documentation de la fonctionnalité.

Le lookbehind de longueur variable n’est généralement plus considéré comme expérimental

Avant cette version, toute forme de lookbehind de longueur variable était considérée comme expérimentale. Avec cette version, le statut expérimental a été réduit pour ne couvrir que le lookbehind qui contient des parenthèses de capture. En effet, il n’est pas clair si “aaz”=~/(?=z)(?<=(a|aa))/ doit correspondre et laisser $1 égal à “a” ou “aa”. Actuellement, il correspondra à l’alternative la plus longue possible, “aa”. Bien que nous soyons convaincus que la construction globale ne correspondra désormais que lorsqu’elle le devrait, nous ne sommes pas sûrs de conserver le comportement actuel de “correspondance la plus longue”.

SIGFPE n’est plus différé

Les exceptions à virgule flottante sont maintenant livrées immédiatement, de la même manière que les autres “défauts” -comme les signaux tels que SIGSEGV. Cela signifie que l’on a au moins une chance d’attraper un tel signal avec un gestionnaire $SIG{FPE}, par exemple pour que la fonction die puisse signaler la ligne en perl qui l’a déclenché.

Suivi de booléen stable

Les valeurs booléennes “true” et “false”, souvent accessibles par des constructions comme !!0 et !!1 (idiomatique n’est-ce pas?), en plus d’être renvoyées par de nombreuses fonctions et opérateurs de base, se souviennent désormais de leur nature booléenne même via l’affectation à des variables. La nouvelle fonction is_bool() vient rejoindre les builtins et peut servir à vérifier si une valeur est de nature booléenne. Cela est susceptible d’être utile lors de l’interopérabilité avec d’autres langages ou de la sérialisation de type de données, entre autres.

Itération sur plusieurs valeurs à la fois (expérimental)

Vous pouvez désormais itérer sur plusieurs valeurs à la fois en spécifiant une liste de lexiques entre parenthèses. Par exemple:

for my ($key, $value) (%hash) { ... }
for my ($left, $right, $gripping) (@moties) { ... }

Avant Perl v5.36, essayer de spécifier une liste après for my donnait une erreur de syntaxe. Cette fonctionnalité est actuellement expérimentale et entraînera un avertissement de catégorie experimental::for_list. Pour plus de détails, voyez-la documentation associée.

Commentaires : voir le flux Atom ouvrir dans le navigateur

par Emmanuel Seyman, contra-sh, Patrick Trauquesègues, tisaac, Bruno Ethvignot, Ellendhel, Gil Cot, palm123

DLFP - Dépêches

LinuxFr.org

Sortie de 0 A.D. Alpha 26 « Zhuangzi »

 -  3 octobre - 

0 A.D. : Empires Ascendant est un jeu vidéo de stratégie en temps réel (Real Time Strategy, RTS) historique en 3D développé par Wildfire Games. C’est (...)


Pétrolette 1.6 « Canicule »

 -  28 septembre - 

Pétrolette est une page d’accueil de lecture d’actualités, libre et gratuite. Elle est immédiatement utilisable sans inscription avec la même adresse (...)


Dernières avancées du côté de Thunderbird

 -  24 septembre - 

Récemment la version 102 est sortie. Au fur et à mesure des mises à jours mineures, des choses se sont améliorées ici et là. Côté mail pas grand-chose (...)


Des nouvelles de WeasyPrint, ou comment développer du libre à (presque) plein temps

 -  24 septembre - 

WeasyPrint est un générateur de documents qui transforme du HTML/CSS en PDF. C’est écrit en Python, c’est libre (bah oui, sinon on n’en parlerait pas (...)


Quitter une fonction exécutive pour retourner à la technique ? L'exemple du PDG de Hashicorp

 -  23 septembre - 

En juillet 2021, le PDG et cofondateur de Hashicorp, Mitchell Hashimoto, annonce abandonner ses fonctions exécutives et va contribuer au code. (...)