Outils pour utilisateurs

Outils du site


perl:programmation_modulaire

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
perl:programmation_modulaire [2009/03/15 00:53] – édition externe 127.0.0.1perl:programmation_modulaire [2013/03/12 23:43] (Version actuelle) root
Ligne 1: Ligne 1:
 +====== Programmation modulaire ======
 +
 ====== 1. Modules et utilisation ====== ====== 1. Modules et utilisation ======
  
Ligne 12: Ligne 14:
  
 Pour utiliser un module Perl, il suffit de demander : Pour utiliser un module Perl, il suffit de demander :
 +<code perl>
   use List::Util (shuffle);   use List::Util (shuffle);
      
   my @random = shuffle(1..10);   my @random = shuffle(1..10);
 +</code>
  
 Le nom d'un module utilise la convention !CamelCase (ici //List// et //Util//), et le nommage est lui-même dans un espace hiérarchique. Cette hiérarchie n'est pas nécessairement lié à des relations de descendance au sens orienté objet, bien que ce soit en général le cas à chaque fois que cela est possible. Le nom d'un module utilise la convention !CamelCase (ici //List// et //Util//), et le nommage est lui-même dans un espace hiérarchique. Cette hiérarchie n'est pas nécessairement lié à des relations de descendance au sens orienté objet, bien que ce soit en général le cas à chaque fois que cela est possible.
Ligne 24: Ligne 28:
 Nous le verrons plus loin, les modules Perl sont de simple fichiers Perl suivant une convention précise. L'interpréteur doit pouvoir les trouver au moment de la compilation, et il utilise plusieurs mécanismes pour ce faire : Nous le verrons plus loin, les modules Perl sont de simple fichiers Perl suivant une convention précise. L'interpréteur doit pouvoir les trouver au moment de la compilation, et il utilise plusieurs mécanismes pour ce faire :
   * **Chemins par défaut**: l'interpréteur connaît nécessairement le chemin des modules standards avec lequel il a été installé, ces chemins sont toujours configurés. Ces mêmes chemins sont en général également utilisés pour les modules supplémentaires installés par le mécanisme de la distribution GNU/Linux sous jacent. Exemple des chemins par défaut chez Debian :   * **Chemins par défaut**: l'interpréteur connaît nécessairement le chemin des modules standards avec lequel il a été installé, ces chemins sont toujours configurés. Ces mêmes chemins sont en général également utilisés pour les modules supplémentaires installés par le mécanisme de la distribution GNU/Linux sous jacent. Exemple des chemins par défaut chez Debian :
 +
   $ perl -e 'print join("\n",@INC,"")'   $ perl -e 'print join("\n",@INC,"")'
   /etc/perl   /etc/perl
Ligne 35: Ligne 40:
  
   * **Option -I** (i majuscule): on peut ponctuellement rajouter un ou des chemins de recherche de modules à l'aide de cette option, souvent à partir de l'appel à l'interpréteur incorporé en début de script :   * **Option -I** (i majuscule): on peut ponctuellement rajouter un ou des chemins de recherche de modules à l'aide de cette option, souvent à partir de l'appel à l'interpréteur incorporé en début de script :
 +
   #!/usr/bin/perl -w -Iperl/tp1   #!/usr/bin/perl -w -Iperl/tp1
   ...   ...
  
 Il est possible d'utiliser le même mécanisme, mais plus global, via les variables d'environnement //PERLOPT/PERL5OPT//, ex : Il est possible d'utiliser le même mécanisme, mais plus global, via les variables d'environnement //PERLOPT/PERL5OPT//, ex :
 +
   export PERL5OPT="-Iperl/tp1"   export PERL5OPT="-Iperl/tp1"
  
   * **PERLLIB/PERL5LIB**: il est possible de passer par ces variables d'environnement pour rajouter une liste de chemin de recherches (supplémentaires en plus des chemins standards). La variable //PERL5LIB// a précédence sur //PERLLIB//. Exemple sous GNU/Linux (attention, le séparateur est **;** sous MS Windows !) :   * **PERLLIB/PERL5LIB**: il est possible de passer par ces variables d'environnement pour rajouter une liste de chemin de recherches (supplémentaires en plus des chemins standards). La variable //PERL5LIB// a précédence sur //PERLLIB//. Exemple sous GNU/Linux (attention, le séparateur est **;** sous MS Windows !) :
 +
   export PERL5LIB="perl/tp1:perl/tp2"   export PERL5LIB="perl/tp1:perl/tp2"
  
   * **use lib "...";**: en dernier recours, et cette méthode est rarement recommandée, on peut spécifier un chemin arbitraire lors de l'utilisation d'un module, on désigne alors celui ci par son fichier. Exemple :   * **use lib "...";**: en dernier recours, et cette méthode est rarement recommandée, on peut spécifier un chemin arbitraire lors de l'utilisation d'un module, on désigne alors celui ci par son fichier. Exemple :
 +<code perl>
   use lib "./perl/tp1/tplib.pm";   use lib "./perl/tp1/tplib.pm";
   ...   ...
 +</code>
  
 ====== 2. Anatomie d'un module ====== ====== 2. Anatomie d'un module ======
