Прежде всего, я считаю полезным использовать заключающие в скобки скобки для управления областью при объединении нескольких пакетов в один файл. Кроме того, включение пакета в блок BEGIN делает его более похожим на use
, который использовался для его загрузки, но это в основном, если я собираю пакет в основной скрипт.
use Foo
совпадает с BEGIN { require Foo; Foo->import }
.
Итак, у вас есть два варианта:
- вызов
BEGIN{ Foo::Whizzy->import; }
в вашем основном скрипте.
- делает
Foo::Bar::import
триггер Foo::Whizzy::import
на вызывающем модуле.
В 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
В вашем основном коде:
use Foo::Bar;
# If you don't do a custom import for Foo::Bar, add this line:
BEGIN { Foo::Whizzy->import };