Le langage Perl : modules
Transcription
Le langage Perl : modules
Le langage Perl : modules Yves Guidet pour Apollo Formation V 2.5.4 (June 14, 2016) Yves Guidet pour Apollo Formation Le langage Perl : modules Paquetages et Modules Un paquetage est un espace de noms. $v = 2000; $foo::v = q|On est en l'an |; # nom qualifie print $foo::v, $v; foreach (keys %foo::) { print; # v, tout seul ... } La directive package change le package par défaut. Portée : n de bloc ou de chier. Yves Guidet pour Apollo Formation Le langage Perl : modules Modules Module : I I I I package contenu dans un chier (extension .pm) dénit une méthode d'importation dénit une liste de symboles exportés automatiquement (@EXPORT) dénit une liste de symboles exportés sur demande (@EXPORT_OK) Yves Guidet pour Apollo Formation Le langage Perl : modules Modules : utilisation use File::Basename; # importe les defauts use File::Basename qw(dirname basename); # n'importe que ces # deux fonctions use File::Basename (); # n'importe rien $dir = dirname ($file); # OK ds les deux premiers cas $dir = File::Basename::dirname ($file) # dans le troisieme Yves Guidet pour Apollo Formation Le langage Perl : modules Où Perl va-t'il chercher les modules ? La liste @INC. L'option -I. La directive use lib. Yves Guidet pour Apollo Formation Le langage Perl : modules le CPAN Acronyme de Comprehensive Perl archive network. Avant tout un site et ses mirroirs, à l'URL http://www.cpan.org/ Pour chercher des modules, on essaiera plutôt http://search.cpan.org Enn CPAN est un module ; le chercher sur CPAN ... Yves Guidet pour Apollo Formation Le langage Perl : modules Installation d'un module * Vérier qu'il est pas sur votre distribution yves@rosalie:perles$ perl yves@rosalie:perles$ perl Can't locate Tagada.pm in BEGIN failed--compilation -MXML::Simple -e 1 -MTagada -e 1 @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 ... aborted. I le télécharger sur le CPAN I I I I I le détarer perl Makele.PL make make test sudo make install Yves Guidet pour Apollo Formation Le langage Perl : modules A la ligne de commande yves@rosalie:perles$ sudo perl -MCPAN -e shell Terminal does not support AddHistory. cpan shell -- CPAN exploration and modules installation ReadLine support available (try 'install Bundle::CPAN') cpan> i /ebay/ Yves Guidet pour Apollo Formation Le langage Perl : modules Le PPM Le module CPAN est opérationnel sous Windows. Mais on peut continuer d'utiliser le joli PPM (Perl package Manager) d'ActiveState : I sans argument, un outil graphique I à la ligne de commandes : I ppm install module (ppm help pour tout savoir) Yves Guidet pour Apollo Formation Le langage Perl : modules Comment créer un module ? h2xs -A -X -n Monmodule Editer ensuite Monmodule.pm. Tester en utilisant "use lib". Faire "make install" pour en faire un module standard. Faire "make tardist" pour en faire une tarball. Yves Guidet pour Apollo Formation Le langage Perl : modules Export par défaut de symboles Dans la variable @EXPORT. our @ISA = qw(Exporter); our @EXPORT = qw(&mafonction $var);# ou qw(mafonction $var) Yves Guidet pour Apollo Formation Le langage Perl : modules Export individuel de symboles Exporté à la demande. Doit apparaître dans la variable @EXPORT_OK pour être autorisé à être exporté : our @EXPORT_OK = qw(autrefonction $var2); Yves Guidet pour Apollo Formation Le langage Perl : modules Modules I en savoir plus : I I I I I perlmod (1) - Perl modules (packages and symbol tables) perlmodinstall (1) - Installing CPAN Modules perlmodlib (1) - constructing new Perl modules and nding existing ones perlmodstyle (1) - Perl module style guide perlnewmod (1) - preparing a new module for distribution Yves Guidet pour Apollo Formation Le langage Perl : modules L'objet en Perl I I I An object is simply a reference that happens to know which class it belongs to. A class is simply a package that happens to provide methods to deal with object references. A method is simply a subroutine that expects an object reference (or a package name, for class methods) as the rst argument. Yves Guidet pour Apollo Formation Le langage Perl : modules Programmation objet : un exemple Classe : un package Objet : hash (ou tableau) béni (blessed) par le paquetage. package Timer; # Hall & Schwartz sub new # le constructeur # (peut s'appeler autrement) { my $pkg =shift; bless {created => time}, $pkg # ret. une referenc } Yves Guidet pour Apollo Formation Le langage Perl : modules Méthodes sub Elapsed { my $self = shift; # l'objet return time - $self->{created}; } Yves Guidet pour Apollo Formation Le langage Perl : modules Utilisation package main; $timer = new Timer; sleep 3; print $timer->Elapsed, "\n"; Yves Guidet pour Apollo Formation Le langage Perl : modules L'opérateur ref On sait déja qu'il retourne une valeur vraie sur une référence. Dans le cas d'un objet, retourne le nom du package (man perlfunc). Yves Guidet pour Apollo Formation Le langage Perl : modules Destructeurs package Foo; use strict; sub new { my $pkg = shift; bless { name => shift }, $pkg; # ' ou " non oblig, # cd perlfaq7 } sub DESTROY { my $self = shift; print "bye '$self->{name}'\n"; } package main; $a = new Foo ('Bar'); { my $b = new Foo ('Bletch'); } $a = new Foo ('Baz'); Yves Guidet pour Apollo Formation Le langage Perl : modules Héritage La variable @ISA. Héritage simple ou multiple. Le pseudo paquetage SUPER. Pas de membre prédénis. Pas d'héritage de données. Yves Guidet pour Apollo Formation Le langage Perl : modules Héritage II Héritage de données : package Personne; sub new { my $pkg = shift; bless { @_ }, $pkg } package Etudiant; @ISA = qw (Personne); package main; $yves = new Personne (prenom => 'Yves', nom => 'Guidet'); $jeanine = new Etudiant (prenom => 'Jeanine', nom => 'Dubois', ecole => 'XXX'); Yves Guidet pour Apollo Formation Le langage Perl : modules Objets : compléments I I I perltooc (1) - Tom's OO Tutorial for Class Data in Perl perltoot (1) - Tom's object-oriented tutorial for perl perlobj (1) - Perl objects Yves Guidet pour Apollo Formation Le langage Perl : modules Evaluation et génération de code I I I Evaluation d'Expression Gestion des Exceptions Gestion des Time-Outs Yves Guidet pour Apollo Formation Le langage Perl : modules eval I I propre aux langages interprétés fonction existant dans les langages interprétés I I I shells, Lisp, ... Yves Guidet pour Apollo Formation Le langage Perl : modules eval Evaluation d'une chaîne, construite par le programme, et considérée comme une instruction. chomp (my $x = <STDIN>); eval $x; I I amusant si l'utilisateur saisit system ("/bin/rm -rf /"). use strict est notre ami ! Yves Guidet pour Apollo Formation Le langage Perl : modules eval et exceptions eval {...};# errors inside (die) warn "zut alors : $@" if $@; I I eval BLOCK se comporte comme un bloc try de C ou Java on ltrera l'exception en fonction de la valeur de $@ - ou $EVAL_ERROR avec English.pm -("" si pas d'erreur). Yves Guidet pour Apollo Formation Le langage Perl : modules Gestion des Time-Outs I perldoc -f alarm Yves Guidet pour Apollo Formation Le langage Perl : modules