Ligne 60: Ligne 69:
  
 Perl recherche les modules demandes à l'aide des chemins de recherche qu'on lui a fournis, recensées dans //@INC//, et en décomposant la hiérachie des noms en répertoire et nommant le module lui-même avec l'extension //.pm//. Exemple : Perl recherche les modules demandes à l'aide des chemins de recherche qu'on lui a fournis, recensées dans //@INC//, et en décomposant la hiérachie des noms en répertoire et nommant le module lui-même avec l'extension //.pm//. Exemple :
 +
   $ perl -e 'use IO::Socket; print $INC{"IO/Socket.pm"}'   $ perl -e 'use IO::Socket; print $INC{"IO/Socket.pm"}'
   /usr/lib/perl/5.8/IO/Socket.pm   /usr/lib/perl/5.8/IO/Socket.pm
Ligne 72: Ligne 82:
  
 ===== Bases d'un module ===== ===== Bases d'un module =====
 +<code perl>
   package Test::Bidon;   package Test::Bidon;
      
Ligne 93: Ligne 103:
   print "Testons les bidons...\n";   print "Testons les bidons...\n";
   }   }
-  +</code>
   1;   1;
  
Ligne 102: Ligne 112:
  
 Si ce module est dans un fichier //Test/Bidon.pl// et que l'on exécute le test //bidon.pl// (on profite du fait que dans les chemins standards des modules il y a le chemin courant) : Si ce module est dans un fichier //Test/Bidon.pl// et que l'on exécute le test //bidon.pl// (on profite du fait que dans les chemins standards des modules il y a le chemin courant) :
 +
   #!/usr/bin/perl -w   #!/usr/bin/perl -w
      
Ligne 112: Ligne 123:
  
 Il est important de noter que les fonctions listées dans //@EXPORT// depuis le module sont automatiquement disponibles telles quelles (sans préfixe) pour l'utilisateur, ce qui n'est pas vrai par défaut pour les fonctions dans //@EXPORT_OK//. On peut toutefois explicitement //importer// ces fonctions (et donc les nommer sans le préfixe) : Il est important de noter que les fonctions listées dans //@EXPORT// depuis le module sont automatiquement disponibles telles quelles (sans préfixe) pour l'utilisateur, ce qui n'est pas vrai par défaut pour les fonctions dans //@EXPORT_OK//. On peut toutefois explicitement //importer// ces fonctions (et donc les nommer sans le préfixe) :
 +
   use Test::Bidon qw/test/;   use Test::Bidon qw/test/;
   ...   ...
Ligne 128: Ligne 140:
 Une section de documentation est une ligne commençant par le symbole **=** et un mot-clé de section. La documentation peut être présente à n'importe quel endroit du programme, on termine une ou plusieurs sections avec //=cut//. Pour les détails de formatage, se référer à //man perlpod//. Une section de documentation est une ligne commençant par le symbole **=** et un mot-clé de section. La documentation peut être présente à n'importe quel endroit du programme, on termine une ou plusieurs sections avec //=cut//. Pour les détails de formatage, se référer à //man perlpod//.
  
-Pour le style standard (sections requises), se référer à {{{man perlmodstyle}}}. Exemple :+Pour le style standard (sections requises), se référer à man perlmodstyle. Exemple : 
   =head1 NAME   =head1 NAME
      
Ligne 145: Ligne 158:
   =head1 DESCRIPTION   =head1 DESCRIPTION
      
-  Ce module implémente des méthodes qui présentent peu d'intérêt à part celui d'illustrer le fonctionnement des modules et en particulier d'Exporter.+Ce module implémente des méthodes qui présentent peu d'intérêt à part celui d'illustrer le fonctionnement des modules et en particulier d'Exporter.
      
   ==head2 Fonctions de base   ==head2 Fonctions de base
Ligne 176: Ligne 189:
  
 L'extraction de documentation peut se faire via différents formats avec les commandes //pod...//, par exemple pour extraire une page de manuel et la consulter en même temps : L'extraction de documentation peut se faire via différents formats avec les commandes //pod...//, par exemple pour extraire une page de manuel et la consulter en même temps :
-  $ pod2man Test/Bidon.pm |man -l 
  
 +  $ pod2man Test/Bidon.pm |man -l
perl/programmation_modulaire.1237078416.txt.gz · Dernière modification : 2009/03/15 00:55 (modification externe)