Plusieurs implementations d'une interface pour un module
  Home FAQ Contact Sign in
fr.comp.lang.perl only
 
Advanced search
POPULAR GROUPS

more...

fr.comp.lang.perl Profile…
 Up
Plusieurs implementations d'une interface pour un module         


Author: Olivier Croquette
Date: Feb 28, 2008 09:49

Salut à tous

J'en suis encore à mes débuts en Perl, et j'ai le problème suivant: je
veux écrire sous forme de modules plusieurs implémentations d'une même
interface.
Le but est de décider à la compilation (par exemple en fonction d'une
variable d'environnement) de quelle implémentation utiliser.

Bref, j'ai:

main.pl
module.pm
module_imp1.pm
module_imp2.pm

main est censé faire un "use module", qui "redirigerait" vers
l'implémentation correcte.
Bien sûr, je veux éviter d'avoir à écrire quoique soit dans module.pm
(surtout pas une fonction par fonction à transférer).

J'ai essayé de faire ça à base de ISA et Exporter, mais je ne suis
arrivé à rien, et je ne suis pas sûr d'être sur la bonne piste.

Des idées peut-être?

Merci!
6 Comments
Re: Plusieurs implementations d'une interface pour un module         


Author: Jean-Louis MOREL
Date: Feb 28, 2008 14:38

Dans l'article news.t-online.com>,
ocroquette@ocroquette.free.fr a dit...
>
>J'en suis encore à mes débuts en Perl, et j'ai le problème suivant: je
>veux écrire sous forme de modules plusieurs implémentations d'une même
>interface.
>Le but est de décider à la compilation (par exemple en fonction d'une
>variable d'environnement) de quelle implémentation utiliser.
>
>Bref, j'ai:
>
>main.pl
>module.pm
>module_imp1.pm
>module_imp2.pm
>
>main est censé faire un "use module", qui "redirigerait" vers
>l'implémentation correcte.
>Bien sûr, je veux éviter d'avoir à écrire quoique soit dans module.pm
>(surtout pas une fonction par fonction à transférer). ...
Show full article (1.36Kb)
no comments
Re: Plusieurs implementations d'une interface pour un module         


Author: ocroquette
Date: Feb 29, 2008 01:34

On Feb 28, 11:38 pm, jl_mo...@bribes.org (Jean-Louis MOREL) wrote:
> Peut être mettre dans module.pm (si j'ai bien compris la question)
>
> if ( CONDITION ) {
> require module_imp1;}
> else {
> require module_imp2;
> }

OK, mais le problème est de faire en sorte que:
use module;
f();
appelle la fonction correspondante de l'implementation, et ce
automatiquement, avec le moins de code possible.

J'ai trouve une solution a base de ISA:

package module_imp1;

sub foo {
print("Inside module_imp1::foo\n");
}
Show full article (0.77Kb)
no comments
Re: Plusieurs implementations d'une interface pour un module         


Author: ocroquette
Date: Feb 29, 2008 01:44

On Feb 29, 10:34 am, ocroque...@free.fr wrote:
> C'est exactement ce que je veux faire, néanmoins cela oblige à
> utiliser une syntaxe "objet" (->) alors que je travaille sur un
> programme complètement orienté fonctions. :(

Une autre solution, basée sur AUTOLOAD et la recherche dynamique de
fonction cette fois:

package module_imp1;
use strict;

sub foo {
print("Inside module_imp1::foo\n");
}

package module;
Show full article (0.81Kb)
no comments
Re: Plusieurs implementations d'une interface pour un module         


Author: Paul Gaborit
Date: Feb 29, 2008 03:08

À (at) Fri, 29 Feb 2008 01:34:04 -0800 (PST),
ocroquette@free.fr écrivait (wrote):
> OK, mais le problème est de faire en sorte que:
> use module;
> f();
> appelle la fonction correspondante de l'implementation, et ce
> automatiquement, avec le moins de code possible.

C'est un problème d'import/export de fonctions(). Il suffit que chaque
implémentation exporte correctement les fonctions voulues (via
Exporter).

Ensuite le package 'Module' peut faire :

----------------------------------------
package Module;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK;
our @EXPORT;
Show full article (1.08Kb)
no comments
Re: Plusieurs implementations d'une interface pour un module         


Author: Jean-Louis MOREL
Date: Feb 29, 2008 03:10

Dans l'article 98b0a97309b6@p73g2000hsd.googlegroups.com>, ocroquette@free.fr a dit...
>
>On Feb 28, 11:38 pm, jl_mo...@bribes.org (Jean-Louis MOREL) wrote:
>> Peut =EAtre mettre dans module.pm (si j'ai bien compris la question)
>>
>> if ( CONDITION ) {
>> require module_imp1;}
>> else {
>> require module_imp2;
>> }
>
>OK, mais le probl=E8me est de faire en sorte que:
>use module;
>f();
>appelle la fonction correspondante de l'implementation, et ce
>automatiquement, avec le moins de code possible.
>
>J'ai trouve une solution a base de ISA:
> ...
Show full article (1.82Kb)
no comments
Re: Plusieurs implementations d'une interface pour un module         


Author: Olivier Croquette
Date: Feb 29, 2008 14:52

Jean-Louis MOREL wrote, On 29/02/08 12:10:
> if ($imp) {
> require module_imp1;
> module_imp1->import();
> }
> else {
> require module_imp2;
> module_imp2->import();
> }

Super, c'est exactement ça que je m'imaginais.
Il me manquait juste le import. Je n'aurais pas imaginer qu'on puisse
injecter les symboles d'un paquet dans un autre aussi facilement.
no comments