Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Expert Confirmé Sénior
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 172
    Points : 8 307
    Points
    8 307

    Par défaut Modules indispensables du CPAN

    Le CPAN fournit une énorme quantité de modules, mais ils ne sont pas tous aussi aboutis ou utiles, cependant pour un débutant il est difficile de les juger objectivement, et même pour un utilisateur expérimenté certains domaines sont si surchargés de modules qui ont l'air corrects qu'il est difficile et long de comparer et choisir.
    Ce sujet vise à recenser les modules importants dans les domaines susceptibles de concerner une grande partie des utilisateurs du forum et de donner une appréciation objective de leurs capacités. A terme il pourra servir à établir une liste de modules "recommandés" ou du moins "supportés" par le forum, qui pourra être consultable dans la partie Perl du site.

    Pour chaque module, accompagnez votre post d'une courte présentation (2 lignes suffisent, vous pouvez faire plus cependant), d'un lien vers la distribution CPAN et d'un lien vers son éventuel homepage. Si vous connaissez un tutoriel pour l'utilisation de ce module c'est un plus appréciable (encore plus s'il est en français).

    --
    Jedaï

  2. #2
    Expert Confirmé Sénior
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 172
    Points : 8 307
    Points
    8 307

    Par défaut

    DateTime

    Je débute avec les modules de manipulation de date et de temps.
    Perl dispose d'une exceptionnelle variété de modules dans ce domaine, du plus utile au plus cocasse.

    L'ensemble de ces modules offrent des moyens plus évolués que localtime(), time(), gmtime() et timelocal() de manipuler des dates (date du lendemain, de dans 3 mois un jour et 3 heures, du prochain samedi, du premier jour du mois de Juin en 666 av.J.C., etc), de changer le fuseau horaire, gérer les bizarreries de nos calendriers (DST = Daylight Saving Time = heure d'été/hiver, secondes qui sautent de temps en temps, etc...) et d'autres calendriers (utile pour savoir quel jour on est selon le calendrier bouddhique ou chinois par exemple, ou se demander quel jour on serait si le calendrier révolutionnaire français avait été conservé...).


    De bons choix dans ce domaines sont par exemple Date::Manip ou la distribution TimeDate.

    Pour ma part, je conseille la distribution DateTime qui est complète et simple à utiliser, avec une interface claire. Les besoins de bases sont déjà inclus dans la distribution de base mais il est aisé d'obtenir exactement ce que l'on souhaite de plus exotique avec l'un des nombreux modules supplémentaires.

    DateTime offre une interface objet, chaque objet DateTime représente une date précise à la nanoseconde près avec un fuseau horaire associé, et n'est pas limité par les problèmes d'epoch (autrement dit on peut avoir une date aussi loin dans le passé ou le futur que l'on veut).
    DateTime::Duration permet de représenter des durées (sic), on peut effectuer les opérations calendaires avec des méthodes ou des opérateurs surchargés selon ses préférences, il en est de même pour les comparaisons de dates.
    DateTime::Span permet de représenter des intervalles temporels, DateTime::Set de représenter des ensembles de dates (éventuellement infinis, comme par exemple "tous les samedis à 3h du matin"), on peut effectuer un certain nombre de manipulations sur ces objets également.
    Les nombreux modules de la famille DateTime::Format fournissent à peu près tous les parsers de dates existant en Perl, ainsi que les formateurs. On peut attacher un formateur ainsi qu'une locale à un objet DateTime de façon à ce que l'objet se comporte de façon adéquate en contexte de string (par exemple quand il est interpolé dans une chaîne de caractère).
    La famille DateTime::Calendar offre un ensemble de calendrier divers (il manque malheureusement le calendrier islamique pour l'instant, peut-être ferais-je quelque chose pour y remédier si j'ai le temps).
    Etc...

    DateTime offre donc une solution complète et modulaire aux problèmes de temps et de dates en Perl.


    --
    Jedaï

  3. #3
    Membre du Club
    Inscrit en
    février 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : février 2007
    Messages : 32
    Points : 41
    Points
    41

    Par défaut Win32::Api

    Dans en environnement Windows, ça permet d'importer dans un programme perl des fonctions depuis des dll - standard windows ou écrites par nos soins.

    Très pratique pour accéder au fonctions système par exemple ou s'interfacer avec des API C.

    Parmi les utilisations que j'en ai faites,

    * récupérer la résolution de l'écran
    * déplacer le curseur de la souris

    Ou appel de bouts de programmes écrits en C/C++ et compilés dans une dll ad-hoc.

  4. #4
    Expert Confirmé Sénior
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 172
    Points : 8 307
    Points
    8 307

    Par défaut

    Le lien : Win32::API.
    Ne pas oublier que ceci ne fonctionnera que pour Windows (et encore, seulement ceux qui ont les bonnes dll, ce qui est parfois risqué quand on fait appel à des dll "standards"), donc pour tous ceux qui ont des velléités de multiplateforme, c'est à oublier, pour eux mieux vaut s'intéresser à Inline ou à XS. Sinon, pour une application purement Windows c'est effectivement un module précieux et facile d'utilisation.

    --
    Jedaï

  5. #5
    Expert Confirmé Sénior
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 172
    Points : 8 307
    Points
    8 307

    Par défaut

    Perl::Critic :

    Ce module, à placer aux côtés des pragmas "strict" et "warnings" vous aidera à avoir du code Perl irréprochable. Basé en grande partie sur les recommandations de l'excellent livre "Perl Best Practices" (qui lui n'a pas une vocation généraliste et n'aura donc pas sa place dans ce post, mais plutôt dans son jumeaux maléfique) et délivre un commentaire de ce code. Commentaire qui non content de repérer toute erreur potentielle et de préconiser une solution préventive, vous conseillera des améliorations stylistiques diverses pour améliorer la lisibilité et la robustesse de votre code.

    On pourrait arguer que ce module est en contradiction avec la philosophie TIMTOWDI de Perl et que les goûts et les couleurs ça ne se discute pas, mais en réalité une très grande partie des conseils donnés sont très recommandables, et le module en lui-même est hautement configurable, vous permettant ainsi de vous constituer aisément un outil de vérification de votre code qui tient compte de vos petites habitudes et maniérisme et débusque toutes les constructions fragiles.

    A mon avis tout code (a fortiori tout module) mis en production devrait avoir passé l'épreuve de perlcritic (l'utilitaire livré par défaut avec ce module), même si certains (beaucoup) de ses avertissements ont été ignorés.

    --
    Jedaï

  6. #6
    Expert Confirmé Sénior
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2003
    Messages
    6 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : avril 2003
    Messages : 6 172
    Points : 8 307
    Points
    8 307

    Par défaut

    Moose :

    Un module sérieux, pas encore complètement éprouvé, mais suffisamment avancé à mon goût pour qu'il ait sa place ici. Moose est un système de création de module OO pour Perl comme il en existe des douzaines... Cependant celui-ci est particulièrement puissant et bien pensé, il s'appuie sur le modèle prévu pour Perl6 et en donne un aperçu plutôt alléchant.
    Avec ce module créer une nouvelle classe en Perl devient trivial et propre, et créer une véritable hiérarchie objet est tout aussi facile. De plus Moose offre des capacités véritablement intéressantes grâce au concept de Rôle (le système mi-mixin mi-interface à la Java adopté par Perl6 et issu directement des dernières recherches universitaires sur l'orienté objet).

    L'essayer c'est l'adopter, pour tout ses futurs développement objet en Perl, on croirait écrire du Ruby niveau facilité de mise en place de classe et capacités intégrées de manipulation des hiérarchies et des méthodes. Mais ça reste du Perl avec toute la liberté que ça implique (et la familiarité pour la plupart d'entre nous).

    Un exemple ultra-simpliste :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
      package Point;
      use Moose;
     
      has 'x' => (isa => 'Int', is => 'ro');
      has 'y' => (isa => 'Int', is => 'rw');
     
      sub clear {
          my $self = shift;
          $self->{x} = 0;
          $self->y(0);    
      }
     
      package Point3D;
      use Moose;
     
      extends 'Point';
     
      has 'z' => (isa => 'Int');
     
      after 'clear' => sub {
          my $self = shift;
          $self->{z} = 0;
      };
    et un exemple plus intéressant :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package BinaryTree;
    use Moose;
     
    has 'node' => (is => 'rw', isa => 'Any');
     
    has 'parent' => (
      is        => 'rw',
      isa       => 'BinaryTree',        
      predicate => 'has_parent',
      weak_ref  => 1,
    );
     
    has 'left' => (
      is        => 'rw',        
      isa       => 'BinaryTree',                
      predicate => 'has_left',  
      lazy      => 1,
      default   => sub { BinaryTree->new(parent => $_[0]) },       
    );
     
    has 'right' => (
      is        => 'rw',        
      isa       => 'BinaryTree',                
      predicate => 'has_right',   
      lazy      => 1,       
      default   => sub { BinaryTree->new(parent => $_[0]) },       
    );
     
    before 'right', 'left' => sub {
      my ($self, $tree) = @_;
      $tree->parent($self) if defined $tree;   
    };
     
    1;
    Moose n'est déjà plus un jouet, il est utilisé en production par certaines compagnies, combien de temps encore avant qu'il ne s'impose comme un choix privilégié pour créer de nouveaux modules orientés objets en Perl ?

    --
    Jedaï

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    16 657
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 16 657
    Points : 490 377
    Points
    490 377

    Par défaut

    Voici un module que j'utilise depuis quelques années Sous Linux comme sous Windows. Je ne l'utilise pas sous forme de programme mais plutôt en ligne de commande. C'est un outil plus puissant qu'un grep. Ce module s'appelle ack.
    Je vous conseil de l'installer sur vos machines Linux/Windows.
    Code :
    1
    2
    ppm install App::Ack
    perl -MCPAN -e 'install App::Ack'
    Je vous conseil également d'installer Term::ANSIColor. Vous pourrez ainsi bénéficier de la coloration dans votre terminal.

    C'est vraiment un grep like très puissant.

    Exemple de commande :

    - Rechercher le mot toto dans tous les fichiers xml du répertoire C:/Rep
    commande : ack C:/Rep/*.xml --match toto
    Résultat :
    C:\Rep\pest.xml
    5: <telephone>toto</telephone>
    6: <email>toto@yahoo.fr</email>
    12: <email>toto@yahoo.fr</email>

    C:\Rep\test.xml
    5: <telephone>toto</telephone>
    6: <email>toto@yahoo.fr</email>
    12: <email>toto@yahoo.fr</email>

    C:\Rep\tut.xml
    5: <telephone>toto</telephone>
    6: <email>toto@yahoo.fr</email>
    12: <email>toto@yahoo.fr</email>

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  8. #8
    Invité régulier
    Homme Profil pro Sandro
    Étudiant
    Inscrit en
    avril 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Nom : Homme Sandro
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2011
    Messages : 7
    Points : 9
    Points
    9

    Par défaut

    Mojolicious

    Mojolicious est un framework web écrit par le concepteur de Catalyst. Il permet de faire du développement web de façon rapide, puissante et ludique. Souvent mis à jour, il est déjà largement utilisé en production.
    Ne vous y trompez pas, il n'est pas censé remplacer CGI

    Sa distribution sur cpan: http://search.cpan.org/~tempire/Mojo...Mojolicious.pm

    Son site: http://mojolicio.us/

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •