在 Perl 中,加载模块的 use 和 require 有啥区别?
Posted
技术标签:
【中文标题】在 Perl 中,加载模块的 use 和 require 有啥区别?【英文标题】:In Perl, what is the difference between use and require for loading a module?在 Perl 中,加载模块的 use 和 require 有什么区别? 【发布时间】:2010-11-12 19:04:50 【问题描述】:use My::Module
和require My::Module
有什么区别?
【问题讨论】:
@Ether: 但这是 m。无论如何,其中之一。 这可能你自己很容易弄清楚,但这绝对是初学者容易提出的一个非常好的 Perl 问题。我不明白为什么它不应该在***上。伤害在哪里? 【参考方案1】:来自perldoc -q
"difference between require and use":
use Module
类似于require Module
,除了use
4.1:在编译时加载模块,而不是在运行时加载。
4.2:将符号和语义从该包导入到当前包。
【讨论】:
【参考方案2】:use
在编译时运行,require
在运行时运行。
【讨论】:
别忘了import
的来电。
这是他们在 Perl 测试和工作面试中寻找的答案。你需要记住这一点!【参考方案3】:
use
函数:
use ModuleName;
等价于使用require
函数的以下代码:
BEGIN
require ModuleName;
ModuleName->import;
BEGIN
块会导致该代码在解析器看到后立即运行。 require
加载模块或 die
s 尝试。然后调用模块的import
函数。 import
函数可以做各种各样的事情,但它通常会将函数加载到 use
d 的命名空间中(通常使用 Exporter
模块)。
需要注意的是,在这种情况下不会调用 import:
use ModuleName ();
这样的话,就等价于
BEGIN
require ModuleName;
【讨论】:
@Inshalla 我想为我的错误记忆留一点回旋余地。【参考方案4】: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 访问所有相同的文档
啊。你的 kbd 标签让你更难分辨什么是链接(以及渲染得不是很漂亮)。以上是关于在 Perl 中,加载模块的 use 和 require 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章