[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