Il existe plusieurs façons de gérer la réutilisation du code en Perl. De nombreux exemples ne font pas clairement la distinction entre les approches et de nombreuses classes en utilisent au moins deux.
Je conseille d'utiliser autant que possible le style OO et de n'utiliser l'EXPORTATEUR que si vous avez au moins trois classes ou plus qui ont besoin d'un cluster relativement petit de fonctions utilitaires.
Donc:
package Foo;
use Foo::Util qw(util) ;
use strict ;
sub foo {
}
sub bar {
}
1;
package Foo::Bar ;
use Foo ;
use Foo::Util qw(util) ;
our @ISA = qw(Foo) ;
use strict ;
sub bar {
}
1;
package Foo::Util ;
use Exporter ;
our @ISA = qw(Exporter) ;
our @EXPORT = qw(util) ;
use strict ;
sub util {
}
1;
Je préfère visualiser l'approche OO et l' EXPORTER
approche comme deux dimensions différentes de la disponibilité du code, comme si les fonctions venaient dans le package actuel à partir de l'axe x ou y.
Dans l'exemple ci-dessus:
Foo::Bar
dérive la méthode foo()
de la classeFoo
Foo::Bar
définit une bar()
méthode pour que la méthode polymorphe bar()
ne soit pas dérivée de la classeFoo
Les deux classes Foo
et Foo::Bar
reçoivent la EXPORTED
fonction ( pas la méthode ) util()
du package ( pas la classe )Foo::Util
Les deux systèmes semblent compliqués mais ont une utilité très pratique. Le suivi de l'héritage multiple peut devenir difficile et rapide. Donc, avoir la deuxième dimension de la disponibilité du code, vous permet de garder votre arbre d'héritage petit et gérable.
Généralement, si une fonction est monolithique et relativement stupide, utilisez EXPORTER, sinon utilisez l'héritage. Mais ne vous embêtez pas EXPORTER
du tout à moins que ce que vous allez faire soit susceptible d'impliquer plus de 3 ou 4 packages.