IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Les nouveautés de Perl 5.20

Journées perl 2014

Une nouvelle année, une nouvelle version stable de Perl.

Revue des nouveautés majeures de la version 5.20, publiée le 27 mai 2014.

Vous souhaitez consulter la présentation originale, c'est ici.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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
 
Sélectionnez
use experimental "signatures";
  • perlsub, section Signatures
 
Sélectionnez
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
 
Sélectionnez
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
 
Sélectionnez
sub func :prototype($@) { ... }
my $func = sub :prototype($@) { ... }
  • cumulable avec une signature
 
Sélectionnez
sub plus :prototype($;$) ($left, $right = 0) { $left + $right }

Syntaxe - tranche de hash

  • %array[ ... ] et %hash{ ... } renvoient une liste de paires clé-valeur
 
Sélectionnez
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

 
Sélectionnez
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
 
Sélectionnez
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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

En complément sur Developpez.com

Licence Creative Commons
Le contenu de cet article est rédigé par Sébastien Tramonis-Asperghis et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.