Vue lecture

Perl 5.42 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 modules du CPAN, dépôt de référence pour des modules tiers, sont également sous ces deux licences. Perl est inclus dans la quasi-totalité des distributions GNU/Linux, parfois installé par défaut.

La toute dernière version de Perl, la 5.42.0, est sortie le 3 juillet 2025. Vous la retrouverez bientôt dans votre distribution préférée.

L’association Les Mongueurs de Perl fait la promotion du langage dans les pays francophones, et ce depuis la fin de l’année 2001

Sommaire

Améliorations principales

Nouveaux sous-programmes CORE::

chdir a été ajouté comme sous-programme à l'espace de noms CORE::.

Jusqu’ici, du code comme &CORE::chdir($dir) ou my $ref = \&CORE::chdir;
$ref->($dir)
renvoyait une erreur indiquant que &CORE::chdir ne peut pas être appelé directement. Ces cas sont désormais entièrement pris en charge.

Nouveau pragma source::encoding

Voir source::encoding

Ceci vous permet de déclarer que la partie d’un programme correspondant au reste de la portée lexicale de ce pragma est encodée soit entièrement en ASCII (pour use source::encoding 'ascii'), ou que l’UTF-8 est autorisé également (pour use source::encoding 'utf8'). Aucun autre codage n’est accepté. La seconde forme est entièrement équivalente à use utf8 et peut être utilisée de manière interchangeable.

Ce pragma a pour but de détecter rapidement les cas où vous avez oublié de spécifier use utf8.

use source::encoding 'ascii' est automatiquement activé dans la portée lexicale d’un use v5.41.0 ou supérieur.

no source::encoding désactive toutes ces vérifications pour le reste de sa portée lexicale. La signification des caractères non-ASCII n’est alors pas définie.

Nouvel attribut :writer sur les variables de champ

Les classes définies avec use feature 'class' peuvent désormais créer automatiquement des accesseurs d’écriture pour les champs scalaires, à l’aide de l’attribut :writer, de la même manière que :reader crée déjà des accesseurs de lecture.

class Point {
field $x :reader :writer :param;
field $y :reader :writer :param;
}


my $p = Point->new( x => 20, y => 40 );
$p->set\_x(60);

Nouveaux opérateurs any et all

Ajout de deux nouvelles fonctionnalités expérimentales, introduisant les opérateurs de traitement de liste any et all.

use v5.42 ;
use feature 'keyword\_all' ;
no warning 'experimental::keyword\_all' ;


my @nombres = ...


if ( all { $\_ % 2 == 0 } @nombres ) {
  say "Tous les nombres sont pairs" ;
}

Ces mots-clés fonctionnent de manière similaire à grep, sauf qu’ils ne renvoient que vrai ou faux, testant si un des éléments (ou tous) de la liste fait que le bloc de test renvoie vrai. De ce fait, ils peuvent court-circuiter, évitant ainsi de tester d’autres éléments si un élément donné détermine le résultat final.

Ces fonctions s’inspirent des fonctions du même nom du module List::Util, à la différence qu’elles sont implémentées comme des opérateurs de base directs, et donc plus rapides, et ne génèrent pas de trame de pile d’appel de sous-routine supplémentaire pour invoquer le bloc de code.

