包括有条件地使用mylibrary有什么好处(w.r.t性能/内存使用)(假设mylibrary仅在条件为真时使用)与在脚本无条件地添加使用mylibrary相比?
# Script 1 (Unconditional use) use mylibrary; if($condition) { # Do something with mylibrary } # Script 2 (Conditional use) if($condition) { use mylibrary; # Do something with mylibrary }
解决方法
use是一个编译时构造.在您的两种情况下,mylibrary实际上是在您的“无条件”和“有条件”情况下导入的.如果要有条件地导入库,请使用require,即运行时构造.
if ($condition) { require mylibrary; # mylibrary->import; # ... }
在这种情况下,您将失去一些编译时使用的好处.例如,require在编译时不会像使用那样调用mylibrary-> import.如上所示,你可以自己调用import,但是在编译时有效的任何导入都不会在运行时调用.
假设您的模块mylibrary导出函数foo.然后这工作:
use strict; use mylibrary; # exports function foo() foo;
但这是一个错误:
use strict; require mylibrary; mylibrary->import; # too late to notify Perl's parser about the foo() function foo; # error; unknown function
至于这样做是否有任何好处,如果导入mylibrary是昂贵的.大多数时候,可能不是.