Les nouveautés de Perl 5.20

Sébastien Aperghis-Tramoni, sebastien@aperghis.net

Présentation

  • condensé de perldelta (115 Ko)

  • seulement les changements les plus marquants

Cycles de publication

  • 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

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

  •   sub func :prototype($@) { ... }
    
      my $func = sub :prototype($@) { ... }
  • 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

Questions ?

Merci