Perl模块依赖组织并包含顺序

时间:2015-01-20 13:07:28

标签: perl module perl-module

我知道perl中的循环模块依赖性以及它是非常糟糕的事实,例如:

package ModuleA;
use ModuleB;

package ModuleB;
use ModuleA;

我想问下面的模型是否安全,是否符合一些最佳实践规则:

package main;
use ModuleA;
use ModuleB;

package ModuleA;
use ModuleB;
use ModuleC;

package ModuleB;
use ModuleC;

另外我想问一下use模块的顺序是否有影响?例如如果

package main;
use ModuleA;
use ModuleB;

相同
package main;
use ModuleB;
use ModuleA;

如果

package ModuleA;
use ModuleB;
use ModuleC;

相同
package ModuleA;
use ModuleC;
use ModuleB;

编辑: 请注意,ModuleA显式加载ModuleC(并且不依赖于ModuleB它将加载ModuleC),因为ModuleA使用ModuleC中的函数。这是一种好的设计方法吗?

1 个答案:

答案 0 :(得分:2)

最佳做法很简单:每个文件,程序或模块都应指定其所有依赖项。就是这样。例如,如果脚本需要模块A和B,并且模块A需要模块B,则不要依赖脚本已经加载的模块B - 如果其他脚本需要模块A而不需要B,该怎么办?

基于良好导出器的模块应使用@EXPORT_OK,您应该在use子句中明确列出导入的子例程。它有助于防止名称冲突。

对于只导出子程序的普通模块,顺序不重要。在其他情况下,它可能会:考虑

use warnings_;
use diagnostics;

use diagnostics;
use warnings_;