URL: https://linuxfr.org/news/sortie-de-perl-5-32-0 Title: Sortie de Perl 5.32.0 Authors: contra-sh theojouedubanjo, Davy Defaud, BenoĂźt Sibaud, barmic 🩩, bistouille, Xavier Teyssier, palm123, ZeroHeure, claudex, Vroum, dourouc05, Olivier LEMAIRE et Ysabeau đŸ§¶ Date: 2020ćčŽ06月03æ—„T11:03:35+02:00 License: CC By-SA Tags: perl, sspl, mongodb, opensuse, perl5 et cnll Score: 51 [Perl](https://www.perl.org/) est un langage gĂ©nĂ©raliste créé en 1987 par [Larry Wall](https://fr.wikipedia.org/wiki/Larry_Wall). « _Perl continue de prospĂ©rer dans sa quatriĂšme dĂ©cennie grĂące Ă  une communautĂ© d’utilisateurs et de dĂ©veloppeurs trĂšs dynamique._ », _dixit_ [perldelta](https://metacpan.org/pod/distribution/perl/pod/perldelta.pod#Acknowledgements). Perl est distribuĂ© sous une double licence : [Artistic Licence](https://opensource.org/licenses/Artistic-2.0) et [GPL v1+](https://www.gnu.org/licenses/gpl-3.0.html). La plupart des modules du CPAN [suivent Ă©galement ce mĂȘme traitement](https://www.cpan.org/misc/cpan-faq.html#How_is_Perl_licensed). ![Perl 5 raptor](https://camo.githubusercontent.com/039c0b770fdaff0f1418c5afa4296dfaba5f2875/68747470733a2f2f7261772e6769746875622e636f6d2f6b726169682f7065726c2d726170746f722f6d61737465722f6578616d706c652e706e67) _« Perl 5 raptor » de [kraih](https://github.com/kraih/perl-raptor), licence [CC BY‐SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)_ Tout d’abord un petit lien vers la prĂ©cĂ©dente [dĂ©pĂȘche sur la sortie de Perl 5.30.0](https://linuxfr.org/news/sortie-de-perl-5-30-0) qui explique en particulier le « _releasing flow_ » et des termes spĂ©cifiques Ă  la communautĂ© Perl (_blead_, _pumpking_, etc.). ---- [Perl](https://www.perl.org/) [MetaCPAN](https://metacpan.org/) [Perldelta 5.32.0 (dernier journal des modifications)](https://metacpan.org/pod/release/XSAWYERX/perl-5.32.0/pod/perldelta.pod) ---- # RĂ©trospective de 2019 et mĂȘme un peu plus, morceaux sĂ©lectionnĂ©s ## Les Perl porters migrent vers GitHub Les dĂ©veloppeurs de Perl 5, sous l’impulsion de leur *pumpking* (mainteneur en chef) [Sawyer X](https://github.com/xsawyerx), ont dĂ©cidĂ© de migrer le dĂ©pĂŽt ainsi que le gestionnaire de tickets de Perl 5 vers [GitHub](https://github.com/Perl/perl5). Cela a consistĂ© en deux choses : - migrer le code depuis _[perl5.git.perl.org](https://perl5.git.perl.org/perl.git)_ vers [Perl 5 sur GitHub](https://github.com/Perl/perl5) ; le dĂ©pĂŽt GitHub existait dĂ©jĂ  en miroir, le dĂ©pĂŽt principal devient donc le miroir et le miroir devient le dĂ©pĂŽt principal :D ; - migrer les tickets depuis [Perl Request Tracker](https://rt.perl.org/Public/Search/Results.html?Query=Queue%20=%20%27perl5%27) vers [GitHub issue tracker](https://github.com/Perl/perl5/issues), ça peut paraĂźtre simple, mais il y avait beaucoup de tickets et a fallu « scripter » pour rĂ©cupĂ©rer et rĂ©injecter les tickets (pour modifier les URL par exemple). ## Version majeure de Request Tracker L’entreprise [Best Practical](https://bestpractical.com) fondĂ©e par [Jesse Vincent](https://fr.wikipedia.org/wiki/Jesse_Vincent) (un dev Perl trĂšs reconnu et ancien Perl Pumpking) derriĂšre le logiciel professionnel de ticketing [Request tracker](https://bestpractical.com/request-tracker) a annoncĂ© [l’arrivĂ©e imminente de la version **5**](https://bestpractical.com/blog/2019/12/20-years-of-rt-starting-20-more-with-rt-5-mtz8c) puis la disponibilitĂ© de la [5.0.0 beta 1](https://bestpractical.com/blog/2020/5/rt-50-beta-1-now-available). Cette version contient notamment la migration vers [Bootstrap](https://getbootstrap.com) en tant que cadriciel CSS et le passage Ă  [chart.js](https://www.chartjs.org/) pour les graphiques. [Request Tracker](https://bestpractical.com/request-tracker) est un gĂ©ant de la gestion de tickets d’incident, utilisĂ© par de trĂšs nombreuses industries dans le monde entier. C’est un logiciel de gestion de tickets d’incident de qualitĂ© professionnelle, sous licence GPL v2 ([code source](https://github.com/bestpractical/rt)), avec des possibilitĂ©s infinies de personnalisations et d’interfaçage. Vous pouvez trouver le code source sur le [dĂ©pĂŽt GitHub](https://github.com/bestpractical/rt), ainsi que de [la doc et du support français](https://www.request-tracker.fr/), par [Easter‐Eggs](https://www.easter-eggs.com/Presentation-d-Easter-eggs), qui est une [entreprise française du NumĂ©rique libre](https://cnll.fr/news/les-ssll-deviennent-enl/). Longue vie a RT5 ! ![Logo RT](https://i.imgur.com/ifHwJNH.png) ## Programmation orientĂ©e objet native bientĂŽt intĂ©grĂ©e dans le cƓur de Perl L’annĂ©e 2019 a Ă©tĂ© Ă©galement celle d’un travail sur le module **Cor**, qui veut apporter l’orientĂ© objet dans le cƓur de Perl. En effet, Perl permet de simuler facilement l’orientĂ© objet depuis toujours avec les notions de ***packages*** et les ***tie***/***bless***, mais ce n’est pas hyper Ă©lĂ©gant. De nombreux trĂšs bons modules ont ainsi Ă©tĂ© créés pour combler ce dĂ©faut (**Moo**, **Moose**, **Mouse**, etc.). **Cor** est une tentative dirigĂ©e par [Curtis Ovid Poe](https://gist.github.com/Ovid) d’inclure ces fonctionnalitĂ©s dans le cƓur de Perl. La spĂ©cification est collaborative sur son [Gist GitHub](https://gist.github.com/Ovid/68b33259cb81c01f9a51612c7a294ede). Plus d’infos : - [wiki](https://github.com/Ovid/Cor/wiki) ; - [comparaison de syntaxe avec Moose](https://github.com/Ovid/Cor/wiki/Cookbook) ; - [premiĂšre implĂ©mentation (proto)](https://github.com/stevan/Cor). ## Nouveau livre de briand d foy Pour celles et ceux qui ne connaissent pas, le cadriciel Web [Mojolicious](https://www.mojolicious.org/) est une vĂ©ritable piĂšce de maĂźtre qui n’a rien Ă  envier aux *Django, RoR, Flask ou ChoisissezCeQueVousVoulez*. C’est d’ailleurs bien plus qu’un framework web... PlutĂŽt un framework de dĂ©veloppement. Par exemple, la prochaine version majeure de [Bugzilla](https://www.bugzilla.org/) sera notamment [réécrite avec](https://dylan.hardison.net/2020/02/09/bugzilla-project-updates-2020/) . **Mojolicious** est un travail communautaire initiĂ© par [Sebastian Riedel](https://twitter.com/kraih?lang=fr) (OpenSuse) qui Ă©tait Ă©galement le crĂ©ateur du cadriciel [Catalyst](http://www.catalystframework.org/) (cadriciel Web MVC). Un membre trĂšs reconnu de la communautĂ© Perl [brian d foy](https://en.wikipedia.org/wiki/Brian_d_foy) (_sic_) a Ă©crit un livre sur les [clients Web Ă©crits avec Mojolicious](https://leanpub.com/mojo_web_clients). ![mojolicious](https://i.imgur.com/8J7DWtr.png) ## Nouveau livre : compilation d’articles techniques Sortie de [The best of Perl Hacks](https://perlschool.com/the-best-of-perl-hacks) par **Dave Cross**. C’est une sorte de recueil de billets de blogs sĂ©lectionnĂ©s (comme furent en leurs temps les « _Best of Perl Journal_ » qui Ă©taient en plusieurs volumes !). **Dave Cross** est un expert du largage Perl et il a tenu pendant des annĂ©es un blog technique. Il a dĂ©cidĂ© de sĂ©lectionner les meilleurs articles des dix derniĂšres annĂ©es pour les compiler dans un livre. ## Nouveau livre pour dĂ©butants Perl Sortie du nouveau livre _[Perl Taster: Your First Two Hours With Perl](https://perlschool.com/books/perl-taster)_, toujours par Dave Cross. Ce livre cible les dĂ©butants en Perl. ## Perl School Les trois livres vus prĂ©cĂ©demment font partie de [PerlSchool](https://perlschool.com) qui est une sorte de « maison d’édition indĂ©pendante de livres dĂ©matĂ©rialisĂ©s ». D’autres livres sont sortis (moins rĂ©cemment) sous le giron de PerlSchool : - _[Selenium and Perl](https://perlschool.com/books/selenium-perl)_, par **John Davies** ; - _[Cucumber and Perl](https://perlschool.com/books/cucumber-and-perl)_, par **John Davies** ; - _[Learning Perl excercises](https://perlschool.com/books/learning-perl-exercises)_, par **brian d foy**. ## Pilote officiel mongodb abandonnĂ© AprĂšs avoir fait grincer des dents la communautĂ© open source dans son ensemble avec son changement de licence vers SSPL (on en a d’ailleurs parlĂ© dans [un journal sur LinuxFr.org](https://linuxfr.org/users/spack/journaux/sspl-all-your-service-are-belong-to-us)), MongoDB s’est mis une partie des dĂ©veloppeurs Perl Ă  dos en [abandonnant son pilote officiel pour Perl](https://metacpan.org/pod/MongoDB#END-OF-LIFE-NOTICE). Ceux qui travaillaient avec MongoDB en Perl ne vont pas le regretter, car le pilote n’était de toute façon souvent pas Ă  jour et une implĂ©mentation non officielle (module pure-perl Mango) existait dĂ©jĂ . L’ancien dev de l’implĂ©mentation pure Perl du pilote MongoDB [Mango](https://metacpan.org/pod/Mango) ([Sebastian Riedel](https://metacpan.org/author/SRI)... encore lui !) a rĂ©pondu Ă  cette nouvelle par un cinglant « bon dĂ©barras ». Par le passĂ©, il avait dĂ©jĂ  rapportĂ© que le dĂ©veloppement de mango **Ă©tait un calvaire** car [MongoDB ne lui fournissait pas l’aide nĂ©cessaire et qu’il Ă©tait obligĂ© de lire le code des pilotes officiels dans d’autres langues](https://www.reddit.com/r/perl/comments/cvuyko/the_mongodb_perl_driver_is_being_deprecated). Si vous utilisiez ou envisagiez d’utiliser MongoDB parce que... c’est un peu « _hype_ », un conseil donc, FUYEZ ! ## Sortie de Tau Station Tau Station est selon son Ă©quipe de dĂ©veloppement un **jeu en mode texte massivement multijoueur dans un navigateur**. Il est dĂ©crit en français dans ce [billet de blog](https://blog.kharec.info/post/mmorpg-tau-station/) de [Sandro Cazzaniga](https://blog.kharec.info). Il est gratuit... Allez tester cette pĂ©pite : [TauStation](https://taustation.space/) ![Tau Station](https://i.imgur.com/MHCwdhJ.png) ## PullRequestClub Suite au dĂ©funt **CPAN Pull Request Challenge**, une autre Ă©quipe a mis en place le [PullRequestClub](https://pullrequest.club/hello). C’est un site Web ([code source](https://github.com/kyzn/PRC)) qui consiste Ă  encourager les dĂ©veloppeurs Ă  faire des _pull requests_ en mettant en relation mainteneurs gentils avec dĂ©veloppeurs motivĂ©s. Je trouve que ça ressemble un peu dans l’esprit Ă  [Hacktoberfest](https://hacktoberfest.digitalocean.com). ![PullRequestClub](https://i.imgur.com/FclmGks.png) ## PerlWeeklyChallenge Les dĂ©veloppeurs Perl ont toujours aimĂ© s’amuser en programmant avec des petits dĂ©fis (Perl golf, japhs, poĂ©sie Perl, code obfusquĂ©...). ![Image regex golf](https://imgs.xkcd.com/comics/regex_golf_2x.png) _xkcd ([lien](https://xkcd.com/1313/)) — Licence CC BY‐NC_ Une compĂ©tition amicale a Ă©tĂ© mise en place rĂ©cemment et connaĂźt un grand succĂšs, il s’agit du [PerlWeeklyChallenge](https://perlweeklychallenge.org) ! Cette initiative qui propose des challenges d’algorithmique en Perl ou Raku (ou parfois d’autres langages) a clairement marquĂ© l’annĂ©e 2019. Cette initiative, orchestrĂ©e de main de maĂźtre par [Mohammad Anwar](https://github.com/manwar) (de _[Perl Weekly](https://perlweekly.com/)_) consiste Ă  remplir des petits « dĂ©fis » hebdomadaires. Un seul mot pour terminer sur ce sujet... **Un grand merci Mohammad !** ## Cnext [cnext](https://next-cpan.github.io/cnext/) est un nouveau **client CPAN**. L’approche de ce client est diffĂ©rente de [cpanminus](https://metacpan.org/pod/App::cpanminus) ou [cpm](https://github.com/skaji/cpm) car il ne cible pas l’architecture des serveurs **CPAN** mais GitHub. L’index est dans un dĂ©pĂŽt github ([pause-index](https://github.com/pause-play/pause-index)). Plus d’infos sur l’index dans la [doc de next-indexes](https://github.com/next-cpan/next-indexes). À noter que cpanminus utilise aussi un index alternatif [metaDB](https://cpanmetadb.plackperl.org) et qu’il en existe plusieurs autres. **cnext** n’est aujourd’hui pas encore fonctionnel. ## Perl 5 => Perl, Perl 6 => Raku 2019 a Ă©galement connu le renommage de Perl 6 en Raku. Je n’en dis pas plus, on y reviendra peut-ĂȘtre dans une dĂ©pĂȘche dĂ©diĂ©e (?) (***need help***). ## Nouvel installeur de l’interprĂ©teur perl (en bash) Parmi les `perlbrew`, `plenv` etc. voici un petit nouveau : [perl-install](https://github.com/skaji/perl-install). L’idĂ©e Ă©tant d’implĂ©menter l’installeur en `bash` pour pouvoir installer sur des machines ne disposant pas de Perl. Perl est partout me direz-vous... Oui mais aprĂšs l’annonce d’Apple de ne pas fournir les interprĂ©teurs pour `ruby`, `python` et `perl` dans leur OS de base, c’est potentiellement un nouveau besoin d’avoir un installeur dans un langage encore supportĂ©. ## Toujours plus de Continuous Integration Perl En plus des vĂ©nĂ©rables travis, circle ci, appveyor, gitlab ci, l’annĂ©e 2019 a vu fleurir quelques github actions pour perl : [installer avec cpm](https://github.com/marketplace/actions/install-with-cpm), [installer avec cpanminus](https://github.com/marketplace/actions/install-with-cpanm), [environement Perl](https://github.com/marketplace/actions/setup-perl-environment) et [Perl Critic](https://github.com/marketplace/actions/github-action-for-perl-critic) Les images officielles pour perl : [dockerhub Perl](https://hub.docker.com/_/perl) J’en profite pour placer quelques liens vers des helpers (GitHub actions ou d’autres infrastructures) : - [helpers Gitlab](https://gitlab.com/rsrchboy/perl-ci) - [helpers Travis](https://github.com/travis-perl/helpers) - [helpers GitHub houseabsolute](https://github.com/houseabsolute/ci-perl-helpers) ou encore [helpers GitHub cip](https://github.com/plicease/cip) ## Audrey Tang [Audrey Tang](https://en.wikipedia.org/wiki/Audrey_Tang) est une membre respectĂ©e et programmeuse gĂ©niale qui a eu beaucoup d’influence sur **Perl** et **Raku**. Elle occupe depuis quelques annĂ©es un poste de ministre Ă  TaĂŻwan. C’est une personnalitĂ© au parcours atypique et prĂ©coce : elle fut la plus jeune ministre sans portefeuille de TaĂŻwan et elle travaille notamment sur le dĂ©veloppement de logiciels libres dans le domaine social et le domaine de l’accĂšs du public aux donnĂ©es. Parmi ses travaux notables, on trouve [Pugs](https://fr.wikipedia.org/wiki/Pugs) et [EtherCalc](https://fr.wikipedia.org/wiki/EtherCalc) (et pas mal d’autres comme [Module::Install](https://metacpan.org/pod/Module::Install), des contributions Ă  [Request Tracker](https://bestpractical.com/request-tracker) vu plus haut, [SVK](https://fr.wikipedia.org/wiki/SVK_(logiciel)), [PAR](https://metacpan.org/pod/PAR), [Slash](https://en.wikipedia.org/wiki/Slash_(software)) etc.) # DĂ©veloppement de Perl ## Releasing flow Pour le releasing flow en gĂ©nĂ©ral, se rĂ©fĂ©rer Ă  la [dĂ©pĂȘche sur Perl 5.30.0](https://linuxfr.org/news/sortie-de-perl-5-30-0#toc-autres-versions-de-perl) qui dĂ©taille plus les notions comme **blead**, **pumpking** ou encore le **schĂ©ma de versioning**. Perl 5.30.0 a Ă©tĂ© [publiĂ© en mai 2019](https://www.nntp.perl.org/group/perl.perl5.porters/2019/05/msg254844.html) et le *pumpking* Ă©tait **Sawyer X**. Pour Perl 5.32.0, pas de changement, le mainteneur en chef reste le mĂȘme mais les mainteneurs de versions de dĂ©veloppement varient d’oĂč [cet appel Ă  volontaires en dĂ©but de cycle de dĂ©veloppement](https://www.nntp.perl.org/group/perl.perl5.porters/2019/05/msg254848.html). Ensuite durant une annĂ©e, des versions de dĂ©veloppement (version perl **5.impair.sousversion**) sont publiĂ©es chaque mois. L’intĂ©gration de code dans la branche de dĂ©veloppement passe des tests de compilation (**github action** dans le dĂ©pĂŽt, matrice d’options `configure`, `make`, `make test`) et des « smoke tests » (des tests dans des VMs). Enfin, aprĂšs chaque sortie de version de developpement, un rapport de test de la **« riviĂšre CPAN »** (ensemble de **3000 modules CPAN** dont beaucoup d’autres modules dĂ©pendent) est exĂ©cutĂ© et sert Ă©galement pour vĂ©rifier les non-rĂ©gressions. Il n’y a pas de date de sortie dĂ©cidĂ©e pour la version stable, donc elle sort quand elle est prĂȘte. Lors du dĂ©veloppement de perl 5.30.0, les versions de dev s’étaient arrĂȘtĂ©es Ă  `5.29.10`, cette fois les versions de dev s’étalent un tout petit peu plus (`5.31.11`). En mars **Sawyer X** a dĂ©cidĂ© de [dĂ©caler la 5.31.11 d’une semaine](https://www.nntp.perl.org/group/perl.perl5.porters/2020/04/msg257359.html) et de [faire une nouvelle version de dev et de dĂ©caler d’un mois la sortie de la version stable](https://www.nntp.perl.org/group/perl.perl5.porters/2020/04/msg257375.html). Finalement il n’y aura pas eu de `5.31.12` mais une `5.32.0-RC0` le 30 mai. Voici une frise reprĂ©sentative des versions : ![Versions](https://i.imgur.com/TO27yLN.png) ------ ## PrĂ©cĂ©dentes dĂ©pĂȘches sur les sorties des versions de Perl - [Sortie de Perl 5.10](https://linuxfr.org/news/sortie-de-perl-5100) en 2007. - [Sortie de Perl 5.12](https://linuxfr.org/news/perl-512-une-constante-jeunesse) en 2010. - [Sortie de Perl 5.14](https://linuxfr.org/users/jbbourgoin/journaux/sortie-de-perl-5140) en 2011. - [Sortie de Perl 5.16](https://linuxfr.org/news/perl-5-16-0) en 2012. - [Sortie de Perl 5.18, 5.20 et 5.22](https://linuxfr.org/news/sortie-de-perl-5-22-0) (5.18 en 2013, 5.20 en 2014, 5.22 en 2015). - [Sortie de Perl 5.24, 5.26, 5.28 et 5.30](https://linuxfr.org/news/sortie-de-perl-5-30-0) (5.24 en 2016, 5.26 en 2017, 5.28 en 2018, 5.30 en 2019). # CHANGELOGS **Perl 5.32.0** est sorti le 20 juin ([annonce](https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257547.html)). Place maintenant aux diffĂ©rents **CHANGELOG** ou **perldelta** qui n’ont pas Ă©tĂ© traitĂ©s sur **LinuxFR**. # Sortie de Perl 5.30 La version **5.30.0** a dĂ©jĂ  Ă©tĂ© traitĂ©e dans la [dĂ©pĂȘche sortie de perl 5.30](https://linuxfr.org/news/sortie-de-perl-5-30-0), on passe donc directement Ă  la version suivante qui est la *version patch* **5.30.1**. ## 5.30.1 ### Mise Ă  jour des modules - Seulement **Module::Corelist** qui contient la liste des modules (autant dire aucun changement) ### Compilation - Un correctif concernant **OpenBSD**, **FreeBSD** et **Solaris** qui concerne la macro `ECHO` lorsqu’on souhaite utiliser `dtrace`. Le configure de Perl ne dĂ©finit pas correctement cette variable, mais elle est gĂ©nĂ©ralement dĂ©finie par le `make` du systĂšme. Pour avoir le problĂšme, il faut ĂȘtre par exemple sur une **Solaris** et configurer avec `-Dusedtrace`. Le correctif se trouve dans le `Makefile.SH`. - Les tests de ***locale*** sont en erreur sur Windows Ă  cause d’un double bogue (cĂŽtĂ© Windows). La solution pour corriger a Ă©tĂ© de faire plus de conversions en Perl et de laisser moins de travail Ă  Windows. ### Corrections #### Groupes effectifs Un correctif sur le setter de la variable ```$)``` (si on a les privilĂšges de le faire). La variable **$)** permet d’accĂ©der aux **effective groups**. Par exemple : `perl -e "print $)"` Nous donnera : `1000 4 24 27 30 46 116 126 999 1000 1001` Et pour info voici la sortie de `id` : ```bash uid=1000(johndoe) gid=1000(johndoe) groups=1000(johndoe),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),999(docker),1001(usb) ``` Parmi les autres variables en Perl pour accĂ©der Ă  ce type d’infos (et qu’on peut utiliser pour potentiellement baisser les privilĂšges) : - `$<`, identifiant utilisateur rĂ©el ; - `$>`, identifiant utilisateur effectif ; - `$(`, identifiant de groupe rĂ©el ; - `$)`, identifiant de groupe effectif (on vient d’en parler). #### Autres - Correction d’un bogue avec `readline` qui Ă©value en contexte de liste alors qu’il n’attend qu’une seule valeur de retour. La fonction `readline` en Perl permet de jouer avec les _handles_ de fichiers (`my $line = ` est Ă©quivalent Ă  `my $line = readline(STDIN);`) - Un bogue mystĂ©rieux avec la gestion des signaux et **sv_gets** - Une fuite de mĂ©moire lorsqu’on essaye de faire une correspondance d’expression rationnelle entre une chaĂźne non explicitement marquĂ©e **UTF‐8** et un caractĂšre Unicode. Le cas d’exemple est `"a" =~ /\N{U+2129}/ while 1;` et le code voit qu’il y a un problĂšme de correspondance, mais il manque un retour de fonction. - Correction d’un dĂ©bordement de tampon (_buffer overflow_) lorsqu’on se sert de prĂ©cision nĂ©gative `sprintf("%.*a", -10000, $x)` (pourquoi faire ça ?) - correction d’un bogue sur l’appel de `scalar` et le multidĂ©rĂ©fĂ©rencement qui posait un problĂšme d’assertion dans l’étape de compilation. ## 5.30.2 ### Compilation #### MYMALLOC Le build de `MYMALLOC` sur Windows a Ă©tĂ© corrigĂ©. *MYMALLOC* est l’implĂ©mentation Perl de `malloc`. On peut l’utiliser si on donne `-Dusemymalloc` Ă  `Configure` : ``` /* This file contains Perl's own implementation of the malloc library. * It is used if Configure decides that, on your platform, Perl's * version is better than the OS's, or if you give Configure the * -Dusemymalloc command-line option. */ ``` #### Autres - prise en charge de **GCC 10** ! ### Corrections #### printf %n Correction d’un bogue avec le **trĂšs spĂ©cial** format **%n** de `printf` et `sprintf`. D’habitude on utilise `printf` pour afficher et formater un argument dans une chaĂźne, mais lĂ  c’est diffĂ©rent et on va pouvoir stocker l’emplacement dans la chaĂźne pour le stocker dans un argument. D’aprĂšs la [doc de sprintf](https://perldoc.perl.org/functions/sprintf.html) : `%n special: *stores* the number of characters output so far into the next argument in the parameter list` Voici un exemple : ```perl perl -e 'printf("123 %n 456 -> ", $count); print $count;' ``` va produire ``` 123 456 -> 4 ``` Le bogue Ă©tait liĂ© Ă  l’utilisation conjointe de `%n` et d’**UTF‐8** (produisant une mauvaise valeur) avec un Perl ayant l’option de dĂ©bogage activĂ©e (dans ce cas Perl se mettait Ă  paniquer). Et pendant qu’on y est : `Don’t fall into the trap of using a printf when a simple print would do. The print is more efficient and less error prone.` #### Autres - Correctif d’une fuite mĂ©moire aprĂšs une refactorisation des classes de caractĂšres dans les expressions rationnelles (`m/[...]/`). Le problĂšme a Ă©tĂ© introduit en **5.26**. Ce correctif est marquĂ© comme candidat Ă  ĂȘtre rĂ©percutĂ© sur des versions correctives de **5.26** et **5.28** - correction d’un bogue dans les [propriĂ©tĂ©s Unicode](https://perldoc.pl/perluniprops) `qr/\p{nv:qnan}/`. `\p{...}` introduit une propriĂ©tĂ© Unicode. Ici de la forme `\p{nom:valeur}`. `nv` est un [double](https://perldoc.pl/perlguts#Formatted-Printing-of-IVs,-UVs,-and-NVs) et donc ça veut dire « _Numeric Value is Not a Number_ ». Il s’agissait d’un ***heap buffer overflow*** - Correction d’une **assertion failure** dans les expressions rationnelles avec *script run* (`(sr:...)` incomplets. - Une limitation de l’exĂ©cution de code rĂ©cursif dans les expressions rationnelles (`(?{ code })` et `(??{ code })`) est mieux gĂ©rĂ©e. En effet, le code profondĂ©ment rĂ©cursif Ă©mettait un _warning_. Le correctif consiste Ă  n’appliquer la limitation plus qu’à `(??{ code })` (Ă©value le retour du code embarquĂ©). ## 5.31.1 ### AmĂ©liorations du cƓur de Perl - Interdiction d’utiliser `vec` et les opĂ©rations `bitwise` sur les caractĂšres Unicode aprĂšs `0xff`. Ça ne fait aucun sens, car ce sont des opĂ©rations bit Ă  bit et les codes au‐delĂ  de 0xff sont reprĂ©sentĂ©s en UTF‐8. - `Sys::Hostname::hostname()` n’accepte plus d’argument (dĂ©prĂ©ciĂ© depuis **5.28**) ### Mise Ă  jour des modules #### Storable Mise Ă  jour de [Storable](https://perldoc.pl/Storable) pour rĂ©gler un problĂšme de clone. **Storable** est un module qui permet de sĂ©rialiser et faire persister les structures de donnĂ©es Perl de façon rapide, compacte (binaire) et portable. Le bogue est tirĂ© par les cheveux, il faut combiner *affaiblissement de rĂ©fĂ©rence* + *expression rationnelle compilĂ©e dans une variable* + *autovivication* + *clone en profondeur*. Comme ceci : ```perl my $foo = [qr//,[]]; weaken($foo->[1][0][0] = $foo->[1]); dclone $foo; ``` #### Autres - Correction sur le module **IO**. La fonction **sendto** n’utilisait pas la « to » et donc ignorait l’adresse paire - **Pod::Parser** est supprimĂ© du core mais reste Ă©videmment accessible grĂące au **CPAN** ### Compilation - Le script **autodoc.pl** a Ă©tĂ© fortement remaniĂ© - Fin du support du build pour **Windows CE** ### Corrections #### Sub Zero Une parenthĂšse fermante fallacieuse (sans ouvrante correspondante) pouvait poser problĂšme dans un **sub parse**. Un ***sub parse*** est une analyse dans une expression rationnelle comme `my $str =~ s/(41)/1ăƒ‰ăƒ«+1/e` qui va remplacer 41 par 42 avec une analyse de ```1ăƒ‰ăƒ«+1``` pour faire ```41+1=42```. Ce comportement est activĂ© par le modificateur `/e` (_evaluate_). Le problĂšme c’était, qu’en interne, des parenthĂšses Ă©taient parfois ajoutĂ©es dans la construction de l’arbre pour aider l’analyseur, et la parenthĂšse fermante pouvait alors interfĂ©rer. La solution est d’ajouter un symbole *virtuel* qui ne peut pas ĂȘtre Ă©crit dans le source. #### Autres - Un correctif dans **PerlIO** concernant les descripteurs de fichier et la fonction `close` - Comme documentĂ© ```%{^CAPTURE_ALL}``` est a prĂ©sent un alias de ```%-``` et non ```%+``` (erreur) - Un autre bogue sur `%{^CAPTURE}` et `@{^CAPTURE}`. Comme vous le savez peut‐ĂȘtre (pas) en Perl `$var` est diffĂ©rent de `@var` qui est diffĂ©rent de `%var`. Le _hash_ `%{^CAPTURE}` Ă©tait vide si l’on avait appelĂ© `@{^CAPTURE}` avant (et inversement). - Correction d’un _integer overflow_ sur des valeurs extrĂȘmement grandes de nombres Ă  virgule flottante (pas grand en taille mais en nombre de chiffres aprĂšs la virgule). Le correctif consiste Ă  tester la taille. - Mauvais analyse lexicale des `0x` ou `0b` incomplets (sans rien aprĂšs). `print -e 'print 0x - 1'` produit `1` ... - Le **sub parsing** a Ă©tĂ© Ă©galement amĂ©liorĂ© en rĂšgle gĂ©nĂ©rale pour accepter plus de choses qui sont acceptĂ©es par le *parsing standard* - Correction d’un bogue dans l’affectation des rĂ©fĂ©rences de code (`\&f1 = \&f2`) dans le _package_ par dĂ©faut (`main::`). ## 5.31.2 ### AmĂ©liorations du cƓur de Perl #### Total annihilation Il existe une variable d’environnement [PERL_DESTRUCT_LEVEL](https://perldoc.pl/perlhacktips#PERL_DESTRUCT_LEVEL) qui permet de forcer l’interprĂ©teur Ă  libĂ©rer Ă  la fin de son exĂ©cution tout ce qu’il a allouĂ©, ce qui permet de simuler en quelque sorte la [gestion mĂ©moire par rĂ©gion](https://fr.wikipedia.org/wiki/Gestion_de_m%C3%A9moire_par_r%C3%A9gions) (et d’éviter les fuites de mĂ©moires). Lorsque cette variable n’est pas dĂ©finie, Perl laisse le soin Ă  `exit` de faire ce travail. L’amĂ©lioration consiste Ă  prendre en compte cette variable mĂȘme lorsque l’interprĂ©teur n’a pas Ă©tĂ© compilĂ© en mode dĂ©bogage. #### Autres - Nouvelle erreur **No digits found for %s literal** lorsqu’on Ă©crit en base hexa (`0x...`) ou binaire (`0b...`) quelque chose qui n’est pas de l’hexa ou du binaire - Meilleure gestion de la propagation des signaux critiques dans les `eval` - Correction d’un bogue dans les blocs `CHECK`, `BEGIN`, etc., il s’agit d’un problĂšme de gestion d’`exit`. - De nombreuses fonctions rĂ©cursives pour parcourir l’arbre des opĂ©rateurs pendant la compilation ont Ă©tĂ© dĂ©roulĂ©es, ça permet d’ĂȘtre moins agressif avec la pile (perf ?). ### Compilation - Support de [Bison](https://www.gnu.org/software/bison/) (le gĂ©nĂ©rateur d’analyseur syntaxique) versions **3.1** jusqu’à **3.4** - Correction mineure du Configure avec `clang`. - `-Duse64bitint` devient la valeur par dĂ©faut si on compile sur **VMS** - ProblĂšme de compilation avec **VC++ 6.0** qui ne sera pas corrigĂ©, car le support va ĂȘtre arrĂȘtĂ©. ### Corrections - Des corrections en lien avec l’amĂ©lioration de la gestion des signaux dans les `eval`, la gestion des `0x...` et `0b...` et les `exit` dans les blocs d’**INIT** - Correction concernant les ouvertures de fichiers temporaires `open my $fh, ">>+", undef` ; la correction de ce bogue est ce qui a cassĂ© la compilation **VC++6** - Correction d’une erreur de segmentation mĂ©moire (**SEGV**) avec le dĂ©rĂ©fĂ©rencement multiple (rĂ©cursive) dans les expressions rationnelles (avec `*`, par exemple) ## 5.31.3 ### AmĂ©liorations du cƓur de Perl #### Range et conversions implicites L’opĂ©rateur `range` gĂšre mieux les conversions implicites. L’opĂ©rateur range est `..` et il permet de faire des choses simples comme ```perl print 1..10 ``` qui va gĂ©nĂ©rer une liste de 1 Ă  10 : ``` 12345678910 ``` Ou il peut faire des choses comme ```perl "ab".."ba" ``` qui va donner ``` ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba ``` Dans le cas de ```"0"".."-1"```, on gĂ©nĂ©rait avant une liste de 0 jusqu’à 99 et maintenant ça sera une liste vide. #### Keep the stuff left `\K` est Ă  prĂ©sent interdit dans les assertions _lookbehind_ et _lookahead_ car : 1. le comportement est cassĂ© : 2. personne ne peut dire quel est le comportement attendu. `\K` est **"Keep the stuff left of the \K, don't include it in $&"** Matcher sans garder. C’est dĂ©jĂ  en soi un `lookbehind`, l’inclure dans un autre `lookbehind` Ă©tait donc tirĂ© par les cheveux. #### Autres - Nouvelle fonction `parse_subsignature()` qui permet d’aller plus loin dans l’implĂ©mentation des signatures - De nouvelles macros pour gĂ©rer de maniĂšre sĂ©curisĂ©e le changement de locale (qui nĂ©cessite souvent l’acquisition d’un mutex) - Optimisation de l’allocation des structures internes pendant l’analyse : la taille d’une entrĂ©e dans l’inventaire pour l’allocation de structure d’opĂ©rateur est rĂ©duite de **8 bits** par opĂ©rateur sur les machines **64 bits** ### Corrections #### Propagation des exceptions Correction de la propagation des signaux lorsque ```$@``` est forcĂ© Ă  une valeur numĂ©rique. Normalement ```$@``` contient le message d’erreur de l’exception. `perl -e 'eval { die }; print $@'` nous donne `Died at -e line 1.`. Le problĂšme c’est que dans le cas oĂč on veut propager (donc une exception aprĂšs une autre exception), une valeur numĂ©rique dans `$@` est ignorĂ©e. ```perl perl -e '$@ = 100; die' ``` donne ``` Died at -e line 1. ``` Or on voudrait quelque chose comme ```perl perl -e '$@ = "100"; die' ``` qui donne ``` 100 ...propagated at -e line 1. ``` donne ``` Died at -e line 1. ``` #### Exception en lecture seule, l’histoire sans fin Un correctif sur un problĂšme *« amusant »*. Lorsqu’on met la variable ```$@``` en read only et qu’une exception se dĂ©clenche, perl veut Ă©crire dans ```$@``` qui est read-only, ce qui gĂ©nĂšre une exception qui veut Ă©crire dans `$@` qui... vous avez compris le problĂšme... ...Et ça se finissait en dĂ©bordement de pile. #### Autres - Encore une correction sur les `0b...` et `0x...` ## 5.31.4 ### AmĂ©liorations du cƓur de Perl - Une amĂ©lioration pour les dĂ©veloppeurs qui consiste Ă  pouvoir sĂ©parer les Ă©tapes de compilation et d’optimisation des expressions rationnelles compilĂ©es (`qr/.../`). Il faut avoir compilĂ© Perl en mode dĂ©bogage. ### Compilation - AmĂ©lioration du script `Configure` pour la dĂ©tection de `clang` et **C++**. ### Corrections - correction d’une fuite mĂ©moire dans les reconnaissances d’expressions rationnelles avec une chaĂźne de caractĂšres UTF‐8 ; - encore du travail sur `0x` et `0b`, dĂ©cidĂ©ment ! ## 5.31.5 ### AmĂ©liorations du cƓur de Perl - Les variables modifiables ne sont plus autorisĂ©es en contexte de constante. Ça signifie que `my $var; $sub = sub () { $var };`, qui Ă©tait dĂ©prĂ©ciĂ© depuis **5.22**, produit Ă  prĂ©sent une erreur si `$var` est modifiĂ© dans une autre partie du code (il faut ajouter un **return**). - Documentation des piles internes de l’interprĂ©teur Perl - Documentation mise Ă  jour pour utiliser HTTPD quand c’est possible - Nettoyage et mise Ă  jour des vieux liens sur les courriels, etc. - Changements purement internes : ajout d’index pour garder l’ancienne position dans des piles Perl, des arguments en plus dans des macros en relation avec **UTF‐8** ### Compilation - AmĂ©lioration de Configure concernant `d_u32align` (dĂ©faut Ă  oui, car la question n’est posĂ©e que sur machine 32 bits) et `malloc_usable_size` ## 5.31.6 ### AmĂ©liorations du cƓur de Perl #### Script runs Les **script run** ne sont plus expĂ©rimentales. Un ***script run*** n’est probablement pas ce que vous pensez. En fait, il s’agit de contrĂŽler que toute la sĂ©quence de caractĂšres appartient au mĂȘme **script Unicode**. On peut Ă©crire souvent les mĂȘmes choses visuellement pour l’humain mais Ă  partir d’un ensemble diffĂ©rent de caractĂšres Unicode. C’est assez critique car ça peut mener Ă  du [spoofing d’url](https://en.wikipedia.org/wiki/Spoofed_URL). Une expression rationnelle dans un script _run_ va vĂ©rifier que tout ce qui est lu fait partie du mĂȘme script. #### Autres - Les assertions alpha ne sont plus expĂ©rimentales. Il s’agit des **assertions** d’expressions rationnelles du type ***lookbehind*** et ***lookahead*** qui sont **non capturantes** (_cf._ [doc](https://metacpan.org/pod/release/WOLFSAGE/perl-5.31.8/pod/perlre.pod#Lookaround-Assertions)) - La vĂ©rification des fonctionnalitĂ©s est plus rapide - Perl a migrĂ© vers [GitHub](https://github.com/Perl/perl5) (pas vraiment une amĂ©lioration du cƓur de Perl, mais bon Ă  noter). Cela comprend le dĂ©pĂŽt Git et le systĂšme de suivi de bogues. Les rapports de bogue liĂ©s Ă  la sĂ©curitĂ© se font toujours en privĂ©. - Un TRÈS gros travail a Ă©tĂ© fait sur le **lexer**. Un gros rĂ©usinage d’une trĂšs grosse fonction de 4 100 lignes avec un dĂ©coupage en de multiples fonctions. Le rĂ©sultat sera plus facile Ă  comprendre et maintenir. - Le code qui gĂšre la **translitĂ©ration** (`tr///`) a Ă©tĂ© retravaillĂ© entiĂšrement avec de nombreux bogues corrigĂ©s (Unicode, `/s`, autres). ### Mise Ă  jour des modules - Un nouvel outil **streamzip** a Ă©tĂ© ajoutĂ©. Il permet de zipper ce qui est envoyĂ© a l’entrĂ©e standard. ### Compilation - Correction d’un bogue dans `Configure` avec **GCC 10** ### Corrections - Une concatĂ©nation multiple entre une fonction mal dĂ©finie et des chaĂźnes lĂšve bien un avertissement. ## 5.31.7 ### AmĂ©liorations du cƓur de Perl - Introduction du nouvel opĂ©rateur `isa`. Ça doit parler aux programmeurs Perl puisque depuis looongtemps il existe un module `UNIVERSAL` qui contient cette mĂ©thode et permet de faire de l’orientĂ© objet. Mais voilĂ , lĂ  il s’agit d’ajouter un opĂ©rateur Ă  Perl et non une mĂ©thode. - Une propriĂ©tĂ© utilisateur dans un bloc de nom Unicode `\p{...}` sera toujours prioritaire par rapport Ă  une propriĂ©tĂ© Unicode du mĂȘme nom. - L’outil `perlbug` qui sert Ă  faire des rapports de bogues a Ă©tĂ© mis Ă  jour pour pointer vers le [systĂšme de suivi de GitHub](https://github.com/Perl/perl5/issues). ### Mise Ă  jour des modules - Le module **B::Debug** va bientĂŽt sortir du cƓur de Perl mais restera disponible dans le CPAN Ă©videmment. C’est un module purement technique pour **deparser** et comprendre comment notre programme est interprĂ©tĂ© par **perl** #### VStrings Mise Ă  jour de **Storable** avec un correctif interdisant les **vstring** de plus de deux gibioctets. Mais au fait, qu’est‐ce qu’une `vstring` ? Aucun rapport avec des chaĂźnes qui serviraient Ă  stocker des versions pour du _semantic versioning_. C’est une façon d’écrire les chaĂźnes de caractĂšres en donnant leurs codes et en sĂ©parant par des `.` (points). Avec des **vstring**, on Ă©crit par exemple `v1.11;` qui est la mĂȘme chose que `chr(1) . chr(11)`. Ça peut produire des rĂ©sultats surprenants car dans un contexte de comparaison de chaĂźnes (`eq`), les chaĂźnes `v1.11` et `v1.2` sont diffĂ©rentes, mais dans un contexte de comparaison numĂ©rique (`==`) `v1.1` et `v1.2` seront Ă©valuĂ©es en `0` et donc la comparaison sera vraie. `perl -e 'print v1.2+0'` donne `0` tout comme `perl -e 'print v1.1+0'` donne `0` ```perl my $a = v1.11; my $aa = chr(1) . chr(11); my $b = v1.2; my $bb = chr(1) . chr(2); print "a == b\n" if ($a == $b); print "a ne b\n" if ($a ne $b); print "a == aa\n" if ($a == $aa); print "a eq aa\n" if ($a eq $aa); ``` Qui nous donnera : ``` a == b # v1.11 == v1.2 a ne b # v1.11 ne v1.2 a == aa # v1.11 == chr(1) . chr(11) a eq aa # v1.11 eq chr(1) . chr(11) ``` ### Compilation - Correction pour la compilation sur **Solaris** avec **Oracle Developer Studio compiler** ### Corrections - Correction **mymalloc** (dĂ©jĂ  abordĂ©) sur **Windows** - Pas vraiment un bogue, mais dans la doc Unicode, certains exemples fantaisistes Ă©taient censĂ©s utiliser une propriĂ©tĂ© Unicode « bateau » qui n’existe pas, mais avec le temps certaines ont fini par apparaĂźtre. :) La doc a Ă©tĂ© mise Ă  jour et les valeurs fautives remplacĂ©es par des noms qui ne devraient cette fois vraiment jamais exister. - Correction d’un bogue concernant les modificateurs d’expression rationnelles `/i` (insensible Ă  la casse) et `/l` (locale forcĂ©e). - ProblĂšme dans les tests avec `make minitest`. C’est un jeu de tests exĂ©cutĂ© avec `miniperl`, qui est un interprĂ©teur `perl` capable de lire et d’exĂ©cuter du code Perl avant l’étape d’inclusion des interfaçages **XS**. Il est proposĂ© d’étendre les « _smoke tests_ » Ă  cette cible pour Ă©viter d’ignorer involontairement ce problĂšme. - Ajout d’une solution de contournement pour corriger un [bogue dans glibc sur le changement de locales](https://bugs.debian.org/931139). ## 5.31.8 ### AmĂ©liorations du cƓur de Perl - Tout comme pour `malloc` mentionnĂ© plus tĂŽt, perl propose une autre implĂ©mentation de `strlen` appelĂ© `my_strlen` mais cette fois destinĂ©e aux systĂšmes ne disposant pas pas de `strlen`. L’implĂ©mentation de `my_strlen` a Ă©tĂ© optimisĂ©e. - D’autres amĂ©liorations de performances sur les fonctions `grok_*`. Les fonctions **grok** sont des [fonctions de conversion](https://perldoc.pl/perltoc#Numeric-functions). ### Documentation - La documentation ne conseille plus d’utiliser le `malloc` de Perl. On part du principe que les implĂ©mentations modernes de malloc sont meilleures Ă  prĂ©sent. - La documentation sur **XS** (interfacage avec code C) suggĂšre aussi d’utiliser **FFI** (autre implĂ©mentation plus dynamique) - **Eat your own dog food** en quelque sorte : les exemples dans la doc **perlipc** sont Ă  prĂ©sent valides avec `use warnings; use strict;` - Documentation des fonctions **grok** ### Compilation - Rajout d’includes (`` et ``) Ă  certaines sondes configurĂ©es pour rendre le code plus portable (Ă©viter une erreur de compilation) - Correction de la compilation de Perl sur **NetBSD 8.0** avec **g++**. - Configure plus flexible sur **Solaris**, ce qui permet de compiler sur une plus grande variĂ©tĂ© de configurations **Solaris**. ### Corrections - Correction d’un dĂ©bordement de pile (_heap overflow_) dans ce genre d’expression rationnelle : `q0=~/0|\p{__::Is0}/`. L’origine du bogue est le fait que les soulignĂ©s vont produire en interne plusieurs noms pour la mĂȘme propriĂ©tĂ© et le code confondait les deux noms. - Correction d’un _assertion failed_ sur les groupes non capturants dans les expressions rationnelles. Pour rappel, un groupe non capturant, `(?:...)`, et un exemple d’expression rationnelle qui crĂ©e cette _assertion failed_ : `/(?:0)|(?:)(?:[1-9])/` - La fonction de translittĂ©ration `tr///` a Ă©tĂ© beaucoup retouchĂ©e en **5.31** et une rĂ©gression est apparue lorsqu’on utilise le modifier `/d`. Ce modificateur est un modificateur interne qui permet de simuler un set de caractĂšre ancien (et problĂ©matique). - Correction d’un comportement dĂ©fensif dans la gestion du comptage des rĂ©fĂ©rences (gestion de la mĂ©moire de Perl). Il s’agissait de ne pas dĂ©crĂ©menter le nombre de rĂ©fĂ©rences d’un objet si on s’apprĂȘte Ă  mettre quelque chose dedans. - **IO.xs** devient thread safe ## 5.31.9 ### AmĂ©liorations du cƓur de Perl - prise en charge d’**Unicode 13** et de nouvelles propriĂ©tĂ©s Unicode - On dispose d’un nouvel alias pour les noms Unicode (mais attention, [on ne peut pas faire les mĂȘmes choses avec l’un ou avec l’autre](https://perldoc.pl/5.31.10/perlunicode#Comparison-of-%5CN%7B...%7D-and-%5Cp%7Bname%3D...%7D)) - ArrĂȘt de la prise en charge de **POSIX::mbstowcs** et **POSIX::wcstombs**. SpĂ©cification cassĂ©e, aucune demande pour ces fonctions (les versions non sĂ©curisĂ©es sans « s » restent supportĂ©es) - mise Ă  jour des liens pointant vers `search.cpan.org` vers `metacpan.org` ### Compilation - Sur **VMS**, avec la publication d’un _patch kit_ rĂ©cent, de nombreuses nouvelles fonctions sont accessibles (dans `stdint.h`) et donc utilisĂ©es par `perl`. ### Corrections #### require n’aime pas local %INC Un correctif sur la valeur de retour de `require` (un Ă©quivalent de `use` qui s’exĂ©cute Ă  l’exĂ©cution plutĂŽt qu’à la compilation). Le bogue se produit lorsqu’on **localise** le hash des includes `%INC`, donc lorsqu’on dĂ©clare un `%INC` `local`. Qu’est‐ce que `local` par rapport a `my` ? Une variable dĂ©clarĂ©e avec `my` est visible dans le `bloc` donc `{ ... }`. On dit qu’elle est **lexicale**. Une variable dĂ©clarĂ©e avec `local` est visible dans l’arbre d’appel. ```perl my $out = "out"; { sub pin() { print "[pin] in = $in\n"; } my $in = "in"; print "[block] in = $in\n"; # Affiche in print "[block] l = $l\n"; # Affiche rien lout(); pin(); # Affiche rien } print "[out] out = $out\n"; # Affiche out print "[out] in = $in\n"; # Affiche rien sub lout() { local $l = "local"; lin(); } sub lin() { print "[lin] l = $l\n"; # Affiche local } ``` #### Autres - Correction d’un bogue sur les expressions rationnelles imbriquĂ©es qui produisent ***exceeded limit in regex***. - En mode dĂ©bogage, la compilation de propriĂ©tĂ©s Unicode pouvait produire certaines informations Ă©tranges, c’est corrigĂ©. ## 5.31.10 ### AmĂ©liorations du cƓur de Perl - On peut Ă  prĂ©sent inclure des expressions rationnelles dans les noms Unicode, par exemple `r!\p{na=/(SMILING|GRINNING) FACE/}!` #### OpĂ©rateurs chaĂźnes Une comparaison chaĂźnĂ©e comme `$a < $b < $c` se comporte comme `$a < $b && $b < $c` donc en deux temps, mais la valeur de `$b` n’est pas recalculĂ©e (cas d’une variable *attachĂ©e* Ă  une fonction instable par exemple). Plus d’infos dans la [doc](https://perldoc.pl/5.31.10/perlop#Operator-Precedence-and-Associativity). Également, on ne pourra pas faire `1 .. 6 .. 9` car l’opĂ©rateur `..` n’est pas associatif. Un petit fil de discussion sympa sur le sujet montre que le problĂšme n’est [pas tout Ă  fait tranchĂ©](https://github.com/Perl/perl5/issues/17692). ## 5.31.11 La version **5.31.11** est une rc, elle est livrĂ©e par **Sawyer X** (qui est le pumpking actuel des versions majeures de Perl). **blead** est gelĂ©e. **5.31.11** sert de base pour corriger les points bloquants avant **5.32.0** Un peu avant la sortie de perl **5.32.0**, voici a quoi ressemble la « liste de points bloquants » : ![Points bloquants](https://i.imgur.com/UbaT9UG.png) ## 5.32.0-RC0 Sortie de la RC0 le 30 mai 2020 ([annonce](https://www.nntp.perl.org/group/perl.perl5.porters/2020/05/msg257486.html)). ## 5.32.0-RC1 Sortie le 7 juin 2020 ([annonce](https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257521.html)). ## 5.32.0 Voici donc l’[annonce de la sortie de Perl 5.32.0](https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257547.html), que nous avons dissĂ©quĂ© en long en large dans cette dĂ©pĂȘche. :) \o/ Tadaaa ! ## Conclusion Pour terminer, juste une image pour remercier votre courage/abnĂ©gation d’avoir lu/scrollĂ© jusqu’ici :) J’espĂšre pour vous que vous n’avez pas lu cette dĂ©pĂȘche Ă  haute voix... ![Lire du Perl Ă  voix haute invoque Cthulhu](https://i.imgur.com/FHWOH8V.png)

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /