Ci sono molti modi per gestire il riutilizzo del codice in Perl. Molti esempi non chiariscono la distinzione tra gli approcci e molte classi ne usano almeno due.
Ti consiglio di usare lo stile OO il più possibile e di usare ESPORTATORE solo quando hai almeno tre o più classi che hanno bisogno di un cluster relativamente piccolo di funzioni di utilità.
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;
Preferisco visualizzare l'approccio OO e l'approccio EXPORTER
come due diverse dimensioni della disponibilità del codice, come se le funzioni arrivassero nel pacchetto corrente dall'asse xo y.
Nell'esempio sopra:
Foo::Bar
deriva il metodo foo()
dalla classe Foo
Foo::Bar
definisce un metodo bar()
in modo che il metodo polimorfico bar()
non sia derivato dalla classe Foo
Entrambe le classi Foo
e Foo::Bar
ricevono EXPORTED
funzione ( non metodo ) util()
dal pacchetto ( non classe ) Foo::Util
I due sistemi sembrano complicati ma hanno un'utilità molto pratica. Tracciare eredità multiple può diventare fastidioso velocemente. Quindi, avendo la seconda dimensione della disponibilità del codice, è possibile mantenere l'albero di ereditarietà piccolo e gestibile.
Generalmente se una funzione è monolitica e relativamente stupida, utilizzare EXPORT, altrimenti utilizzare l'ereditarietà. Ma non preoccuparti di usare EXPORTER
a meno che ciò che farai non implichi più di 3 o 4 pacchetti.