我该如何在Perl中实现惰性模块加载?

9

我如何在Perl中实现惰性模块加载?

我看到Python中有类似的东西,实现起来有点简单,但是在Perl中我认为这会有点困难。


2
你为什么认为在Perl中会更难? - brian d foy
我想这主要是凭直觉。没有什么实质性的东西。 - dlamotte
1个回答

22

按需加载模块

如果您需要在运行时加载整个模块,可以使用require。但是,如果要导入模块,则需要额外的代码。下面是一个示例:

## this function is almost the same 
## as "use My::Module qw( :something  )"
sub load_big_module_at_runtime {
    ## load module in runtime
    require My::Module;
    ## do import explicty if you need it
    My::Module->import( ':something' );
}

当使用其函数时加载模块

你也可以使用autouse来仅在需要时加载模块。例如:

## will load module when you call O_EXCL()
use autouse Fcntl => qw( O_EXCL() );

仅在需要使用时加载函数

还有一个SelfLoader模块,它允许您仅在需要时加载单个函数。请看AutoLoader模块,它几乎可以做到同样的事情。

我还建议阅读来自Perl Cookbook的相应的示例。


2
你的回答的第二部分非常有趣。我不知道那个模块的存在。谢谢! - dlamotte
2
也要看看 SelfLoader 模块。 - Ivan Nevostruev
有人使用 if 来实现这个吗? - innaM
1
如果需要决定是否加载模块,那么“if”语句非常有用。 - Ivan Nevostruev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接