condensé des perldelta
des 5.27.0 à 5.27.11
seulement les changements les plus marquants
planification des versions
une version majeure par an (Q2)
des versions mineures tous les 2-3 mois
cycle de dépréciation court
avertissement pendant quelques versions majeures
suppression à la version majeure suivante
modules retirés envoyés sur le CPAN
5.16.0 le 12 mai 2012
5.18.0 le 18 mai 2013
5.20.0 le 16 mai 2014
5.22.0 le 1er juin 2015
5.24.0 le 9 mai 2016
principales nouveautés :
déréférencement postfixé n'est plus expérimental
regexps : \b{lb}
, \b{wb}
; détection d'erreurs à la compilation
autoderef
, my $_
retirés
5.26.0 le 30 mai 2017
principales nouveautés :
"."
n'est plus dans @INC
documents ici-même indentables : <<~"EOF"
regexps : /xx
; {^CAPTURE}
, %{^CAPTURE}
, et %{^CAPTURE_ALL}
5.28.0 le 20 mai 2018
5.24 n'est plus officiellement supportée
5.28.1 probablement vers septembre 2018
5.28.2 probablement vers mars-avril 2019
quelques nouveautés non négligeables
beaucoup de dépréciations fatales
la preuve que faire des versions de développement, et tout tester, est très utile
et bien sûr des correctifs et des optimisations
assertion de continuité de script (script run) (expérimentale)
permet de détecter les changements de scripts, typiques des attaques par homographes
paypal.com
vs раураl.com
(*script_run:pattern)
ou (*sr:pattern)
conseillé de le faire de manière atomique : (*script_run:(?>pattern))
(*atomic_script_run:pattern)
ou (*asr:pattern)
quelques exceptions comme les chiffres ([0-9]
), les caractères de ponctuation, les emojis et autres caractères spéciaux sont acceptés partout
équivalents alphabétiques de certaines assertions (expérimental)
Actuel Équivalent alphabétique ------ ----------------------- (?=...) (*pla:...) ou (*positive_lookahead:...) (?!...) (*nla:...) ou (*negative_lookahead:...) (?<=...) (*plb:...) ou (*positive_lookbehind:...) (?<!...) (*nlb:...) ou (*negative_lookbehind:...) (?>...) (*atomic:...)
delete
fonctionne maintenant sur des tranches de clés-valeurs,
et retourne les paires
my %sanitised_values = delete %input_values{@allowed_keys}; warn "Unknown key $_" for keys %input_values;
initialisation d'un tableau ou d'un hash persistant
state @a = qw(x y z);
édition sur-place (perl -i
) maintenant plus sûre
sprintf %j
disponible sur les compilateurs pré-C99, mais est non portable
drapeau close-on-exec positionné sur les descripteurs de fichiers
les opérateurs de bits sur les nombres (& | ^ ~
) et les chaînes
(&. |. ^. ~.
) ne sont plus expérimentaux, mais doivent quand même être
activés avec use feature "bitwise";
support des opérations de locales multi-thread (POSIX 2008, Windows)
${^SAFE_LOCALES}
vaut 1 quand l'interpréteur est sans support de
threads ou compilé sur un OS compatible
Unicode 10.0.0
ajout de 8 518 caractères, dont 4 nouveaux systèmes d'écriture
Masaram Gondi (75), Nüshu (396), Soyombo (80), Zanabazar Square (72)
56 nouveaux emojis ; symbole du Bitcoin
CJK Extension F (7,473 caractères Han)
285 caractères hentaigana
les attributs :locked
et :unique
ont été supprimés
dépréciés depuis 5.12 et 5.10, respectivement
les attributs de fonction doivent maintenant précéder les signatures de fonction
sub f :lvalue ($a, $b) { ... }; # 5.20; à partir de 5.28 sub f ($a, $b) :lvalue { ... }; # de 5.22 à 5.26
...
(yada-yada) n'est plus accidentellement utilisable comme expression
fonctions ne sont plus stockées dans des typeglobs
optimisation introduite dans 5.22
permet d'économiser beaucoup de mémoire
mais seulement dans main
à cause d'un bug
maintenant généralisée, mais peut casser du code d'introspection qui s'attend à ce que tout ce qui est dans les stashes soit un typeglob
grosse simplification du smartmatch et du switch
~~
(smartmatch)
table de règles remplacée par une seule règle
l'opérande droite doit surcharger l'opérateur, et déterminer quel type de comparaison effectuer est de sa seule responsabilité
fournit toujours un contexte scalaire
grosse simplification du smartmatch et du switch
when
plus de règles compliquées sur comment il traite son argument
séparé en deux constructions :
whereso
, qui utilise toujours son argument comme une valeur de vérité
whereis
, qui utilise toujours le smartmatch
grosse simplification du smartmatch et du switch
default
, considéré comme confus et inutile, a été retiré
given
n'est plus magique et se contente de fournir un contexte scalaire
concept de topicalizer aboli
contrôle de flux unifié avec celui des boucles : maintenant équivalent à une boucle d'une unique itération
g̶r̶o̶s̶s̶e̶ ̶s̶i̶m̶p̶l̶i̶f̶i̶c̶a̶t̶i̶o̶n̶ ̶d̶u̶ ̶s̶m̶a̶r̶t̶m̶a̶t̶c̶h̶ ̶e̶t̶ ̶d̶u̶ ̶s̶w̶i̶t̶c̶h̶
changement introduit dans 5.27.7 (2017-12-20)
retiré dans 5.27.8 (2018-01-20)
« devant l'étendue des problèmes que cela provoquait aux modules CPAN »
merci BBC (Bleadperl Breaks CPAN) d'Andreas König
smartmatch et switch seront certainement modifiés dans le futur, mais avec force avertissements préalables
maintenant des erreurs fatales :
utiliser le même symbole dans open()
et opendir()
(5.10)
l'utilisation de <<
au lieu de <<""
(5.000)
la sélection d'algorithme de tri par use sort
maintenant des erreurs fatales :
omettre les virgules entre les variables passées aux formats (5.000)
assigner à $/
une référence vers un entier négatif ou nul (5.20)
assigner à ${^ENCODING}
une valeur définie (5.22)
maintenant des erreurs fatales :
\N{}
vide (5.24)
code points Unicode d'une valeur excédant IV_MAX
(5.24)
présence de code points au dessus de 0xFF
dans une chaîne passée à un
opérateur de bit (5.24)
assigner à $[
sera fatal en 5.30
vec
sur une chaîne avec des codes points au dessus de 0xFF
passer un argument à Sys::Hostname::hostname()
sera fatal en 5.32
regexps : accolade non protégée "{"
immédiatement après une parenthèse "("
modules B::Debug
, Locale::Codes
retrait de plusieurs anciennes fonctions de hash
ajout de SBOX32
correctifs de CVE liés à des débordements de tampons
ajout de Perl_langinfo()
pour supplanter nl_langinfo(3)
fonction Perl sprintf()
(Perl_sv_vcatpvfn_flags()
) fortement
retravaillée pour corriger plusieurs bugs mineurs et l'accélérer dans
certains cas
les modules XS peuvent automatiquement bénéficier des versions réentrantes des fonctions systèmes en ajoutant cette définition en début de fichier :
#define PERL_REENTRANT
concaténation de multiples expressions bien plus rapide par l'introduction
de l'opcode interne multiconcat
keys()
est plus efficace en contextes scalaire et vide
plusieurs opérations renvoyant des entiers sont plus efficaces en contextes scalaires et booléen
if (index(...) != -1) { ... }
est plus efficace
les boucles for()
et constructions similaires sont plus efficaces
File::Glob
est plus rapide
ref()
est plus rapide en contexte booléen
durée de création des expressions régulières avec propriétés Unicode
(\p{...}
) grandement réduite dans la plupart des cas
performances de [[:ascii:]]
et [[:^ascii:]]
grandement améliorées
plates-formes abandonnées
PowerUX / Power MAX OS