执行use My::Module
和require My::Module
之间的区别是什么?
答案 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 Module
与require 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
在运行时运行。