En primer lugar, me parece útil el uso de llaves encerrando para controlar el alcance cuando se incluyen múltiples paquetes en un archivo. Además, adjuntar el paquete en un bloque BEGIN hace que funcione más como si se usara un use
adecuado para cargarlo, pero esto es principalmente si estoy introduciendo el paquete en el script principal.
use Foo
es lo mismo que BEGIN { require Foo; Foo->import }
.
lo tanto, usted tiene dos opciones:
- llamada
BEGIN{ Foo::Whizzy->import; }
en el script principal.
- make
Foo::Bar::import
disparador Foo::Whizzy::import
en el módulo de llamada.
En Foo/Bar.pm:
{ package Foo::Bar;
use Exporter qw(export_to_level);
# Special custom import. Not needed if you call Foo::Whizzy->import
sub import {
shift;
export_to_level('Foo::Whizzy', 1, @_);
}
# stuff
# stuff
}
{ package Foo::Whizzy;
require Exporter;
our @ISA=qw(Exporter);
our @EXPORT=qw(x);
use constant { x=>1 };
}
1; # return true
En su código principal:
use Foo::Bar;
# If you don't do a custom import for Foo::Bar, add this line:
BEGIN { Foo::Whizzy->import };
thx a todos - el consenso parece - 2 ficheros uso sólo estaba siendo perezoso y prometo decir Foo foo no – pm100
En ese caso, te upvote! :) – Ether