Avec Marianne et Frank, de Linux Magazine
Un historique de toutes nos réunions
Nous avons mangé entre autres des œufs mayonnaise, des moules et
des frites, des magrets de canard, des blue-cheeseburgers, des
andouillettes, des salades romaines, des poulets et des frites,
des tartes Tatin, des coupes tropicales et des nègres en
chemise. Nous avons également bu une margarita, un Orangina, des
Kriek, des Warsteiner, des Guinness, non, des Stout, et même de
la bière au chocolat. Et les carafes d'eau et les cafés étaient
offerts par la maison.
- Sylvain a été chargé de présenter Perl à une conférence de
Parinux.
Cette conférence est prévue pour le jeudi 18. Il s'agit d'une introduction
et d'une présentation de base. Lorsqu'il était étudiant, il avait déjà
fait une présentation de ce type et il a ressorti ses transparents
pour les mettre à niveau et les utiliser lors de la conférence.
D@vid évoque la conférence
Perl for the Impatient
qu'il avait suivie à
Amsterdam,
conférence qu'il avait appréciée, car au bout du temps imparti, l'assistance
avait acquis suffisamment de bases pour pouvoir écrire des programmes
intéressants (c'est-à-dire qui font un peu plus que
« Hello World »).
Le tutoriel est
disponible en PDF.
- BooK a jeté un coup d'œil sur les transparents de Sylvain, pour
vérifier qu'il n'y a pas de bourdes. Il a vu du code inhabituel, par exemple
un map avec des parenthèses :
my @toto = map( { $_ += 10 } @titi);
là ou nous avons plutôt tendance à écrire
my @toto = map { $_ += 10 } @titi;
Sylvain n'a pas commis l'erreur de mettre une virgule entre le bloc et le
tableau, mais il a utilisé une syntaxe avec parenthèses qui évoque les appels
de fonction. Un peu plus loin, il y avait toutefois une erreur :
$scal = %hash # donne le nombre de clés
C'est faux. Évaluer un hachage en mode scalaire renvoie une chaîne dont l'interprétation
importe peu pour le commun des mortels. La seule chose à retenir est que si le
hachage est vide, cette chaîne vaut "0", soit une valeur « faux »,
et que lorsque le hachage comporte au moins une clé et une valeur, la chaîne sera
équivalente à « vrai » en contexte booléen. Pour les curieux, la chaîne
donne des indications sur la répartition des clés du hachage en buckets.
- Un autre point qui a étonné Philippe. Sylvain donnait un exemple de hachage
à plusieurs clés. Il alimente ce hachage ainsi :
$hash{"$cle1:$cle2:$cle3"} = $valeur;
Pour Philippe, lorsqu'il y a plusieurs clés, on fait une structure à plusieurs
niveaux, c'est-à-dire avec des références :
$hash{$cle1}{$cle2}{$cle3} = $valeur;
En fait, l'exemple de Sylvain est valide, car dans ce cas précis les
clés sont numériques et il n'y a en conséquence aucun risque que ces
clés contiennent un « : ». À l'époque de Perl 4, lorsque les
références n'existaient pas, les structures à plusieurs niveaux se
codaient en joignant les différents éléments de la clé, séparés par le
contenu de la variable $;. Habituellement, il s'agit du
caractère 034, soit CTRL-\, soit le
file separator, mais rien n'empêche d'utiliser un caractère
imprimable tel que « : ».
- Sylvain ayant utilisé l'opérateur « .. » en contexte de liste,
Philippe tente de lui expliquer le même opérateur en contexte scalaire.
C'est difficile à exprimer et lors de la réunion, il n'a pas trouvé une
explication suffisamment claire. En y réfléchissant le lendemain, j'ai trouvé
l'analogie suivante. Une condition (if, while ou autre) est
analogue à une porte automatique. La plupart du temps, il s'agit d'une porte
commandée par un tapis. Tant qu'une personne est présente sur le tapis,
la porte est ouverte et dès qu'il n'y a plus personne, elle se ferme.
Lorsque la condition comprend l'opérateur « .. », elle se comporte
comme une porte commandée par deux cellules photo-électriques (*).
Une cellule provoque l'ouverture de la porte, l'autre provoque sa fermeture.
Entre ces deux instants, la porte reste ouverte. Lors de la réunion, Philippe
a donné l'exemple habituel, qui consiste à extraire les entêtes d'un message.
Il s'agit de :
while (1../^$/) { ... }
L'opérateur « .. » en mode scalaire présente un autre
difficulté dans la mesure où les conditions booléennes ne sont plus interpêtées
exactement de la façon habituelle. La première condition, « 1 »
signifie « numéro d'enregistrement égal à 1 » et la deuxième
condition signifie « ligne vide » (expression régulière sur
$_). La porte s'ouvre lorsque la première cellule est actionnée,
c'est-à-dire lorsque l'on lit l'enregistrement numéro 1. Et elle se referme
lorsque la deuxième cellule est actionnée, c'est-à-dire lorsque le programme
lit une ligne vide.
(*) En fait, il s'agit généralement de
photopiles, mais l'utilisateur lambda ne fait pas la différence.
- Nicolas et Philippe évoquent diverses autres astuces très utiles lors
de compétitions de
golf.
Je crois qu'ils ont parlé notamment de l'astuce
exposée sur la liste par
Jérôme Quelin.
Pour compter le nombre de
lignes d'un fichier, l'idée première est de lire le fichier, puis à la
fin d'imprimer le compteur « $. ». Mais le plus
court, pour coder cette boucle, c'est d'utiliser l'option -n
de la ligne de commande, quitte à rajouter un bloc END. Cela
donne :
perl -ne 'END {print $.}' fichier
Lors de la compilation, ce morceau de programme est transformé en :
LINE: while (defined($_ = <ARGV>)) {
END {print $.};
}
Mais Philippe et Jérôme font mieux. Leur solution est :
perl -ne '}{print $.' fichier
ce qui se transforme en :
LINE: while (defined($_ = <ARGV>)) {
}{print $.
}
De la sorte, l'accolade ouverte par l'option -n est fermée
par l'accolade saisie dans le -e et l'accolade ouverte
dans le -e est fermée par l'accolade générée par -n.
- Pour aider les nouveaux à mieux comprendre la variable $_,
argument par défaut de nombreuses fonctions, il convient de faire l'analogie
avec le pronom it en anglais. À noter que Perl 6 sera plus souple,
et permettra de choisir la variable par défaut à l'intérieur d'une boucle.
L'apocalypse 4
donne des exemples du genre
for (@tableau) -> $x {
bla bla bla
}
et dans le corps de la boucle, c'est $x qui est l'alias tour à tour
de chaque élément de @tableau et qui est l'argument par défaut
des opérateurs sans opérande comme chomp; ou s/titi/toto/g;.
On pourra même parcourir les éléments d'une liste deux par deux, avec une
boucle du genre
for (@tableau) -> $x, $y {
bla bla bla
}
Attention, ce n'est pas valable pour parcourir un hachage. En Perl 6, un
hachage est une liste de paires, ce qui change énormément par rapport à
Perl 5 lorsque l'on alimente un tableau avec un hachage. Au lieu
d'obtenir une liste à 2.n éléments, avec alternance des clés
et des valeurs, on obtiendra une liste à n éléments, chacun d'entre
eux étant une paire (clé => valeur). Pour obtenir une liste
alternant les clés et les valeurs, il faut utiliser la propriété kv
du hachage.
for (%hachage).kv -> $k, $v {
bla bla bla
}
- Une autre différence entre Perl 5 et Perl 6, c'est que l'accès à un élément
de tableau se fera par @toto[$i] au lieu de $toto[$i]. Philippe
Bricout (absent de la réunion, mais dont les propos sont rapportés par Nicolas)
regrette cela, car l'opposition $toto[$i] <-> @toto
lui rappelle l'opposition singulier <-> pluriel dans les langages
naturels. [ Autant j'approuve certaines analogies entre Perl et les
langages naturels, autant cette analogie m'a toujours parue tirée par les
cheveux. ] Ce changement inquiète D@vid. Lorsqu'il faudra convertir
un programme de 50 000 lignes, comment être sûr de ne rien oublier ?
BooK et moi lui signalons qu'il est prévu d'avoir un convertisseur p52p6
(qui se prononce Perl five to Perl six, aucun rapport avec le nombre de semaines
dans une année) qui fera le boulot, sauf dans les cas les plus tordus.
- Un point que les débutants ont du mal à assimiler, c'est qu'il ne faut pas
utiliser local, mais my. Dans mon cas, j'ai mis un
certain temps avant d'admettre que l'on pouvait avoir une variable my
au niveau d'un fichier, je croyais que ce n'était valable qu'à l'intérieur
d'un bloc délimité par des accolades. Un point que David n'avait pas compris,
c'est que les déclarations package n'ont aucune influence sur
la visibilité d'une variable my.
my $x;
sub toto {
print $x; # moi : « $x est toujours visible, ah bon »
}
package foo;
print $x; # David : « et là aussi, $x est toujours visible ? »
- Dans une optique plus générale, il est assez facile d'apprendre les rudiments
de Perl et d'avoir un niveau équivalent au babil enfantin, mais il est plus
dur d'arriver à un niveau de maîtrise convenable du langage, niveau correspondant
à un adulte parlant une langue naturelle.
- Lorsqu'un débutant pose une question sur la liste ou sur un forum,
les codeurs confirmés répondent souvent par un simple perldoc perlfunc
ou perldoc perlvar. Mais il faut reconnaître que la documentation
n'est pas d'un abord facile pour un débutant. Comme disait une célébrité de Perl
et comme le rappelle BooK, la documentation présente deux gros problèmes
simultanément :
- il n'y a pas assez de doc,
- et il y a trop de doc.
En effet, si l'on se pose une question bien spécifique, on ne trouve pas
la réponse à la question, mais dès que l'on élargit quelque peu
le champ de la question, alors on est submergé par l'abondance de texte.
Philippe évoque aussi le cas suivant. Lorsque quelqu'un cherche à avoir
des renseignements sur les références, il (BooK) répond perldoc perlref
avec quand même des éléments de réponse pour la question particulière.
Mais il a constaté très récemment qu'il existait aussi un perlreftut.pod,
qui présente les références sous la forme d'un tutoriel au lieu de constituer
un document de référence, précis et complet certes, mais rébarbatif.
Donc, si même nous autres ne savons pas la liste des fichiers intéressants
de la doc, il y a un problème.
- Marianne est venue pour faire un article sur les Mongueurs de
Perl (ou les Perl Mongers) et sur Perl. Je n'ai
quasiment pas suivi les questions qu'elle a posées. N'importe
comment vous pourrez les lire dans
Linux Magazine.
Je me souviens seulement qu'elle a demandé
s'il existait des logiciels écrits en Perl. Oui, il y a
- Majordomo (gestion de liste de diffusion),
- Sympa (même chose, plus récent et mieux),
- Bugzilla (recueil des problèmes rencontrés dans Mozilla),
- Slashcode (moteur de certains sites web, donc Slashdot),
- ...et Frozen Bubbles, un jeu bien connu.
- Philippe nous parle du module
Games::Golf
auquel il collabore.
En ce moment, il est en train de supprimer des fonctionnalités.
En effet, l'un des autres développeurs a des tas d'idées sur ce que
le module pourrait et devrait faire et Philippe tente de limiter
l'exubérance de cette personne et de limiter le module au strict minimum.
Notamment, quasiment dès le début le module comportait la possibilité
de traiter le courrier électronique
(phénomène connu)
et Philippe a estimé que cela n'était pas indispensable.
- Nicolas a écrit des modules, mais il n'ose pas les mettre sur
CPAN.
Il préfère les soumettre à une revue de code en
comité restreint,
avant de les rendre disponibles au monde entier. Il profitera donc du
serveur CVS
des Mongueurs de Perl pour nous les
soumettre, et lorsque nous lui aurons fait toutes remarques
utiles, il les chargera sur CPAN pour le bénéfice de la
communauté mondiale Perl. Philippe lui répond que, du moment que
la distribution comporte un script test.pl ou un
répertoire t/ avec quelques scripts de test, cela montre
qu'il a fait l'effort de tester son programme.
- David a examiné la liste des abonnés à perl@mongueurs.net.
Il y voit une majorité d'adresses provenant des fournisseurs d'accès publics
(Club Internet,
Free,
Wanadoo,
etc) et une proportion notable
d'abonnés utilisant leur adresse professionnelle. Il existe également
quelques personnes qui utilisent leur nom de famille comme nom de
domaine et qui par conséquent gèrent eux-mêmes leur serveur de
courrier. En revanche, une population totalement absente de la liste
est celle des universitaires (professeurs et étudiants confondus).
Il semblerait que Perl ne soit pas enseigné ni utilisé dans les
facultés.
- Jacques demande l'effectif de la liste. Aux dernières nouvelles,
nous sommes 190 abonnés. Jacques s'occupe d'une
liste consacrée à la psychanalyse et à Lacan.
Le sujet a beau être très étroit,
il a environ 500 abonnés sur sa liste. Il est vrai que
perl@mongueurs.net ne concerne que la France. Mais les
abonnés de la liste de Jacques sont francophones à 90 %.
Il est donc étonné qu'il y ait si peu de monde sur notre liste.
- Il existe d'autres listes francophones pour Perl, mais on peut se poser
des questions à leur sujet. J'ai constaté dans l'annuaire
des listes Perl qu'il en existe une nommée Perl-FR, mais elle
est moribonde. L'un des participants à la réunion s'est abonné à cette liste,
mais il n'a reçu que trois messages. Il paraît qu'il en existe une
dont le nom comporte oghma, mais je ne sais rien de plus à son sujet.
- D@vid évoque le compte-rendu de la réunion de février,
à laquelle je n'ai
pas participé. Il voulait s'en occuper et pour ce faire il a envoyé un message
sur la liste pour que les participants rassemblent leurs souvenirs, ce
qui lui permettrait de rédiger le compte-rendu. Lorsqu'il a vu le résultat
de son appel, il a eu l'impression qu'il n'arriverait pas à obtenir un
compte-rendu aussi détaillé que ce que je fais habituellement et il a
laissé tomber. De mon côté, je n'avais pas compris qu'il voulait s'occuper
personnellement de la rédaction du compte-rendu, donc j'ai cru que
les réponses des participants m'étaient destinées et j'ai écrit le
compte-rendu en les reprenant telles quelles (après une correction orthographique
partielle) et en ajoutant quelques liens. J'ai bien été un tout petit peu
étonné que D@vid lance la collecte des souvenirs et qu'il n'y participe pas
lui-même.
- BooK évoque les comptes-rendus passés en général. Il arrive fréquemment
qu'un lien devienne périmé. Faut-il les laisser tels quels, ou faut-il
tenter de retrouver la page web (ou un équivalent) ? Je préfère
mettre à jour le compte-rendu, pour éviter des liens périmés, quitte
à enlever les liens si je ne trouve pas de page web les remplaçant.
- Sylvain demande des précisions sur l'Association et sur la
liste de diffusion. Je ne vais pas rappeler ici ce qu'est
l'association,
il en a été longuement question dans les discussions avec d'autres
personnes et dans les comptes-rendus précédents. Simplement, j'ai
cru comprendre que l'interlocuteur de Sylvain lui indiquait
que la liste avait un trafic léger, du genre 10 ou 20 messages
par jour. Or, j'écris ces lignes le 17 avril, juste après
avoir constaté que ce jour même, entre 8 heures et
19 heures 30, il y a eu 57 messages !
HTML 5 - CSS v3
Mongueurs de Paris, le 4 juillet 2018
Copyright © The Paris Perl Mongers, 1999-2024