如何让一个configuration文件自动为所有页面添加“全局”模块

我正在用apache构build一个使用perl的内部自动化/ web工具。 它托pipe在一个Windows环境中。 我的问题是,当处理很多页面都有共同的模块。 而不是手动为每个页面添加每个模块,是否可以有一个“全局模块”拉入所有可用于页面的模块?

例如,如果我需要添加一个新的模块,并有10个页面,而不是进入每个页面,并添加使用New :: Package; 是否可以在1个configuration文件中做到这一点,这将使New :: Package可用于使用此configuration模块的每个文件?

我已经使用PHP完成了这个工作,在某些初始化脚本中包含/ require,然后在每个页面上简单地包含该初始化脚本。

Package MyProj::Configuration use package1; ... use package999; 

 # Main Page use MyProj::Configuration; # Now all modules are included in this page, without needing to add them manually 

TLDR:你可以有一个configuration模块导入多个模块/包到只包含这个神奇configuration模块的页面吗?

编辑:我想补充说,我是相当新的Perl,所以如果这是一个明显的事情,去容易:)

这根本不是一件明显的事情。 Exporter模块提供了一个可以帮助解决这个问题的export_to_level函数。 通常,使用Exporter (即将一个包作为Exporter一个子类)将符号导出到调用包中。 export_to_level方法可以将符号导出到堆栈跟踪上方的包中,这是您想要在此处执行的操作。 这是一个概念验证:

首先一些带有导出函数的模块:

 # modulee1.pm package modulee1; use base 'Exporter'; our @EXPORT = ('foo'); sub foo { "FOO" } 1; # modulee2.pm package modulee2; use base 'Exporter'; our @EXPORT_OK = ('bar'); sub bar { "BAR" } 1; # modulee3.pm package modulee3; use base 'Exporter'; our @EXPORT_OK = ('baz'); our %EXPORT_TAGS = ('all' => [ 'baz' ]); sub baz { "BAZ" } 1; 

而不是不得不说

 use modulee1; use modulee2 'bar'; use modulee3 ':all'; use modulee4; # some other module that doesn't need to export anything 

在几十个脚本的每一个,你宁愿只是说

 use modulee1234; 

下面是modulee1234.pm样子:

 package modulee1234; # optional use modulee1; use modulee2; use modulee3; use modulee4; # these commands could go inside an import method, too. modulee1->export_to_level(1, __PACKAGE__); modulee2->export_to_level(1, __PACKAGE__, 'bar'); modulee3->export_to_level(1, __PACKAGE__, ':all'); 1; 

现在打电话

 package MyPackage; use modulee1234; 

在你的脚本中将加载其他四个模块,并将所有需要的函数导出到MyPackage包中

 use modulee1234; print foo(), bar(), baz(); 

足以产生输出"FOOBARBAZ"