[gull] Faut-il réhabiliter Perl comme langage de scripting système?
Daniel Cordey
dc at pxcluster.com
Mon Mar 5 00:25:17 CET 2018
On 04. 03. 18 21:19, Laurent Franceschetti wrote:
>
> Mon idée centrale est que si on le compare à un script bash, alors il
> se défend.
Absolument.
> _Perl est surtout un language de bas niveau_.
Je ne dirais pas ça. Perl est un langage qui a été conçu pour pouvoir
écrire des scripts d'administration plus facilement qu'en shell; et
c'est ce qu'il fait exactement.
> Je me demande is Perl ne devrait pas être au script shell, ce que C
> est l’assembleur: un espéranto; donc juste un poil plus haut niveau
> que le script shell (et donc plus portable), mais justement pas au
> point d’être un langage de haut niveau!
Je trouve cette comparaison très juste.
>
> Pareil pour moi: j’adore Python y-compris pour l’administration
> système, et je n’aime pas Perl… mais je déteste encore plus les
> scripts shell!
J'ai écrit des dizaines de milliers de lignes en sh/ksh/bash... mais
c'est vrai qu'aujourd'hui je ne le ferais plus. Très souvent on commence
par un petit script de 20-30 lignes et on fini par exagérer. Il est
toujours difficile de savoir à partir de quel moment il faut changer de
cheval. Perl permet d'aller beaucoup plus loin que le shell, en plus du
fait qu'il existe des tas de librairies Perl. Mais, comme tout, il a
aussi ses limites. A partir de quel moment faut-il encore changer de
cheval ? Je crois que la question est souvent très personnelle, car elle
dépend des compétences que l'on a dans les différents langages. Il est
évident que si tu ne connais pas C ou Python, tu ne vas pas t'y mettre
d'un seul coup.
Il m'est aussi arrivé d'osciller entre bash et Python.. de commencer
d'écrire en bash puis de basculer à Python lorsque le problème se
complexifie.
Un exemple :
Je voulais écrire un bout de script qui me donne des statistiques sur
les packages/modules Python que j'ai. J'ai commencé à l'écrire en bash
puisque je ne voulais initialement que le nombre de lignes, le nombre de
commentaire, etc. C'était assez simple au début et ça allait assez bien.
En effet, $ coup de wc -l, grep -v, sed, awk, etc. je m'en sortais très
bien et ça restait simple et petit. Naturellement, j'en ai voulu
toujours plus et j'ai commencé à produire des statistiques plus fines
concernant les doc strings, les fonctions, les méthodes, etc. Et les
limites du shell sont apparues. Le faire en Perl... j'aurais eu le même
problème car je ne pouvait me contenter de faire joujou avec des
regexp... le problème devenait trop complexes car il fallait analyser la
syntaxe. J'ai donc récrit en Python et j'ai mes stats... mais maintenant
je m'aperçoit que je devrais passer à l'utilisation de Lex/Yacc (Ply en
Python) car l'analyse syntaxique ne peut plus se suffire de combinaisons
de regexp et split()...
Ce qui me fait dire que rien n'est jamais définitif et que l'on doit
toujours se poser la question de savoir si l'on doit persévérer dans une
voie ou remettre les choses à plat. Ce qui fait que l'on devrait penser
en terme de solution finale, mais on a rarement tous les éléments
lorsque l'on commence un script :-)
>
> Si on relève les défauts de Perl (avec raison), alors pourquoi les
> scripts shell ne sont-ils pas cloués au pilori?
Absolument ! le shell (tous) ont de très gros problèmes... mais quand il
s'agit d'écrire deux ou trois lignes on ne se pose pas trop de questions.
> Et pourtant, si nous continuons à les utiliser, il doit bien y avoir
> une raison…
Oui, le shell utilise massivement de tas de commandes GNU, alors que la
plupart de ces fonctions sont intégrées à Perl. Le problème est qu'il
faut les apprendre en plus d'une syntaxe différente. C'est sans doute
une barrière d'entrée pour pas mal de gens.
>
> Je crois que la raison est que quand on fait des scripts shell
> « bare-metal », on recherche précisément ce contact dur et froid avec
> la machine: c’est un avantage. Python est un langage de l’élégance et
> du raffinement parce que son Zen est d'utiliser des librairies. Le
> revers de la médaille, c'est qu'il nous isole parfois un peu trop de
> l’OS,.
Ben, je trouve pas... tous les modules io, os, os.path, etc. sont très
proches des librairies C (chapitre 2 & 3). C'est vrai que l'argument
'mode' de la fonction 'open' a le don de m'énerver, mais à part ça, je
retrouve un environnement familier.
C'est aussi vrai que lorsque tu connais le shell et le C, l'écriture de
Perl pour lire un fichier a de quoi dérouter.
my $filename = 'data.txt';
open(my $fh, '<:encoding(UTF-8)', $filename)
or die "Could not open file '$filename' $!";
while (my $row = <$fh>) {
...
En fait dans Perl, on te demande d'entrer dans un monde assez exclusif
ou tu dois pratiquement oublier tout ce que savais au sujet de ce que tu
connais déjà. De plus, aucun autre langage n'utilise '<' pour parler de
open-en-mode-lecture; en plus du fait que ce n'est absolument pas
intuitif) !!! On te demande de faire partie d'une secte :-) Plus
sérieusement, tu repars un peu à zéro et c'est sans doute ce qui rebute
un certain nombre de gens; d'autant que ce que tu auras appris avec Perl
(je parle de sa syntaxe et de la sémantique) est inutilisable ailleurs.
> Perl, au contraire, n’est pas fait pour être contemplé mais pour
> l'atelier: il est fonctionnel, primitif et pour tout dire laid. Mais
> la grande force (oubliée) de Perl, _c’est d’adhérer de près logique du
> système UNIX_: coller les utilitaires système à la McGyver, avec des
> élastiques, des trombones et tout ce qu’on trouve sous la main.
Mais le shell fait justement ça de manière encore plus logique à mes
yeux. Il utilise pour ça les commandes GNU : grep, sed, sort, awk, tr,
etc. C'est logique, la doc se trouve en faisant 'man'... Non, Perl
ajoute des capacités de traitement et une forme de structure de donnée
qui est absente, ou trop cryptique, en shell. Perl est justement rès
complet pour faire dus système admin car il a tous les outils, sauf
qu'il traîne un certain nombre de points négatifs avec lui et c'est sans
doute ce qui le rend moins attractif lorsque tu as des alternatives.
>
> Et je trouverais même une sorte de beauté dans ce style brutaliste…
Aïe... suis pas maso à ce point :-)
>
> Et pourtant ils apprennent toujours des scripts bash, ainsi que du C…
> Et dans le style brutaliste, quid de JSON, voire CSS etc.?
Avec l'utilisation de macros & CPP on arrive à faire des choses très
élégantes et très avancées en C. On peut même faire de la programmation
objet en C (j'ai fait). Voire les premiers "translateurs/compilateurs"
C++ et XtoolKit, entre autre.
>
> Il me semble d’ailleurs que les jeunes informaticiens (en tout cas
> ceux qui s’expriment sur les réseaux sociaux) sont assez pragmatiques
> et ouverts aux nouvelles idées. Cela les rendrait peut-être plus à
> même de casser les stéréotypes des générations précédentes?
Ouai, mais va falloir leur faire avaler les 'my', '$', '@' et autres
bizarreries de Perl... c'est pas gagné :-)
Mais... pourquoi ne pas essayer... On ne sait jamais... j'ai peut-être
tout faux :-)
dc
More information about the gull
mailing list