考虑到我在12个目录中有100个Perl模块。但是,查看主要的Perl脚本,它看起来像100 use p1 ; use p2 ;
等。解决此问题的最佳方法是什么?
答案 0 :(得分:8)
我似乎不太可能直接在主程序中use
所有100个模块。如果您的程序使用模块A中的函数然后从模块B调用函数,但主程序本身不引用模块B中的任何内容,则程序应仅use A
。它不应该use B
,除非它直接调用模块B中的任何内容。
另一方面,如果你的主程序确实直接与所有100个模块对话,那么它可能只是太大了。确定程序中的不同功能分组,并将每个组分解为自己的模块。这样做的主要原因是它将使代码更易于维护,更灵活,更可重用,但它也会产生令人愉快的副作用,即减少主程序直接与之对话的模块数量,从而减少减少任何一个地方所需的use
语句数量。
(而且,是的,我确实意识到100可能是夸大其词,但是,如果您对代码中的use
模块数量感到不安,那么这通常表明有问题的代码试图在一个地方做太多,应该分解成一组模块。)
答案 1 :(得分:4)
将所有use
语句放在一个文件中,比如Mods.pm:
package Mods;
use Mod1;
use Mod2;
...
并在主脚本中包含该文件:
use Mods;
答案 2 :(得分:2)
我支持eugene的解决方案,但您可以按主题将use
语句分组到文件中,例如:
package Math;
use ModMatrix;
use ModFourier;
...
当然,您应该将模块和mod集合命名为有意义。
答案 3 :(得分:1)
将所有使用语句放在单独的文件中作为eugene建议可能是最好的方法。您可以通过一些元编程来最小化该模块中的输入:
package Mods;
require Exporter;
our @ISA = 'Exporter';
my @packages = qw/Mod1 Mod2 Mod3 .... /;
# or map {"Mod$_"} 1 .. 100 if your modules are actually named that way
for (@packages) {
eval "require $_" or die $@; # 'use' means "require pkg; pkg->import()"
$_->import(); # at compile time
}
our @EXPORT = grep {*{$Mods::{$_}}{CODE}} keys %Mods::; # grab imported subs
#or @EXPORT_OK