由于我在本周早些时候粗略阅读了PerlCookbook,第2版,我一直在研究useautouse
pragma,看看它是否真的能解决我的问题想根据当前情况使用不同模块的问题。不幸的是,我在perldoc
中找不到任何关于它的文档。
我记得看到过一些关于将这些东西包装到BEGIN
块中的东西,但这需要立即了解某些信息,并且我可能需要代码在到达那里之前完成一些步骤。
幸运的是,这个节点今天刚刚出现在PerlMonks上,我看到了其他实现方式:
if
模块让您可以做类似useif$typeeq'x',"Some::Module";
但是,$type
必须在编译时已知(即,它基于systeminfo或@ARGV
);这在基于Web的应用程序中可能行不通。- 改用
require
和import
:if$typewq'ex'){需要一些::模块;Some::Module->importifSome::Module->can("import");
如果您的模块不导出任何内容,您甚至可以省略对import
的调用。 - 使用
eval
:if($typeeq'x'){eval"useSome::Module";
这绕过了import
问题,但可能会遇到其他编译时问题。
所以,基本上,我已经有了完成这项工作的工具;只是需要更多地检查问题。