【发布时间】:2015-01-20 13:07:28
【问题描述】:
我知道 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-ing模块的顺序是否有影响?例如如果
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 中的函数。这是好的设计方法吗?
【问题讨论】:
-
信息不足。这些是OO模块、功能模块、语用模块吗?它们是基于 Exporter 的吗?
-
是的,他们正在使用 Exporter。我认为每个模块都包含程序代码。你能解释一下为什么这很重要吗?
-
因为
use=require+import。 OO 模块通常没有import,非Exporter 模块可能有一个狂野的import。 -
请问您所说的“狂野
import”是什么意思。此外,当您有我提到的依赖项时(并且还满足显式加载所需模块的条件,例如 ModuleA 显式加载 ModuleC 并且不依赖 ModuleB 它将加载 ModuleC)是否可以,或者是否有一些信号表明脚本应该重新设计面向对象或功能或什么? -
"wild" import 可以做任何事情:在调用者的命名空间中创建随机 subs、设置全局变量、安装信号处理程序、覆盖核心函数等。
标签: perl module perl-module