Developpez.com - Rubrique Perl

Le Club des Développeurs et IT Pro

Quels sont les modules Perl intéressants pour coder ? Venez débattre

Le 2015-06-30 17:52:52, par Jasmine80, Membre émérite
Bonjour à tous,

Je me demandais, les modules complémentaires que vous pourriez conseiller, qui donnent des informations sur le script et aident à l'améliorer, qui renseignent sur la synthaxes, sur les temps d'exécussion de différents blocs de code. Je n'ai aucun besoin spécifique, c'est un poste ouvert, pour discuter, voir ce qui existe, découvrir de nouvelles choses, échanger nos expériences sur ce sujet.

D'avance merci,

Jasmine.
  Discussion forum
13 commentaires
  • magicshark
    Membre averti
    personne n'en parle car c'est le béaba mais je me dis que si un débutant traverse cette discussion ...
    donc pour moi le plus utile c'est Data:umper; qui permet de rendre des donnée au format string afin de pouvoir les afficher.
  • Philou67430
    Expert confirmé
    Pour le benchmarking, les modules :
    - Bench
    - Benchmark
    Pour l'analyse de mémoire :
    - Devel::Size
  • Philou67430
    Expert confirmé
    Tant qu'à parler des évidences, n'oublions pas le debugger : ils sont tellement nombreux, ces débutants, à ignorer l'existence du debugger...
    Il permet, en dehors de sa fonction première de trouver les erreurs, d'expérimenter des expressions (les unilignes également)
  • cmcmc
    Membre confirmé
    Envoyé par magicshark
    personne n'en parle car c'est le béaba mais je me dis que si un débutant traverse cette discussion ...
    donc pour moi le plus utile c'est Data:umper; qui permet de rendre des donnée au format string afin de pouvoir les afficher.
    Pour ma part j'ai pratiquement abandonné l'excellent mais vénérable Data:umper au profit de Data:ump. Il ne fait pas partie du core et il faut donc l'installer mais à mon avis les bénéfices sont patents.

    En particulier dd est une fonction fournie par Data:ump qui est selon moi plus facile d'utilisation et donne des résultats plus lisibles et plus compacts que Data:umper pour des impressions de test ou de debug. Elle est par exemple capable d'aggréger 0, 1, 2, 3, 4 en un intervalle 0 .. 4:
    Code :
    1
    2
    3
    4
    5
    6
    Taisha:~/perl/forum $ perl -MData::Dump -e '
      my @l = (0, 1, 2, 3, 4, 11, 20 .. 24);
      dd @l;
    '
    (0 .. 4, 11, 20 .. 24)
    Taisha:~/perl/forum $
    De plus pour l'impression de hashrefs elle trie automatiquement les clés :

    Code :
    1
    2
    3
    4
    5
    6
    Taisha:~/perl/forum $ perl -MData::Dump -e '
      my $hr = { qw(A noir E blanc I rouge U vert O bleu) }; 
      dd $hr
    '
    { A => "noir", E => "blanc", I => "rouge", O => "bleu", U => "vert" }
    Taisha:~/perl/forum $
    On peut obtenir un résultat comparable avec Data:umper mais c'est fastidieux :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Taisha:~/perl/forum $ perl -MData::Dumper -e '
      my $hr = { qw(A noir E blanc I rouge U vert O bleu) };
      local $Data::Dumper::Sortkeys  = 1;
      local $Data::Dumper::Terse     = 1;
      local $Data::Dumper::Indent    = 0;
      local $Data::Dumper::Quotekeys = 0;
      print Dumper($hr), "\n"
    '
    {A => 'noir',E => 'blanc',I => 'rouge',O => 'bleu',U => 'vert'}
    Taisha:~/perl/forum $
    L'interface proposée ne se limite pas à dd (voir en particulier ddx et pp). Globalement, c'est un module remarquablement bien conçu et très DWIM (Do What I Mean). Data:umper aussi, mais ce dernier est limité dans son évolution par les exigences de compatibilité arrière (il existe depuis la version 5.005...).
  • hotcryx
    Membre extrêmement actif
    Hello

    Depuis quelques jours, je teste les modules Benchmark et Devel::Nytprof.
    Ils sont incontournables et faciles à employer.

    Benchmark vous permettra principalement de comparer 2 ou plusieurs routines (avec cmpthese) faisant la même chose (codés avec vos petits doigts ^^), en donnant des statistiques du code le plus rapide.

    Devel::Nytprof lance le debugger Perl et calcule le temps d'exécution de chaque instruction, chaque routine, chaque module.
    Les résultats sont visualisables en html avec des codes de couleurs (rouge/vert...).

    Pour profiler par exemple le script foo.pl:
    Code :
    perl -d:nytprof foo.pl
    Rem: un fichier nytprof.out sera créé

    ensuite en terminal, pour générer les fichiers html à partir du fichier nytprof.out:
    Code :
    nytprofhtml
    #répertoire créé contenant les fichiers générés:
    Code :
    cd nytprof
    et ouvrez index.html avec un browser ou via
    Code :
    nytprofhtml --open
    (enjoy)

    pensez à renommer le répertoire nytprof pour comparer vos changements et pensez également à profiler vos modules.

    Rem: j'ai gagné 300 ms en accès sur 1.5 sec d'un CGI => 1.2 cgi
    (c'est un cgi avec accès mysql (sans index), ldap, graphe mensuel, json et jquery, je peux encore gagner du temps...)

    Prochaine étape possible: utiliser du caching.
    Ex: Cache::FastMmap
    Il y en a une floppée comme sqlite, tie, mmap, memoize, CHI... à vous de trouver votre bonheur en utilisant la mémoire, un fichier local ou une db locale...
    Ou alors passer au fastcgi, psgi...

    Rem: j'ai essayé CGI::Simple (moins lourd que CGI) mais l'ai trouvé plus lent sur un serveur IIS !
  • Lolo78
    Rédacteur/Modérateur
    Ceux qui me viennent en tête là tout de suite (outre strict et warnings):
    • diagnostics: warnings et messages d'erreur plus détaillés
    • Perl::Critic:respect des Perl Best Pracices de Damian Conway
    • B:: Deparse: décompile l'arbre d'opcodes et permet de comprendre comment Perl a interprété ton code (utile, par ex. pour déjouer des problèmes de précédence)
    • Plus généralement les modules du domaine B:
    • Perl::Tidy - indenter proprement du coode
  • Jasmine80
    Membre émérite
    Merci pour vos réponses, je vais y regarder de plus près.

    Bonne journée.
  • Lolo78
    Rédacteur/Modérateur
    Ah oui, j'avais pensé aux modules de Bench signalés par Philou, mais j'ai ensuite oublié au moment d'écrire la réponse.

    Il y a aussi les modules généralistes de profilage de code:
    Code :
    1
    2
    - Devel::Profile
    - Devel::NYTProf
    et ceux plus spécialisés:
    Code :
    1
    2
    - DBI::Profile
    - CatalystX::Profile (petit add-on utilisant Devel::NYTProf)
  • djibril
    Responsable Perl et Outils
  • Lolo78
    Rédacteur/Modérateur
    Envoyé par magicshark

    donc pour moi le plus utile c'est Data:umper.
    tile
    Ah oui, quel incroyable oubli! Oui, tu as raison, c'est bien l'un des plus utiles ou le plus utile. ++