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

Documents pareils