【问题标题】: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 问题。我不明白为什么它不应该在stackoverflow上。伤害在哪里?

标签: perl module require


【解决方案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 标签让你更难分辨什么是链接(以及渲染得不是很漂亮)。
    猜你喜欢
    • 2010-11-25
    • 2011-10-31
    • 2011-03-25
    • 2021-04-21
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 2011-03-25
    • 2016-09-01
    相关资源
    最近更新 更多