Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Retour d'experience SVP

9 réponses
Avatar
José Gallo
Bonjour,

Je viens de me mettre à la programmation en Perl (un peu contraint et forcé
j'avoue dans le cadre d'un nouvel emploi) et je constate avec surprise que
ce langage possède pas mal de faiblesses sur des notions pourtant basiques,
principalement :
- Le fait que Perl est très faiblement typé (seulement 5 types de
variable...)
- Le laxisme tout de même coupable sur les déclarations non obligatoires des
variables.
- Une lisibilité du code relativement difficile due à toutes les bidouilles
sur les listes et les hashtable principalement.
- etc, etc...

Bref, je me demandais si vous n'étiez pas de ce fait confronté à des
problèmes de fiabilité ou de reprise de code délicat. Je suis en effet
habitué à des langages beaucoup plus bornés (Java, C/C++, ADA...) et je me
suis rendu compte combien ces restrictions, au départ contraignantes,
étaient au final génératrice de gain de temps et de fiabilité à tout niveau.
Merci de me faire partager votre expérience à ce niveau et de m'indiquer les
principeaux écueils que vous avez connus en débutant la programmation Perl.

9 réponses

Avatar
Paul GABORIT
À (at) Mon, 27 Oct 2003 08:51:00 +0100,
"José Gallo" écrivait (wrote):
Je viens de me mettre à la programmation en Perl (un peu contraint et forcé
j'avoue dans le cadre d'un nouvel emploi) et je constate avec surprise que
ce langage possède pas mal de faiblesses sur des notions pourtant basiques,
principalement :
- Le fait que Perl est très faiblement typé (seulement 5 types de
variable...)


Ce ne sont pas vraiment des types (au sens des autres langages). Ce sont
plutôt des sortes de conteneurs... Le typage "fort" viendra avec Perl 6.

- Le laxisme tout de même coupable sur les déclarations non obligatoires des
variables.


Il suffit d'utiliser 'use strict;' au début d'un script pour rendre
obligatoire la déclaration des variables.

- Une lisibilité du code relativement difficile due à toutes les bidouilles
sur les listes et les hashtable principalement.


C'est la contrepartie de la puissance d'expression de Perl... Il suffit de
fixer des règles d'écriture pour les gros projets (comme c'est le cas avec
tous les autres langages). Évidemment, si ça n'a pas été fait au départ, il y
a du boulot en perspective...

- etc, etc...


Là, je ne vois pas ;-)

Bref, je me demandais si vous n'étiez pas de ce fait confronté à des
problèmes de fiabilité ou de reprise de code délicat.


C'est sûr que reprendre des milliers de lignes de code écrites n'importe
comment n'est pas agréable. Mais c'est tout aussi vrai en Perl qu'en n'importe
quoi d'autre.

Je suis en effet habitué à des langages beaucoup plus bornés (Java, C/C++,
ADA...) et je me suis rendu compte combien ces restrictions, au départ
contraignantes, étaient au final génératrice de gain de temps et de
fiabilité à tout niveau. Merci de me faire partager votre expérience à ce
niveau et de m'indiquer les principeaux écueils que vous avez connus en
débutant la programmation Perl.


Ne pas perdre de vue que Perl est aussi un langage de script pour programmes
jetables. C'est pour cela qu'il faut qu'il puisse être aussi concis et
laxiste.

Utilisez cela en début de script pour y voir plus clair :

use strict;
use warnings;
# use diagnostics; # pour mieux comprendre les message d'erreurs

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Jedaï
Paul GABORIT wrote:
À (at) Mon, 27 Oct 2003 08:51:00 +0100,
"José Gallo" écrivait (wrote):

Je viens de me mettre à la programmation en Perl (un peu contraint et forcé
j'avoue dans le cadre d'un nouvel emploi) et je constate avec surprise que
ce langage possède pas mal de faiblesses sur des notions pourtant basiques,
principalement :
- Le fait que Perl est très faiblement typé (seulement 5 types de
variable...)



Ce ne sont pas vraiment des types (au sens des autres langages). Ce sont
plutôt des sortes de conteneurs... Le typage "fort" viendra avec Perl 6.



