Les nouveautés de Perl 5.16

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

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.12

  • 5.12.0 le 12 avril 2010

  • 5.12.1 le 16 mai 2010

  • 5.12.2 le 6 septembre 2010

  • 5.12.3 le 21 janvier 2011

  • 5.12.4 le 20 juin 2011

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.x n'est plus officiellement supportée

Nouvelles fonctionnalités

  • current_sub

    • mot-clé __SUB__

    • référence à la sous-routine courante

  • unicode_eval

    • eval() evalue toujours la chaîne en Unicode

  • evalbytes

    • evalbytes() évalue la chaîne en octets

Changements de comportements

  • substr() peut renvoyer une lvalue

  •   my $string = "The quick brown fox jumps over the lazy dog";
      my $mask1  = \substr($string, 4, 5);
      my $mask2  = \substr($string, -8);
      print "$$mask1 | $$mask2\n";  # affiche "quick | lazy dog"
  •   $string = "Le vif zéphyr souffle sur ces kumquats disgracieux";
      print "$$mask1 | $$mask2\n";  # affiche "if zé | gracieux"
  • tied renvoie maintenant le scalaire de l'objet auquel la variable est liée

  •   Scalar::Util::weaken(tied $tied_variable);

Unicode

  • Unicode 6.1.0

  • hormis U+1F514 (BELL), en conflit avec U+0007 (BELL, ALERT, BEL) ; ne sera nommé ainsi qu'en 5.18

  • quelques changements de noms et de propriétés

  • Perl reconnait anciens et nouveaux noms

Unicode

  • charnames autochargé au premier \N{...}

  • \N{...} supporte la correspondance relâchée (loose match)

  • plein support Unicode pour tous les noms de symboles

Unicode

  • support de repli de casse (casefolding)

  • permet de comparer deux chaînes sans tenir compte de la casse

  • fonction fc() (foldcase), séquence \F

  •   lc($str1) eq lc($str2)  # incorrect
      uc($str1) eq uc($str2)  # incorrect
  •   $str1 =~ /\Q$str2/i     # correct, mais pas léger
  •   fc($str1) eq fc($str2)  # correct

Nouveau module

  • arybase - implémentation de $[

Autres changements

  • plus de mots-clés maintenant disponibles dans CORE::

  • les valeurs de $$, $<, $>, $(, $) ne sont plus mises en cache

  • sondes DTrace pour les changements de phase de l'interpréteur

  • prototypes \$ et \[$] acceptent tout type de lvalue

  • prototype _ autorisé avant @ ou %

Optimisations

  • use VERSION plus rapide, car ne charge pas feature.pm

  • les méthodes DESTROY vides ne sont pas appelées (5.12)

  • les méthodes DESTROY commençant par return ne sont pas appelées

  • assignation à substr() en contexte vide deux fois plus rapide

Optimisations

  • glob() plus rapide

  • amélioration de la recherche des propriétés Unicode

  • opérateurs de court-circuit (&&, ||, //) chaînés plus rapides grâce à un parcours de l'optree réduit

Futures dépréciations

  • échange de $< et $>

  • support de sfio

Futures dépréciations

  • modules

    • CPANPLUS, Filter::Simple, PerlIO::mmap

    • Pod::LaTeX, Pod::Parser, SelfLoader

    • Text::Soundex, Thread.pm

Futures dépréciations

  • plates-formes

    • BeOS, djgpp, dgux, EPOC

    • MPE/iX, Rhapsody, UTS, VM/ESA

  • compilateurs

    • Borland

Questions ?

Merci