在Perl中,加载模块的使用和要求之间有什么区别?

时间:2009-07-21 20:39:19

标签: perl module require

执行use My::Modulerequire My::Module之间的区别是什么?

4 个答案:

答案 0 :(得分:30)

use功能:

use ModuleName;

使用require函数等效于以下代码:

BEGIN {
    require ModuleName;
    ModuleName->import;
}

BEGIN块导致此代码在解析器看到它时立即运行。 require加载模块或die尝试。然后调用模块的import函数。 import函数可以执行各种操作,但将函数加载到use它的命名空间(通常使用Exporter模块)是很常见的。

请注意,在这种情况下不会调用导入:

use ModuleName ();

在这种情况下,它相当于

BEGIN {
    require ModuleName;
}

答案 1 :(得分:17)

来自perldoc -q "difference between require and use"

  

use Modulerequire Module类似,但use

除外      

4.1:在编译时加载模块,而不是运行时。

     

4.2:将该包中的符号和语义导入当前包。

答案 2 :(得分:10)

Perl附带了很棒的文档。每隔几个月至少读一次整个文档,每个人都会受益。

C:\> perldoc -f require

  

否则require要求库文件   如果尚未包括在内   包括在内。该文件包含在   do-FILE机制,这是   基本上只是各种各样的评估   与警告那个词汇变量   在调用脚本中   对包含的代码不可见。具有   语义类似于以下内容   子程序:

...等同样,

C:\> perldoc -f use

  

将一些语义导入到   来自指定模块的当前包,   一般通过别名来确定   子程序或变量名称到您的   包。它完全等同于

BEGIN { require Module; Module->import( LIST ); }
     

除了Module必须是一个单词。

...等

还有perlfaq entry,但我认为它的信息量不如上述。

答案 3 :(得分:7)

use在编译时运行,require在运行时运行。