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 subroutine
Signature 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.4299146471905
Prototypes
- 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