我有2个perl模块,每个模块使用第二个模块,即 Module1.pm
使用Module2
Module2.pm
使用Module1
当我使用这些2个模块加载时会在后台发生什么 使用Module1; 使用Module2;
有人可以解释背景上发生了什么以及为什么我不进入infinate循环?
答案 0 :(得分:10)
由于特殊哈希%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
)