Le langage de programmation Perl 5.42 est disponible.

Après un an de développement, la nouvelle branche stable du langage de programmation Perl - 5.42 - a été publiée. Pour préparer cette nouvelle version, environ 280 000 lignes de code ont été modifiées (sans compter la documentation et le code généré automatiquement - 93 000), impliquant 1500 fichiers, avec la participation de 64 développeurs.

La branche 5.42 a été publiée selon un calendrier fixe approuvé il y a douze ans, prévoyant la sortie de nouvelles branches stables chaque année et de mises à jour correctives tous les trois mois. Le premier correctif Perl 5.42.1 est prévu dans environ un mois, corrigeant les erreurs les plus significatives détectées lors de l'implémentation de Perl 5.42.0. Parallèlement à la sortie de Perl 5.42, le support de la branche 5.38 prend fin, et des mises à jour ne seront publiées que si des problèmes critiques de sécurité apparaissent. Le processus de développement de la branche expérimentale 5.43 commencera bientôt, sur la base de laquelle un release stable de Perl 5.44 sera formé en juin 2026, sauf décision de passer à la numérotation 7.x.

Principaux changements :

  • De nouveaux opérateurs expérimentaux de traitement de listes - «any { BLOCK } @list» et «all { BLOCK } @list» - ont été ajoutés, qui sont similaires à l'opérateur «grep { BLOCK } @list», mais peuvent renvoyer uniquement des valeurs true ou false. L'opérateur «all» renvoie «true» si la condition est remplie pour tous les éléments de la liste, tandis que l'opérateur «any» renvoie la valeur si la condition est remplie pour au moins un élément. La fonctionnalité des opérateurs est similaire aux fonctions du module List::Util, mais les versions intégrées sont plus rapides et consomment moins de mémoire. use v5.42; use feature 'keyword_all'; no warnings 'experimental::keyword_all'; my @numbers = … if ( all { $_ % 2 == 0 } @numbers ) { say «Tous les nombres sont pairs»; }
  • Pour les champs définis à l'intérieur de la classe, un attribut «:writer» a été mis en œuvre, servant à créer automatiquement une méthode pour écrire la valeur d'une variable dans le champ de l'instance de classe actuelle. class Point { field $x :reader :writer :param; field $y :reader :writer :param; } my $p = Point->new( x => 20, y => 40 ); $p->set_x(60);
  • Ajout de la prise en charge de la définition de méthodes lexicales, qui, par analogie avec la définition de sous-programmes lexicaux (« lexical_subs »), permet de créer des méthodes accessibles uniquement dans la portée lexicale du bloc dans lequel elles ont été créées. Pour créer de telles méthodes, on utilise l'expression « my nom_méthode ».
  • Ajout de l'opérateur « ->& », permettant d'appeler des sous-programmes situés dans la portée lexicale comme s'ils étaient des méthodes. Associé à la possibilité de définir des méthodes lexicales, le nouvel opérateur met en œuvre une fonctionnalité similaire aux méthodes privées.
  • Ajout de l'opérateur d'affectation « A ^^= B », effectuant l'opération « A = A XOR B ».
  • Ajout de la pragma « source::encoding », définissant l'encodage du code source. Pour le code en encodage ASCII, on peut spécifier « use source::encoding 'ascii' » (par défaut), et pour UTF-8 — « use source::encoding 'utf8' », cette dernière expression étant équivalente à « use utf8 ». L'interpréteur affichera une erreur si du code marqué en tant qu'ASCII contient des caractères UTF-8, ou si du code marqué en tant qu'UTF-8 utilise des séquences d'échappement « \x{} ». Pour désactiver la vérification dans une partie du code, on peut utiliser la valeur « use no source::encoding ». En pratique, la pragma ajoutée peut s'avérer utile pour identifier les cas où un développeur a oublié de spécifier « use utf8 » pour du code en encodage UTF-8.
  • Dans l'espace de noms « CORE:: », la fonction chdir() a été ajoutée. Par exemple, cette fonction peut désormais être appelée comme « &CORE::chdir($dir) » ou « my $ref = \&CORE::chdir; $ref->($dir) ».
  • Ajout de l'expression ‘no feature « apostrophe_as_package_separator »’ pour désactiver la prise en charge de l'utilisation du caractère » ‘ » en tant que séparateur de noms de packages (par exemple, « My'Module'Var » au lieu de « My::Module::Var »). À l'origine, dans Perl 5.42, il était prévu de supprimer la prise en charge de tels séparateurs, qui avaient été déclarés obsolètes, mais au cours des discussions, il a été décidé de conserver cette possibilité par défaut, avec une option pour la désactiver.
  • La fonctionnalité « switch » et l'opérateur « ~~ » ont été réintégrés dans les capacités retournées, ayant été précédemment marqués comme obsolètes et prévus pour suppression. À partir des versions Perl 5.36 et 5.42, les capacités « switch » et « ~~ » sont désactivées par défaut lors de lier le code aux versions du langage (par exemple, en spécifiant « use v5.42 »), mais peuvent être activées avec les expressions ‘use feature « switch »‘ et ‘use feature « smartmatch »‘.
  • Ajout du support pour la spécification Unicode 16.0.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster