使用导入2个模块

ore*_*ren 2 perl

我有2个perl模块,每个模块使用第二个模块,即Module1.pm

使用Module2

Module2.pm

使用Module1

当我使用Module1加载这两个模块时,后台会发生什么; 使用Module2;

有人可以解释背景上发生了什么,为什么我不进入infinate循环?

Gre*_*con 10

由于特殊哈希,您不会陷入无限循环%INC:

%INC
散列%INC包含每个文件名的条目通过附带的do,require或者use运营商.键是您指定的文件名(模块名称转换为路径名),值是找到的文件的位置.该require运营商使用该哈希来确定特定文件是否已经被包含在内.

另外,请记住这use Module LIST相当于

BEGIN { require Module; Module->import( LIST ); }
Run Code Online (Sandbox Code Playgroud)

因此,当主程序使用时Module1,会发生以下顺序:

  1. require Module1(来自包装main)
  2. require Module2(来自包装Module 1)
  3. require Module1(什么都没有因为Module1已经存在%INC)
  4. Module1->import(进入包装Module2)
  5. Module2->import(进入包装Module1)
  6. Module1->import(进入包装main)