Les indicateurs de fonctionnalité activant ces mots-clés ont été nommés keyword_any et keyword_all afin d’éviter toute confusion avec la capacité du module feature à faire référence à toutes ses fonctionnalités à l’aide de la balise d’exportation :all. [GH #23104]

Les indicateurs d’avertissement expérimentaux associés sont donc nommés experimental::keyword_any et experimental::keyword_all.

L’apostrophe comme séparateur de noms global peut être désactivée.

Ceci a été déclaré obsolète dans Perl 5.38 et supprimé comme prévu dans Perl 5.41.3, mais, après discussion, il a été rétabli par défaut.

Ceci peut être contrôlé avec la fonctionnalité apostrophe_as_package_separator, activée par défaut, mais désactivée à partir du bundle de fonctionnalités 5.41.

Si vous souhaitez désactiver son utilisation dans votre propre code, vous pouvez la désactiver explicitement :

no feature "apostrophe\_as\_package\_separator";

Notez que la désactivation de cette fonctionnalité empêche uniquement l’utilisation de l’apostrophe comme séparateur de paquets dans le code ; les références symboliques traitent toujours ' comme :: même si la fonctionnalité est désactivée :

my $symref = "My'Module'Var";
\# fonctionnalités par défaut
my $x = $My'Module'Var; # fine
no feature "apostrophe\_as\_package\_separator";
no strict "refs";
my $y = $$symref; # comme $My::Module::Var
my $z = $My'Module'Var; # erreur de syntaxe

[GH #22644]

Déclaration de méthode lexicale avec my method

Comme sub depuis la version 5.18 de Perl, method peut désormais être préfixé par le mot-clé my. Cela déclare une sous-routine avec une visibilité lexicale, plutôt que de package. Voir perlclass pour plus de détails.

Opérateur d’invocation de méthode lexicale ->&

Outre la possibilité de déclarer des méthodes de manière lexicale, cette version permet également d’invoquer une sous-routine lexicale comme s’il s’agissait d’une méthode, sans passer par la résolution habituelle des méthodes par nom.

Combinées à la déclaration de méthode lexicale, ces deux nouvelles fonctionnalités créent l’effet de méthodes privées.

Opérateur de commutation et de correspondance intelligente conservé, derrière une fonctionnalité

La fonctionnalité « switch » et l’opérateur de correspondance intelligente, ~~, ont été introduits dans la version 5.10. Leur comportement a été considérablement modifié dans la version 5.10.1. Avec l’ajout du système « experiment » dans la version 5.18.0, le « switch » et le smartmatch ont été rétroactivement déclarés expérimentaux. Au fil des ans, les propositions visant à corriger ou à compléter ces fonctionnalités ont été nombreuses et ont été abandonnées.

Elles ont été déclarées obsolètes dans Perl v5.38.0 et leur suppression était prévue dans Perl v5.42.0. Après de longues discussions, leur suppression a été reportée sine die. Leur utilisation ne génère plus d’avertissement d’obsolescence.

Switch lui-même nécessite toujours la fonctionnalité switch, activée par défaut pour les bundles de fonctionnalités de la version 5.9.5 à la version 5.34. Switch reste désactivé dans les bundles de fonctionnalités 5.35 et ultérieurs, mais peut être activé séparément :

\# pas de switch ici
use v5.10;
\# switch accepté ici
use v5.36;
\# pas de switch ici
use feature "switch"; # switch accepté ici

La correspondance intelligente nécessite désormais la fonctionnalité smartmatch, activée par défaut et incluse dans tous les bundles de fonctionnalités jusqu’à la version 5.40. Elle est désactivée à partir de la version 5.41, mais peut être activée séparément :

\# smartmatch accepté ici
use v5.41;
\# pas de smartmatch ici
use feature "smartmatch";
\# smartmatch accepté ici

[GH #22752]

Unicode 16.0 pris en charge

Perl prend désormais en charge Unicode 16.0, y compris les modifications introduites dans la version 15.1.

Assignation de l’opérateur logique xor ^^=

Perl 5.40.0 avait introduit l’opérateur logique OU exclusif à priorité moyenne ^^. L’absence de la variante d’assignation ^^= n’avait pas été remarquée à l’époque. Cet oubli est désormais corrigé.

Sécurité

[CVE-2024-56406] Vulnérabilité de dépassement de tampon avec tr//

Une vulnérabilité de dépassement de tampon a été découverte dans Perl.

Lorsque des octets non-ASCII se trouvent à gauche de l’opérateur tr, S_do_trans_invmap() peut faire déborder le pointeur de destination d.

$ perl -e '$\_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;'
Segmentation fault (core dumped)

On pense que cette vulnérabilité peut permettre des attaques par déni de service ou par exécution de code arbitraire sur les plateformes dépourvues de défenses suffisantes.

Ce problème a été découvert par Nathan Mills et déclaré [CVE-2024-56406] par le groupe de sécurité CPAN.

Le correctif pour corriger ce problème (87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd) s’applique à tous les Perl vulnérables, y compris ceux qui ne sont plus pris en charge.

[CVE-2025-40909] Les threads Perl présentent une situation de concurrence entre les répertoires de travail : les opérations sur les fichiers peuvent cibler des chemins non prévus.

Le clonage de threads Perl présentait une situation de concurrence entre les répertoires de travail : les opérations sur les fichiers peuvent cibler des chemins non prévus. Perl 5.42 ne fera plus un chdir avec chaque handle.

Ce problème a été découvert par Vincent Lefèvre via [GH #23010] et déclaré [CVE-2025-40909] par le groupe de sécurité CPAN.

Des correctifs ont été fournis via [GH #23019] et [GH #23361].

Modifications incompatibles

Suppression des références de fonctions englobantes pour les fonctions sans évaluation

Perl 5.40 a réintroduit les références inconditionnelles des fonctions vers les fonctions englobantes afin de corriger un bug introduit dans Perl 5.18 qui perturbait le comportement spécial de eval EXPR dans le paquet DB utilisé par le débogueur.

Dans certains cas, cette modification entraînait des chaînes de références circulaires entre les fermetures et d’autres références existantes, entraînant des fuites de mémoire.

Cette modification a été annulée, corrigeant le problème [GH #22547], mais le perturbant à nouveau [GH #19370].

Cela signifie que les boucles de référence ne se produiront pas et que les variables lexicales et les fonctions lexicales des fonctions englobantes pourraient ne pas être visibles dans le débogueur.

Notez que l’appel inconditionnel de eval EXPR dans une fonction force celle-ci à référencer ses fonctions englobantes comme elle l’a toujours fait.

Améliorations des performances

  • Les chaînes obtenues par une formule évaluée à la compilation sont désormais partageables via le mécanisme de copie sur écriture. [GH #22163]
Le code suivant aurait auparavant alloué onze tampons de chaînes, contenant chacun un million de « A » :
    my @scalars; push @scalars, ("A" x 1\_000\_000) for 0..9;
Un seul tampon est désormais alloué et partagé entre une opération CONST et les dix éléments scalaires de `@scalars`.
Notez que tout code utilisant ce type de constante pour simuler des fuites mémoire (par exemple dans des fichiers de test) doit désormais permuter la chaîne afin de déclencher une copie de la chaîne et l’allocation de tampons séparés. Par exemple, `("A" x 1_000_000).time` pourrait être une petite modification appropriée.
  • tr/// s’exécute désormais à la même vitesse, quelle que soit la représentation interne de son opérande, tant que les seuls caractères traduits sont de type ASCII, par exemple : tr/A-Z/a-z/. Auparavant, si l’encodage interne était UTF-8, une implémentation plus lente et plus générale était utilisée.
  • Le code qui utilise la fonction indexed du module builtin pour générer une liste de paires index/valeur à partir d’un tableau ou d’une liste, puis la transmettre à une liste foreach à deux variables pour les décompresser, est désormais optimisé pour être plus efficace.
    my @array = (...);


    foreach my ($idx, $val) (builtin::indexed @array) {
    ...
    }



    foreach my ($idx, $val) (builtin::indexed LIST...) {
    ...
    }
En particulier, il n’y a plus génération d’une liste temporaire deux fois plus grande que l’originale. Au lieu de cela, la boucle parcourt le tableau ou la liste d’origine directement sur place, de la même manière que `foreach (@array)` ou `foreach (LIST)`.
  • L’optimiseur à lucarne reconnaît les motifs substr à décalage nul suivants et les remplace par un nouvel opérateur dédié (OP_SUBSTR_LEFT). [GH #22785]
    substr($x, 0, ...)
    substr($x, 0, ..., '')
  • La transformation en chaîne des entiers par "print" in perlfunc et "say" in perlfunc, lorsqu’ils proviennent d’un SVt_IV, est désormais plus efficace. [GH #22927]
  • L’inversion de chaîne à partir d’un seul argument, lorsque le tampon de chaîne n’est pas « balayé », s’effectue désormais en une seule passe et est sensiblement plus rapide. L’ampleur de l’amélioration dépend du compilateur et du matériel. [GH #23012]

Commentaires : voir le flux Atom ouvrir dans le navigateur

  •  

Acteurs du Libre : l'édition 2025 du concours est ouverte !

Professionnels de l’open source ou responsables d’entreprises utilisatrices de solutions ouvertes : candidatez au concours des Acteurs du Libre et tentez votre chance de mettre votre projet sous les projecteurs à Open Source Experience 2025 !

Bannière Acteurs du Libre 2025

Le concours vise à récompenser les actions qui contribuent au développement du Logiciel Libre et de l’Open Source. Il s’adresse aux éditeurs, intégrateurs, entreprises ou administrations intégrant des solutions ouvertes, start-ups proposant de l’open source, associations ou projets centrés sur le Libre. Les prix des Acteurs du Libre permettent de mettre en lumière les réussites entrepreneuriales de la filière libre française et européenne. Le concours est organisé par le CNLL dans le cadre d'Open Source Experience, qui change de lieu cette année et se déroulera à la Cité des Sciences de Paris les 10 et 11 décembre 2025.

Les candidats peuvent soumettre dans l’une des six catégories :

La date limite pour postuler et envoyer le dossier de participation complété est le 10 octobre 2025. La cérémonie de remise de prix aura lieu à l'occasion d’Open Source Experience, les 10 et 11 décembre à Paris.

Quelques règles à noter:

  • Le concours est ouvert, les organisations non membres du CNLL peuvent candidater.
  • La thématique du concours porte sur le logiciel, le matériel n’est pas concerné.
  • Les organisations domiciliées hors France et en Europe sont autorisées à candidater dans la catégorie “Europe/APELL”.
  • La catégorie “Service Public” concerne les administrations centrales et déconcentrées uniquement, les collectivités territoriales ne sont pas concernées et doivent candidater au concours des Territoires Numériques du Libre.
  • Un seul dossier par candidat, dans une seule catégorie.
  • Les gagnants de la session précédente ne sont pas autorisés à candidater à nouveau.

Commentaires : voir le flux Atom ouvrir dans le navigateur

  •  

Comment utiliser Home Assistant avec Alexa (via le Cloud Nabu Casa)

comment utiliser home assistant avec amazon alexa cloud nabu casa 1Vous utilisez Home Assistant pour piloter votre maison connectée ? Bonne nouvelle : il est possible de le connecter facilement à Alexa grâce au service cloud sécurisé de Nabu Casa. Plus besoin de configurations complexes : en quelques étapes, vous pourrez contrôler vos lumières, capteurs ou volets à la voix, directement avec vos enceintes Amazon […]
  •  

Comment utiliser Home Assistant avec Google Home (via le cloud de Nabu Casa)

comment utiliser home assistant avec amazon google home cloud nabu casa 13Vous utilisez Home Assistant et souhaitez le contrôler avec Google Home ? Grâce au service Cloud de Nabu Casa, cette intégration est simple et rapide. Dans cet article, découvrez comment connecter vos appareils, activer les commandes vocales, et même faire parler votre assistant Google en quelques étapes faciles. 1- Organiser ses équipements sur Home Assistant […]
  •  

FlexiSpot BS14 : Test, avis et présentation du siège de bureau à l’ergonomie accessible qui transforme votre quotidien

L’écosystème des sièges ergonomiques est réputé pour ses prix élevés, mais le FlexiSpot BS14 tente sans prétention de bousculer les codes. Il se présente comme une solution redoutablement séduisante pour quiconque cherche le meilleur rapport performance/prix. En misant d’emblée sur un tarif promotionnel agressif, ce fauteuil promet une synergie parfaite entre confort premium, réglages précis ... Lire plus

L'article FlexiSpot BS14 : Test, avis et présentation du siège de bureau à l’ergonomie accessible qui transforme votre quotidien est apparu en premier sur Fredzone.
  •