如何在Perl中实现延迟模块加载?

dla*_*tte 8 perl lazy-loading

如何在Perl中实现延迟模块加载?

我在python中看到了类似的东西,实现有点简单,但在Perl中我认为这会有点难度.

Iva*_*uev 20

您需要时加载模块

如果需要在运行时加载整个模块,则使用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' );
}
Run Code Online (Sandbox Code Playgroud)

使用其功能时加载模块

您也可以仅在使用其功能时使用autouse加载模块.例如:

## will load module when you call O_EXCL()
use autouse Fcntl => qw( O_EXCL() );
Run Code Online (Sandbox Code Playgroud)

仅在使用时加载功能

还有SelfLoader模块,它允许您仅在需要时加载单个功能.看看AutoLoader几乎做同样事情的模块.

我还建议阅读Perl Cookbook的相应食谱.

  • 你的答案的第二部分非常有趣.我不知道该模块存在.谢谢! (2认同)
  • 看看`SelfLoader`模块. (2认同)