在 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::Modulerequire 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 加载模块或 dies 尝试。然后调用模块的import函数。 import 函数可以做各种各样的事情,但它通常会将函数加载到 used 的命名空间中(通常使用 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 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

perl线程和模块

Perl使用模块

生信perl脚本中常见的几个模块

Perl[Tk] 实时读入数据到表格

Perl Search::Elasticsearch模块使用经验总结

Perl读取Excel文件并解决中文乱码问题