Les nouveautés de Perl 5.12

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

Perl 5.12

  • 5.8.8 le 31 janvier 2006

  • 5.10.0 le 18 décembre 2007, 20e anniversaire de Perl 1.000

  • 5.8.9 le 14 décembre 2008

  • 5.10.1 le 23 août 2009

  • 5.12.0 le 12 avril 2010

  • 5.12.1 le 16 mai 2010

Perl 5.12

  • présentation de Nicholas Clark à YAPC::Europe 2004, Belfast

  • Why Perl 5.8.6 is boring (and why you should be excited by this)

  • Perl 5.12.. vraiment pas excitant

Syntaxe - ...

  • l'opérateur yada yada : ...

  • marqueur pour indiquer du code qui reste à écrire

  • lance une exception avec le texte "Unimplemented"

  •     sub shortest_path {
            my (@hops) = @_;
    
            # solve the corresponding salesman problem
            ...
        }
  • ne pas confondre avec ... (opérateur d'intervalle) ni avec ... (flip-flop)

Syntaxe - each

  • marche sur les tableaux

  •     @a = qw< paff zap thwapp >;
    
        while (my ($key, $value) = each @a) {
            print "$key : $value\n"
        }
  •     0 : paff
        1 : zap
        2 : thwapp

Syntaxe - delete local

  • destruction locale d'une valeur de hash

  •     $, = " ";
        %color = ( red => "#FF0000", green => "#00FF00", blue => "#0000FF" );
    
        print %color;
    
        {
            delete local $color{red};
            print %color;
        }
    
        print %color
  •     green #00FF00 blue #0000FF red #FF0000
        green #00FF00 blue #0000FF
        green #00FF00 blue #0000FF red #FF0000

Syntaxe - version des modules

  • package App::Whatever v1.42.0

  • analysé à la compilation, de la même manière que use NAME VERSION

  • $VERSION est un objet, et impose un format strict

Syntaxe - version des modules

  • formalisation de la syntaxe d'une version

  • format strict : nombre décimal position entier ou décimal sans exponentiation (1.42), ou v-string d'au moins 3 composantes décimales (v1.23.45)

  • format laxiste : pareil plus v-strings de moins de 3 composantes, ainsi qu'une composante alpha, séparée par une espace soulignée (1.42_03)

  • fonctions version::is_strict() et version::is_lax()

Syntaxe - when postfixé

  •     given ($something) {
            $abc    = 1 when /^abc/;
            $just_a = 1 when /^a/;
            $other  = 1;
        }
  •     for (@names) {
            admin($_)   when [ qw/Alice Bob/ ];
            regular($_) when [ qw/Chris David Ellen/ ];
        }

Syntaxe - évaluations de when

  • opérateurs flip-flop .. et ... maintenant évalués en contexte booléen

  •     when (/^=begin/ .. /^=end/) {
            # ...
        }
  • when (expr1 // expr2) évalue maintenant en contexte booléen si expr1 est booléenne

Regexps - \N

  • inverse de \n

  • ne pas confondre avec \N{name}

Pragmas - strict implicite

  • use 5.12.0

  • charge implicitement use strict et use features ':5.12'

Pragmas - nouveaux avertissements

  • avertissements émis par défaut sur les fonctionnalités considérées obsolètes

  • nouvelle catégorie deprecated pour les désactiver

  • no warnings "deprecated"

  • beaucoup de nouveaux messages de diagnostic

Compatibilité Y2038

  • les fonctions internes passent 2038

  • voir aussi Time::y2038 sur le CPAN

Optimisations

  • isa() plus rapide grâce à un cache interne

  • linéarisation C3 40% plus rapide pour les classes à héritage simple

  • méthodes DESTROY vides ignorées

  • keys sur les hashes vides plus rapide

  • if (%hash) maintenant plus rapide que if (keys %hash)

  • inversion sur-place d'un tableau (@a = reverse @a) beaucoup plus rapide

Unicode

  • Unicode 5.2.0

  • support de toutes les propriétés de caractères (cf perluniprops)

Fonctionnalités avancées

  • surcharge vers qr// (par overload)

  • mots-clés extensibles grâce à une API spécifique

    • voir XS::APItest::KeywordRPN pour un exemple

  • support DTrace

Nouveaux modules

  • autodie

  • Compress::Raw::Bzip2

  • parent

Questions ?

Merci