2
我有2个Perl模块,每个模块使用第二个即 Module1.pm进口2个模块,使用
使用单词数
Module2.pm
使用模块1
什么发生在当我加载使用 时使用Module1的这两个模块的背景; 使用Module2;
有人可以解释什么发生在背景上,为什么我不进入无限循环?
我有2个Perl模块,每个模块使用第二个即 Module1.pm进口2个模块,使用
使用单词数
Module2.pm
使用模块1
什么发生在当我加载使用 时使用Module1的这两个模块的背景; 使用Module2;
有人可以解释什么发生在背景上,为什么我不进入无限循环?
你不陷入无限循环,因为特殊的哈希%INC
的:
%INC
哈希%INC
包含通过do
,require
,或use
运营商包括每个文件名条目。关键是您指定的文件名(将模块名称转换为路径名),该值是找到的文件的位置。require
运算符使用此散列来确定是否已包含特定文件。
此外,请记住use Module LIST
相当于
BEGIN { require Module; Module->import(LIST); }
因此,当主程序使用Module1
,按以下顺序发生:
require Module1
(从包main
)require Module2
(来自包Module 1
)require Module1
(什么也不做,因为Module1
已经在%INC
)Module1->import
(成包Module2
)Module2->import
(成包Module1
)Module1->import
(成包main
)
当你尝试了什么事? – 2010-04-08 19:10:18
如果你处于这种状况,我建议你应该看看你目前的设计,因为它已经坏了。库中的循环依赖只是错误的。在像Perl这样的解释型语言中,你可能会得到它,但它不适用于编译语言。在这种情况下,您应该考虑重新设计受影响的模块。 – Htbaa 2010-04-09 14:50:23