[Toulouse-pm] OSCON (1)

Michel Rodriguez mrodrigu at ieee.org
Mon Jul 26 16:21:40 CDT 2004


OSCON 2004
    Salut,

    Le premier compte-rendu de OSCON 2004, où je suis arrivé hier, ai eu
le
    temps de faire un tour en ville, trouver un marche ou jouait un clone
    d'Elvis (mais chauve!), puis d'aller voir La Vie de Brian, ou j'ai
    failli m'endormir. Heureusement c'était le genre de cinéma où on
peut
    emmener sa bière et sa pizza dans la salle, donc j'ai pu tenir.

    Mais d'abord le lien du jour: PPM est de retour:
    http://use.perl.org/~cwest/journal/20025

Best Practice Perl
    *Damian Conway*

    Damian est toujours fun, donc me voilà en train de grincer des dents
    devant ses suggestions sur l'indentation des programmes... horrible!
    Mais bon, j'ai mon style et je m'y tiens... sauf quand je trouve autre
    chose qui a l'air plus joli ;--) Tiens, il vient de dire que mon style
    préféré est horrible. Je m'en vais! Bon, d'accord, j'ai un
compte-rendu
    à faire, je reste.

    Oh, une suggestion cool: au lieu de faire "return 1" pour retourner
une
    valeur vraie, on peut faire "return rand()", qui marche la plupart du
    temps! Bon, OK, c'est pour rire.

    Autre citation: "si tu appelles cette fonction dans un contexte
non-vide
    c'est que tu as un problème (elle ne retourne rien d'utile), donc le
    plus utile c'est de te tuer (d'un "croak" bien placé).

    Un truc que je ne savais pas (et je ne sais pas comment ça ne m'a pas
    causé des problèmes!): quand on fait "foreach my $var (@list)" en
fait
    $var est un alias sur les éléments de la liste, donc si on le
modifie,
    ça modifie l'élément dans la liste. De même avec "values" sur un
hash:

      perl  -e'%h=(a => 1, b => 2); foreach my $val (values %h) { $val++};
print %h'

    donne: "a2b3"

    Un truc que j'aime bieng: utiliser le "ternary operator" en cascade,
    pour eviter des if/else imbriqués:

      my $var=   cond        ? "val"
               : autre_cond  ? "autre_val"
               : cond3       ? "encore une autre val"
               :               "defaut";

    C'est vrai que c'est joli.

    Par contre je suis pas d'accord avec sa suggestion d'utiliser
    systématiquement les modifiers "x" (celui là encore pourquoi pas),
"m"
    et "s" pour les regexps. En fait pour moi c'est clair que sans "m" "^"
    veut dire "début de la chaîne" et pas "début de la ligne". Et j'ai
    essayé, comme il préconise, d'utiliser "\A" et "\Z" à la place de
"^" et
    "$", mais j'aime pas, ça ressort pas autant.

    Quelques modules utiles:

    -   "List::Util" qui a notamment l'ultra pratique "first", qui fait
        comme un "grep" sauf qúil s'arrête (et retourne) le premier
élément
        de la liste qui satisfait la condition.

    -   <Lexical::Alias> permet de creer des alias: "alias $hash{$key} =>
        $alias", ensite modifier $alias modifie directement le champ du
        hash.

    -   "Readonly" qui permet de déclarer des variables comme...
read-only,
        donc constantes. Ca fait comme "use constant" sauf que ça crée
de
        vrai variables, donc plus facile à interpoler qúavec "use
constant":

          perl -e'use constant TOTO => "foo"; my %h=( TOTO =>"");print %h'

        donne "TOTO" (la "=>" met des guillemets autour de "TOTO" et donc
le
        change en une chaîne normale.

        En plus "Readonly" a l'avantage de déclarer des variables
        syntaxiques, donc avec une portée bien définie.

    -   "IO::Promtp", pas encore sur CPAN, qui permet d'avoir des prompts
            en
        mode interactif, mais pas en mode batch.

    -   "Perl6::Export" qui remplace "Exporter", et qui à l'avantage de
        permettre de déclarer le type d'export à l'endroit où déclare la
        fonction, pas en tête du module.

-- 
Michel Rodriguez
IEEE Standards - Electronic Services




More information about the Toulouse-pm mailing list