我有两个perl模块,每个模块都使用第二个模块,即Module1.pm
使用Module2
Module2.pm
使用Module1
当我使用use Module1;use Module2加载这两个模块时,后台会发生什么?
谁能解释一下在后台发生了什么,为什么我没有进入无限循环?
发布于 2010-04-09 03:21:30
您不会因为特殊的散列%INC而陷入无限循环
%Inc.
散列%INC包含通过do、require或use操作符包含的每个文件名的条目。键是您指定的文件名(将模块名转换为路径名),值是找到的文件的位置。require运算符使用此哈希来确定是否已包含特定文件。
另外,请记住use Module LIST等同于
BEGIN { require Module; Module->import( LIST ); }因此,当主程序使用Module1时,将发生以下序列:
require Module1 (from package main)require Module2 (from package Module 1)require Module1 )(不执行任何操作,因为%INC)Module1->import中已经存在Module1 (into package Module2)Module2->import (into package Module1)Module1->import (into package main)https://stackoverflow.com/questions/2602635
复制相似问题