Perl库的用法

Jea*_*ean 4 perl

use mylibrary有条件地包括(假设mylibrary仅在条件为真时使用)与use mylibrary无条件地添加在脚本顶部之间是否有任何好处(wrt性能/内存使用)?

# Script 1 (Unconditional use)
use mylibrary;
if($condition)
{
    # Do something with mylibrary
}

# Script 2 (Conditional use)
if($condition)
{
    use mylibrary;
    # Do something with mylibrary
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*ean 7

use是一个编译时构造.在您的两种情况下,mylibrary实际上是在您的"无条件"和"有条件"情况下导入的.如果要有条件地导入库,请使用require运行时构造.

if ($condition) {
    require mylibrary;
    # mylibrary->import;
    # ...
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你会失去一些编译时的好处use.例如,require不会mylibrary->import在编译时调用,也不会调用use.import如上所示,您可以根据需要调用自己,但是import在编译时生效的任何内容在运行时调用时都不会产生这种效果.

假设您的模块mylibrary导出一个函数foo.然后这工作:

use strict;
use mylibrary;  # exports function foo()
foo;
Run Code Online (Sandbox Code Playgroud)

但这是一个错误:

use strict;
require mylibrary;
mylibrary->import; # too late to notify Perl's parser about the foo() function
foo; # error; unknown function
Run Code Online (Sandbox Code Playgroud)

至于这样做是否有任何好处,可能会mylibrary导致进口成本高昂.大多数时候,可能不是.