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)
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导致进口成本高昂.大多数时候,可能不是.