【发布时间】:2010-11-12 19:04:50
【问题描述】:
use My::Module和require My::Module有什么区别?
【问题讨论】:
-
@Ether: 但这是 m。无论如何,其中之一。
-
这可能你自己很容易弄清楚,但这绝对是初学者容易提出的一个非常好的 Perl 问题。我不明白为什么它不应该在stackoverflow上。伤害在哪里?
use My::Module和require My::Module有什么区别?
【问题讨论】:
来自perldoc -q "difference between require and use":
use Module类似于require Module,除了use4.1:在编译时加载模块,而不是在运行时加载。
4.2:将符号和语义从该包导入到当前包。
【讨论】:
use 在编译时运行,require 在运行时运行。
【讨论】:
import的来电。
use 函数:
use ModuleName;
等价于使用require函数的以下代码:
BEGIN {
require ModuleName;
ModuleName->import;
}
BEGIN 块会导致该代码在解析器看到后立即运行。 require 加载模块或 dies 尝试。然后调用模块的import函数。 import 函数可以做各种各样的事情,但它通常会将函数加载到 used 的命名空间中(通常使用 Exporter 模块)。
需要注意的是,在这种情况下不会调用 import:
use ModuleName ();
这样的话,就等价于
BEGIN {
require ModuleName;
}
【讨论】:
Perl 带有很好的文档。每个人都会受益于至少每隔几个月阅读一次整个文档。
C:\>perldoc -f require
否则
require要求库文件 如果尚未包含,则包括在内 包括。该文件通过 do-FILE 机制,即 本质上只是各种eval 需要注意的是词法变量 在调用脚本中将是 对包含的代码不可见。已 类似于以下的语义 子程序:
...等。同样,
C:\>perldoc -f use
将一些语义导入 来自命名模块的当前包, 通常通过别名某些 子程序或变量名到你的 包裹。完全等价于
BEGIN { require Module; Module->import( LIST ); }除了 Module 必须是一个裸词。
...等
还有perlfaq entry,虽然我认为它比上面的信息少。
【讨论】:
perldoc 命令之外,您还可以通过perldoc.perl.org 访问所有相同的文档