I. Les nouveautés de Perl 5.20▲
Présentation
- condensé de perldelta (115 Ko)
- seulement les changements les plus marquants
Cycles de publication
-
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 une ou deux versions majeures
- suppression effective à la version majeure suivante
- modules retirés envoyés sur le CPAN
Perl 5.14
- 5.14.0 le 14 mai 2011
- 5.14.1 le 17 juin 2011
- 5.14.2 le 26 septembre 2011
Perl 5.16
-
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
Perl 5.18
-
5.18.0 le 18 mai 2013
- 5.14 n'est plus officiellement supportée
- 5.18.1 le 12 août 2013
- 5.18.2 le 6 janvier 2014
Perl 5.20
-
5.20.0 le 16 mai 2014
- 5.16 n'est plus officiellement supportée
Signature de fonctions
- fonctionnalité expérimentale
use experimental "signatures";- perlsub, section Signatures
sub kennify ($text) { $text =~ s/\w/(qw[f h m])[rand 4]/egmrs }
say kennify("hello everybody!"); # "hfmff mfmhffmm!"
sub plus ($left, $right = 0) { $left + $right }
say plus(2, 3); # 5
say plus(4); # 4
say plus(2, 3, 4); # Too many arguments for subroutineSignature de fonctions
- la partie droite du = est une expression
sub plus ($left, $right = rand 10) { $left + $right }
say plus(2, 3) # 5
say plus(4); # 9.27603069626362
say plus(4); # 13.4299146471905Prototypes
- désactivés quand les signatures sont activées
- utilisables par un attribut de fonction
- cumulable avec une signature
sub plus :prototype($;$) ($left, $right = 0) { $left + $right }Syntaxe - tranche de hash
- %array[ ... ] et %hash{ ... } renvoient une liste de paires clé-valeur
use Data::Dump "dd";
my %mane6 = (
kindness => "Fluttershy", honesty => "Applejack",
laughter => "Pinkie Pie", generosity => "Rarity",
loyalty => "Rainbow Dash", magic => "Twilight Sparkle",
);
my %pair = %mane6{qw< magic kindness >};
dd \%pair; # { kindness => "Fluttershy", magic => "Twilight Sparkle" }Syntaxe - tranche de hash
use Data::Dump "dd";
my @mane6 = (
"Applejack", "Fluttershy", "Pinkie Pie", "Rarity",
"Rainbow Dash", "Twilight Sparkle",
);
my %pair = %mane6[1, 4];
dd \%pair; # { 1 => "Fluttershy", 4 => "Rainbow Dash" }
my %pair = %mane6["foo", 4];
dd \%pair; # { 4 => "Rainbow Dash", foo => "Applejack" }Syntaxe - déréférence postfixée
- fonctionnalité expérimentale
use experimental "postderef";
$scalarref->$*; # pareil que ${ $scalarref }
$arrayref->@*; # pareil que @{ $arrayref }
$hashref->%*; # pareil que %{ $hashref }
$coderef->&*; # pareil que &{ $coderef }
$arrayref->@[ ... ]; # pareil que @$arrayref[ ... ]
$hashref->@{ ... }; # pareil que @$hashref{ ... }
$arrayref->%[ ... ]; # pareil que %$arrayref[ ... ]
$hashref->%{ ... }; # pareil que %$hashref{ ... }Nouvelles fonctionnalités
-
implémentation interne de drand48()
- auparavant, utilisation de la fonction native
- meilleur support 64-bit
- use locale supporte les locales en UTF-8
- use locale supporte les système sans locales
- meilleure gestion des erreurs de locales à l'initialisation
Nouveaux modules
-
experimental
- activation / désactivation de fonctionnalités expérimentales
- pur Perl, disponible sur le CPAN
-
IO::Socket::IP
- remplacement de IO::Socket::INET avec support IPv4 et IPv6
Changements incompatibles
- do FUNCTION(LIST) maintenant une erreur
- { litéral après \b ou \B maintenant une erreur
- le caractère après \c doit être imprimable, et ne doit pas être {
- la virgule décimale ne fuit plus en dehors de la portée d'un use locale
- le mécanisme de tainting se produit dans plus de cas, conformément à la documentation
Expressions régulières
-
correctifs :
-
[#] incorrectement inteprété comme un commentaire
- /[#$a]/x ou /[#]$a/x (5.1)
- /[#](?{})/x (5.18)
- ((?[...]) autorise l'interpolation de motifs ((?[...]) précompilés
- /$qr/p était cassé en 5.18, /p était ignoré
-
Expressions régulières
-
optimisations :
- analyse du motif pour déterminer la longueur minimale d'une chaîne qui doit correspondre
- les expressions avec l'ancre ^ sont plus rapides
- les variables de capture ($1, $2, ..., $`, $&, $', ${^PREMATCH}, ${^MATCH} et ${^POSTMATCH} utilisent moins de mémoire
Unicode
-
Unicode 6.3
- meilleur support BiDi
- ajout de 1002 idéographes de compatibilité CJK
- \p{} et \P{} seulement pour les codes-points Unicode (U+0000 à U+10FFFF)
- \p{Unicode} comme alias de \p{Any} ([\x0-\x10FFFF])
- extension \p{All} pour tous les codes-points (y compris au delà de U+10FFFF)
Optimisations
- nouveau mécanisme de copy-on-write (5.18) maintenant activé par défaut
- première itération sur un grand hash plus rapide
- $array[-1] plus rapide
- recherche de clé de hash plus rapide
- création de certains types de listes plus rapide
Dépréciations
-
syntaxe
- utilisation des threads officiellement découragée
- classe de caractères \C (octet brut)
- caractères de contrôle litéraux dans les noms de variables ($^I, $^T, etc)
- fonctions de caractères de POSIX (isalpha, isdigit, etc)
-
modules
- CGI et associés, Module::Build et associés
Dépréciations
- utilitaires
- a2p, s2p, find2perl
Support de plates-formes
-
nouvelles plates-formes
- Android (ARM, MIPS, x86)
- Bitrig (OpenBSD), FreeMiNT, Synology (ARM, PPC)
Support de plates-formes
-
arrêt de support
- AT&T 3b1 (Unix PC), DG/UX, Ardent Titan OS
-
futur arrêt de support
- EBCDIC
- NeXT, AmigaOS, DJGPP, NetWare, OS/2, Plan 9





