Bonsoir,
voici un bref résumé des principales nouveautés:
- La fonctionnalité de déférencement postfixé est maintenant stable (n'est plus expérimentale);
- Support à la version Unicode 8.0;
- La fonctionnalité d'autodéréférencement (autoderef) a été supprimée.
- Le $_ lexical a disparu.
La fonctionnalité de
déréférencement postfixée a été introduite à titre expérimental en version 5.20 (en 2014). Elle permet par exemple d'accéder au contenu d'un tableau depuis une référence sur ce tableau avec la syntaxe suivante:
1 2
|
my @elements = $array_ref->@*; |
ou:
1 2 3 4
|
for my $item ($array_ref->@*) {
# ...
} |
Dans les deux cas ci-dessus, la notation
$array_ref->@* est essentiellement équivalente à la notation circonfixée
@{$array_ref}. Dans certains cas, cependant, la notation circonfixée est peu pratique, voire inutilisable. Par exemple, si une fonction renvoie une référence vers un tableau, il est possible d'accéder aux éléments de la façon suivante:
1 2 3 4 5 6 7
|
sub liste_saisons {
return [ qw /hiver printemps été automne/ ]; # renvoie une référence
}
for my $saison (liste_saisons()->@*) {
# ...
} |
L'utilisation de cette fonctionnalité exige l'emploi du pragma:
1 2
|
use feature qw {postderef}; |
De plus, la fonctionnalité étant jusqu'à présent expérimentale, elle déclenchait un warning avertissant de la nature expérimentale de la syntaxe. Pour empêcher ce warning intempestif, il fallait ajouter le
pragma suivant:
1 2
|
no warnings qw{experimental::postderef}; |
Cette fonctionnalité n'étant plus expérimentale, ce dernier pragma n'est plus nécessaire (mais ne gêne pas pour autant).
La version
Unicode 8.0 est sortie en 2015. Elle ajoute plus de 7000 nouveaux caractères au standard Unicode. Pour plus d'information, voir:
http://www.unicode.org/versions/Unicode8.0.0/. Perl est depuis longtemps en avance sur la plupart des autres langages de programmation en ce qui concerne la gestion de l'Unicode. La nouvelle version de Perl se conforme à la dernière version du standard Unicode.
La fonctionnalité d'
autodérérérencement avait été introduite en Perl 5.14. Elle permettait d'utiliser certaines fonctions de tableaux ou de hachages avec des références sur des tableaux ou des hachages (donc sans procéder à un déréférencement explicite). Par exemple, la fonction
keys:
1 2 3
|
my $h_ref = { hiver => 1, printemps => 2, été => 3, automne => 4};
say $_ for keys $h_ref; |
Ce qui imprime:
1 2 3 4 5
|
printemps
été
hiver
automne |
Cette fonctionnalité à première vue assez pratique entraînait cependant des comportements incohérents ou déroutants dans certains cas. Elle avait donc été rétrogradée au statut "déprécié" en version 5.20 (en général, une fonctionnalité
dépréciée est conservée au moins deux versions de Perl avant d'être complètement supprimée), en même temps qu'était introduite la fonctionnalité de déréférencement postfixée expliquée ci-dessus et introduite notamment pour la remplacer. Maintenant que cette dernière fonctionnalité est déclarée stable, il est plus aisé de supprimer l'autodéférencement.
En Perl 5.24, on écrirait maintenant comme suit le code ci-dessus (non testé):
1 2 3
|
my $h_ref = { hiver => 1, printemps => 2, été => 3, automne => 4};
say $_ for keys $h_ref->%*; # ou, comme depuis très longtemps: ... keys %{$h_ref}; |
Une autre fonctionnalité dépréciée depuis un certain temps et maintenant supprimée est le
$_ lexical. Elle entraînait parfois des comportements incohérents (confusion entre le $_ global de paquetage et le $_ lexical). On ne peut désormais plus écrire:
3 |
0 |