Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes |
perl:programmation_modulaire [2009/03/15 00:53] – édition externe 127.0.0.1 | perl:programmation_modulaire [2009/03/15 00:57] – root |
---|
| |
Pour utiliser un module Perl, il suffit de demander : | Pour utiliser un module Perl, il suffit de demander : |
| |
use List::Util (shuffle); | use List::Util (shuffle); |
| |
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 |
| |
* **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 : |
| |
use lib "./perl/tp1/tplib.pm"; | use lib "./perl/tp1/tplib.pm"; |
... | ... |
| |
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 |
| |
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 |
| |
| |
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/; |
... | ... |
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 |
| |
=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 |
| |
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 |
| |