Le fait que Perl soit peu "typé" peut également être perçu comme un
avantage, et il est à noter que c'est le cas d'une majorité de langage
de script (même ceux qui passent pour 'strict' comme Python), de plus
contrairement à beaucoup de langages qui tendent à utiliser les mêmes
opérateurs pour les strings et les nombres (ce qui je trouve entraîne
une confusion regrettable), Perl utilisent des opérateurs tout à fait
différents pour les deux, ce qui permet de voir immédiatement dans quel
"contexte" on se place (la notion de contexte est omniprésente dans
Perl, y compris dans l'utilisation de $_) et évite toute confusion.

A noter que Perl 6 introduira un typage fort mais optionnel (il a depuis
toujours été de la philosophie de Perl de permettre le plus possible et
même de permettre à l'utilisateur de s'interdire un certain nombre de
possibilités parfois dangereuses comme avec "use strict;"), ce typage
sera à fin d'optimisation mais permettra également des choses que vous
pourriez trouver assez "immondes" comme par exemple posséder une
variable où des valeurs de différents types sont superposés (un peu
comme le fameux "0 but true" de Perl jusqu'ici, mais formalisé et
étendu). Après libre à vous d'utiliser ces fonctionnalités ou de
promouvoir une programmation classique où toutes vos variables seront
typé une et une seule fois.


- Le laxisme tout de même coupable sur les déclarations non obligatoires des
variables.



Il suffit d'utiliser 'use strict;' au début d'un script pour rendre
obligatoire la déclaration des variables.



C'est même tout à fait obligatoire pour des projets de grande ampleur,
la déclaration automatique tendant à amener quantités d'erreur (ce n'est
par contre pas indispensable pour les petits programmes de quelques
lignes :) ).


- Une lisibilité du code relativement difficile due à toutes les bidouilles
sur les listes et les hashtable principalement.



C'est la contrepartie de la puissance d'expression de Perl... Il suffit de
fixer des règles d'écriture pour les gros projets (comme c'est le cas avec
tous les autres langages). Évidemment, si ça n'a pas été fait au départ, il y
a du boulot en perspective...


- etc, etc...



Là, je ne vois pas ;-)


Bref, je me demandais si vous n'étiez pas de ce fait confronté à des
problèmes de fiabilité ou de reprise de code délicat.



C'est sûr que reprendre des milliers de lignes de code écrites n'importe
comment n'est pas agréable. Mais c'est tout aussi vrai en Perl qu'en n'importe
quoi d'autre.



Oui, cela dépend en fait surtout de la qualité du code : un code bien
commenté et aéré sera tout aussi lisible en Perl qu'en C. Il est
toutefois vrai qu'un programmeur peu soigneux peut rendre du code Perl
tout à fait illisible, mais ce n'est pas la faute du langage. ;)


Je suis en effet habitué à des langages beaucoup plus bornés (Java, C/C++,
ADA...) et je me suis rendu compte combien ces restrictions, au départ
contraignantes, étaient au final génératrice de gain de temps et de
fiabilité à tout niveau. Merci de me faire partager votre expérience à ce
niveau et de m'indiquer les principeaux écueils que vous avez connus en
débutant la programmation Perl.



Ne pas perdre de vue que Perl est aussi un langage de script pour programmes
jetables. C'est pour cela qu'il faut qu'il puisse être aussi concis et
laxiste.

Utilisez cela en début de script pour y voir plus clair :

use strict;
use warnings;
# use diagnostics; # pour mieux comprendre les message d'erreurs



--
Jedaï


Avatar
Patrice Karatchentzeff
Jedaï writes:

[...]

Le fait que Perl soit peu "typé" peut également être perçu comme un
avantage, et il est à noter que c'est le cas d'une majorité de langage
de script (même ceux qui passent pour 'strict' comme Python), de plus
contrairement à beaucoup de langages qui tendent à utiliser les mêmes
opérateurs pour les strings et les nombres (ce qui je trouve entraîne
une confusion regrettable), Perl utilisent des opérateurs tout à fait
différents pour les deux, ce qui permet de voir immédiatement dans
quel "contexte" on se place (la notion de contexte est omniprésente
dans Perl, y compris dans l'utilisation de $_) et évite toute
confusion.


Là, j'abonde fortement : la surcharge d'opérateur est nettement plus
choquant - d'un point de vue compréhension du code - qu'un code mal
codé.

Un code mal écrit -> poubelle. Un code bien écrit avec des surcharges
d'opérateurs, ben, on garde mais on peut souffrir. Un code bien écrit
en Perl se lit tout seul...

Je n'arrive pas trop à comprendre les gens qui râlent contre le côté
obscur de Perl : au contraire, les variables sont immédiatement
visibles, on sait toujours ce que l'on manipule (à défaut de savoir
pourquoi ;-)) et l'héritage de C dans la forme en fait un terrain
connu pour le débutant.

Le seul truc qui peut paraître rebutant sont les variables internes de
Perl... mais pas de quoi en faire un fromage quand même.

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       

Avatar
Jean-Michel Hiver
Là, j'abonde fortement : la surcharge d'opérateur est nettement plus
choquant - d'un point de vue compréhension du code - qu'un code mal
codé.


Sauf dans les cas ou il n'y a pas d'ambiguite possible.


