DLFP - Dépêches - Perl 5.36.0 est sorti
- Septembre 2022 -
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.
- lien nᵒ 1 : Perl (wikipedia)
- lien nᵒ 2 : Annonce de Perl 5.36.0
- lien nᵒ 3 : Changelog Perl 5.36.0
- lien nᵒ 4 : Changelog commenté
- lien nᵒ 5 : Site officiel Perl
Sommaire
-
- Améliorations de base
- L’argument de ligne de commande
-g
- Prise en charge d’Unicode 14.0
- Les ensembles de regex ne sont plus considérés comme expérimentaux
- Le lookbehind de longueur variable n’est généralement plus considéré comme expérimental
- SIGFPE n’est plus différé
- Suivi de booléen stable
- Itération sur plusieurs valeurs à la fois (expérimental)
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
L’anatomie d’une chaussetteEn septembre 2018, paraissait une dépêche sur ce site et sur un calculateur de pull. Cinq ans après (tant que ça !) voici un autre outil de calcul de (...)
Sortie du Frido pour les Matheux
Le Frido est un livre libre de mathématique libre. L’objectif est de partir de la théorie des ensembles (acceptée avec le lemme de Zorn), et d’aller (...)
Perl 5.38.0 est sorti
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 (...)
Récap de l'action de l'April sur le projet de loi de contrôle parental
Comme l'écrivait l’un des membres du conseil d'administration de l’April : « C’est souvent compliqué de « donner à voir après » comment l’April a (...)
HCW@Home : le logiciel open-source de téléconsultation
HCW@Home (Healthcare Worker @Home) est un logiciel opensource (licence GPL-3.0) permettant la gestion des téléconsultations médicales. Doté d’une (...)