plannification des versions
une version majeure par an (Q2)
des versions mineures tous les 2-3 mois
cycle de dépréciation court
avertissement pendant une ou deux versions majeures
suppression effective à la version majeure suivante
modules retirés envoyés sur le CPAN
5.12.0 le 12 avril 2010
5.12.1 le 16 mai 2010
5.12.2 le 6 septembre 2010
5.12.3 le 21 janvier 2011
5.12.4 le 20 juin 2011
5.14.0 le 14 mai 2011
5.14.1 le 17 juin 2011
5.14.2 le 26 septembre 2011
5.16.0 le 12 mai 2012
5.12 n'est plus officiellement supportée
5.16.1 le 8 août 2012
5.16.2 le 1er novembre 2012
5.18.0 le 18 mai 2013
important changement d'implémentation
la graine pour la fonction de calcul est maintenant aléatoire, pour chaque hash
ordre des clés et valeurs est variable
%hash = ( ... ); %copy = %hash; # keys %hash différent de keys %copy
raison : protection contre les attaques par complexité algorithmique
variables d'environnement PERL_PERTURB_KEYS
, PERL_HASH_SEED
,
PERL_HASH_SEED_DEBUG
support de plusieurs fonctions de hash :
One_At_A_Time (old, normal, hard), SipHash
DJB2, MurmurHash v3, SDBM, SuperFast
conseils :
ne jamais s'appuyer sur l'ordre des clés renvoyés par keys
ne pas exposer cet ordre à l'extérieur du programme
toujours trier avec sort
ou SortKeys
(Data::Dumper
)
fonctions lexicales (experimental)
use feature "lexical_subs"; state sub myfunc { ... } # fonction privée, créée une seule fois my sub myfunc { ... } # fonction privée, crééer à chaque fois our sub myfunc { ... } # alias lexical d'une fonction globale
avertissements sur les fonctionnalités expérimentales
no warnings "experimental::lexical_subs"; use feature "lexical_subs";
~~
et my $_
sont devenues des fonctionnalités expérimentales
plus de mots clés dans CORE::
kill
supporte des noms de signaux negatifs : KILL -HUP -$$
next
, last
et redo
supportent les étiquettes calculées
given
fait un alias sur le $_
global, comme foreach
${^LAST_FH}
contient le dernier descripteur de fichier utilisé
readline()
avec $/ = \N
lit maintenant N caractères,
au lieu de N octets
qw(..)
ne peut plus être utilisé comme parenthèses
for my $pony qw< Twilight Fluttershy Pinkie_Pie > { ... } # WRONG
for my $pony (qw< Twilight Fluttershy Pinkie_Pie >) { ... }
analyse plus stricte de s///e
$&
, $`
et $'
n'impactent plus les performances
la tabulation verticale (\v
) fait maintenant partie de \s
/(?{})/
et /(??{})/
ont été fortement retravaillées
les accolades littérales non protégées ({
) sont interdites
doivent être soit protégées, soit partie d'une construction
permet de repérer des erreurs comme /\w{,5}/
réservé pour de futures extensions
opérations d'ensembles de classes (?[ ])
experimental, catégorie egex_sets
permet de combiner des classes avec &
(intersection), +
ou |
(union), -
(soustraction), ^
(différence symétrique)
# cherche des caractères alphabétiques, sans les chiffres /(?[ \w - \d ])/
# cherche tous les chiffres dans les scripts thaïlandais ou laotien /(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])/
Unicode 6.2
\N{BELL}
désigne maintenant U+1F514 au lieu de U+0007 (BEL
)
divergence sur la correspondance en insensibilité à la casse
"ss" =~ /ß/i; # correspond
Unicode 6.2 revient en arrière
en Perl, continue de correspondre si spécifié explicitement
(/ß/
), mais pas implicitement (/[\0-\xff]/
)
\N{..}
avec un nom inconnu ou auparavant rendu obsolète
est maintenant une erreur
support des caractères Unicode pour les noms d'alias :
use v5.18; use utf8; use charnames ":alias" => { "dièse" => "0x23", "esperluette" => "0x26", }; say "\N{esperluette}\N{dièse}x1F4A9;"
study
est maintenant une fonction vide
require
meurt sur les fichiers non lisibles
do
positionne toujours $@
(comme eval
)
do function
utilise maintenant comme nom de
fichier ce que function
renvoie
les valeurs stockées dans %ENV
sont forcées
en octets
plusieurs correctifs sur les formats
nouveau mécanisme de copy-on-write
les motifs de recherche avec des propriétés Unicode sont plus rapides
pack
avec des arguments constants est maintenant réduit (si possible)
.. x ..
est maintenant réduit à la compilation quand c'est possible
syntaxe
$_
lexical (trop confus, trop complexe)
modules
encoding
, Thread.pm
, Filter::Simple
,
B::Lint
, PerlIO::mmap
, File::CheckTree
,
Pod::LaTeX
, Pod::Parser
, Text::Soundex
CPANPLUS
et ses dépendances, Archive::Extract
,
Log::Message
, Module::Pluggable
, Object::Accessor
,
Params::Check
, Term::UI
plates-formes
BeOS, EPOC, MPE/iX, UTS Global, VM/ESA, Rhapsody
plates-formes
DG/UX, NeXT, AmigaOS, DJGPP, NetWare, OS/2, Plan 9