• [^] # Re: Perl

    Posté par . En réponse à la dépêche Sortie de GNU Awk 4.1.0. Évalué à 3.

    Et pour traiter un vrai gros volumes, tu passes 80% de ton temps à nettoyer les données et gérer les cas foireux.

    Non, j’équilibre. C’est rentable d’écrire deux lignes de code pour traiter un cas qui se présente une centaine de fois. Ça ne l’est pas s’il s’agit de faire dix lignes de codes pour corriger deux incohérences qui sont de toute façon des erreurs dans les données de départ et que tu pourrais corriger directement dedans.

    Typiquement dans mon code ce que tu ferais à l'arrache en 1-10 lignes de awk/perl/sed se transforme en 100-2000 lignes de code.

    Que sais-tu de ce que je fais ?

    Quand j’ai converti des tables NIS de plusieurs domaines truffées d’incohérences (parce que mal maintenues à la main pendant plusieurs années) en un annuaire LDAP unique avec une seule entrée par utilisateur (pour le compte, les alias mail, l’automount… comme ça, s’il manque quelque chose ça se voit dessus, et quand on supprime le compte, rien ne traîne), j’ai effectivement pris le temps de coder de l’ordre du millier de lignes (de Perl) pour avoir un résultat propre sans avoir besoin d’y revenir.

    La contrainte était que je voulais faire des tests avec l’annuaire LDAP avant de passer dessus en production, donc il fallait que je puisse le refaire à partir des tables NIS à jour sans avoir à ajuster des trucs à la main à chaque fois.

    Après, pour la question du nombre de lignes de code, ça dépend aussi du choix de langage et d’implémentation qu’on fait.

    J’ai eu besoin un jour de comparer des versions de paquets rpm. Pour savoir comment déterminer si une version est plus récente ou pas, j’ai regardé le code de rpm. Plusieurs pages de code C avec incrémentation du pointeur de chaîne caractère par caractère. Moins de vingt lignes pour un équivalent en Perl utilisant des expressions régulières.
    Évidemment, il faut passer plus de temps pour écrire une expression régulière correctement que pour écrire une ligne qui contient juste une incrémentation de pointeur ou une comparaison de nombres, mais au final, le temps passé reste quand même bien moindre qu’à se fader des traitements de chaîne à coup d’incrémentation de pointeur et de comparaison caractère par caractère.

    « Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone