我有一个相当复杂的数据结构,我已经在Perl中实现了.这已被分解为大约20个班级.基本上,只要您想使用其中一个类,就需要使用所有这些类.
现在,如果有人想要使用这种数据结构,他们需要做类似的事情:
use Component::Root;
use Component::Foo;
use Component::Bar;
use Component::Baz;
use Component::Flib;
use Component::Zen;
use Component::Zen::Foo;
use Component::Zen::Bar;
use Component::Zen::Baz;
... # 15 more of these...
use Component::Last;
Run Code Online (Sandbox Code Playgroud)
能够操纵它的所有部分.如何编写一个为用户执行此操作的模块,因此他们所要做的就是
use Component;
Run Code Online (Sandbox Code Playgroud)
导入所有其他模块?
在这种特殊情况下,模块都是类,没有导出.
如果这些只是类(即它们不会导出任何函数或变量use),那么真正重要的是它们已被加载.
只需创建Component.pm:
package Component;
our $VERSION = '1.00';
use Component::Root;
use Component::Foo;
use Component::Bar;
use Component::Baz;
use Component::Flib;
use Component::Zen;
use Component::Zen::Foo;
use Component::Zen::Bar;
use Component::Zen::Baz;
... # 15 more of these...
use Component::Last;
1; # Package return value
Run Code Online (Sandbox Code Playgroud)
你不需要Exporter或类似的东西.
但是,use将这些use语句放入根节点的类或创建数据结构的模块中可能更有意义,而不是只有语句的模块.也就是说,人们会想说:
use Component::Root;
my $root = Component::Root->new(...);
Run Code Online (Sandbox Code Playgroud)
要么
use Component qw(build_structure);
my $root = build_structure(...);
Run Code Online (Sandbox Code Playgroud)
取决于您的数据结构通常如何创建.人们写作可能有点令人困惑:
use Component;
my $root = Component::Root->new(...);
Run Code Online (Sandbox Code Playgroud)
但它实际上取决于你的API是什么样的.如果人们可能会调用许多类new,那么use Component可能就是这样.