Un code mal écrit -> poubelle. Un code bien écrit avec des surcharges
d'opérateurs, ben, on garde mais on peut souffrir. Un code bien écrit
en Perl se lit tout seul...


Un code mal ecrit -> pas poubelle. En general, le code "mal ecrit",
"vieux", "pas propre" a une propriete: il a tendance a faire tourner
quelque chose depuis un petit moment de maniere utile.

Tu vois tous les bouts affreux pas beaux dans le code, les commentaires
genre "hack #3674...", ca s'appelle des BUGFIXES, et je trouve bien
dommage de les mettre a la poubelle.


Je n'arrive pas trop à comprendre les gens qui râlent contre le côté
obscur de Perl : au contraire, les variables sont immédiatement
visibles, on sait toujours ce que l'on manipule (à défaut de savoir
pourquoi ;-)) et l'héritage de C dans la forme en fait un terrain
connu pour le débutant.


En fait des qu'on passe a la programmation objet on manipule presque
toujours des scalaires et les variables cessent d'etre "immediatement
visibles".


Le seul truc qui peut paraître rebutant sont les variables internes de
Perl... mais pas de quoi en faire un fromage quand même.


En plus y'a le module English.

Avatar
François
- etc, etc...

Combien de choses géniales ont été créées
avec des bouts de ficelles par des gens
peu rigoureux mais imaginatifs.
Perl c'est un peu pareil.
De plus, le fait de voir un truc développé
comme un cochon qui marche est autrement
plus motivant pour s'améliorer que de n'avoir
comme résultat que les messages d'erreurs du compilateur !
Voilà mon humble avis.
Bon courage
François
Avatar
Paul GABORIT
À (at) Mon, 3 Nov 2003 12:00:50 +0100,
"François" écrivait (wrote):
Combien de choses géniales ont été créées
avec des bouts de ficelles par des gens
peu rigoureux mais imaginatifs.
Perl c'est un peu pareil.
De plus, le fait de voir un truc développé
comme un cochon qui marche est autrement
plus motivant pour s'améliorer que de n'avoir
comme résultat que les messages d'erreurs du compilateur !
Voilà mon humble avis.


C'est bien connu : c'est le bon outil qui fait le bon ouvrier.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Patrice Karatchentzeff
Jean-Michel Hiver writes:

[...]

En fait des qu'on passe a la programmation objet on manipule presque
toujours des scalaires et les variables cessent d'etre "immediatement
visibles".


Voilà une bonne raison de ne pas coder en objet ;-)

PK

--
      |      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:
     |,4-  ) )-,_. , (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'_)       

Avatar
Paul GABORIT
À (at) Wed, 05 Nov 2003 23:21:44 +0100,
Patrice Karatchentzeff écrivait (wrote):
Jean-Michel Hiver writes:

[...]

En fait des qu'on passe a la programmation objet on manipule presque
toujours des scalaires et les variables cessent d'etre "immediatement
visibles".


Voilà une bonne raison de ne pas coder en objet ;-)


Heureusement que cela n'est pas vrai ;-) Il est très facile de coder le
comportement que l'on souhaite sur un objet (qui est toujours représenté par
une référence "blessée" - bénie en français). Il devient alors beaucoup plus
puissant qu'une simple variable :
- il est typé (grâce à 'bless'),
- il peut continuer à se comporter comme un scalaire (par exemple, en
se "stringuifiant" tout seul lorsqu'il est dans une chaîne de
caractères),
- il peut aussi s'intégrer dans un calcul si on redéfini les
opérateurs voulus,
- on peut lui ajouter de nouveaux comportement via ses méthodes,
etc.

Et on continue à bénéficier des types de base de Perl qui sont plutôt des
conteneurs (scalaires, tableaux, tables de hachage, etc.).

Perl n'oblige personne à programmer proprement mais il offre tous les
mécanismes nécessaires pour le faire. Et si un mécanisme particulier vous
manque il est quasiment toujours possible de l'ajouter.

PS: j'ai un peu l'impression de prêcher des convaincus ;-)

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>


Avatar
Jean-Michel Hiver
Perl n'oblige personne à programmer proprement mais il offre tous les
mécanismes nécessaires pour le faire. Et si un mécanisme particulier vous
manque il est quasiment toujours possible de l'ajouter.

PS: j'ai un peu l'impression de prêcher des convaincus ;-)


Sans blague :)

Perso, le truc que j'utilise de plus en plus, c'est local(), qui permet
de redefinir de maniere temporaire des globales variables, mais aussi
des fonctions, des methodes, etc. etc...

Je trouve que redefinir des portions de code dynamiquement de maniere
temporaire, c'est vraiment hyper-puissant.

Bon.

Ca ne m'empeche pas d'utiliser egalement la programmation orientee
objet. C'est meme l'essentiel du quotidien :)