perl - 动态 Perl: 动态加载模块和访问导出的内容

  显示原文与译文双语对照的内容

studying Perl require需要文档和这样的链接我仍然没有智慧,必须丢失相当简单的技巧。 在运行时加载一个模块并调用它的子例程。 问题是我不一定知道导出子例程的名称,但必须有一个并且导出它。

这些模块看起来都像这样,IE 。 它们大致遵循从 perlmonks.org 获取的模板。


package modules::Test;



use strict;


use Exporter;


use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);



$VERSION = 1.00;


@ISA = qw(Exporter);


@EXPORT = (*TestSubSomeUnknownName);


@EXPORT_OK = qw(&TestSubSomeUnknownName);


%EXPORT_TAGS = ( ALL => [qw(&TestSubSomeUnknownName)]


 );



sub TestSubSomeUnknownName


{


 # return a hash reference


}



然后我就可以像这样访问子潜艇了,假设我知道它的名字:


use Module::Load;



my $package ="modules::Test";


my $subr ="TestSubSomeUnknownName";



load $package;


# Call the subroutine


my $hashref = $package->$subr;



但是如果有人在一个包裹里拼写了名字或者我不知道? 解决方案似乎是使用一个导出来看看里面有什么,但是如何做到的?

时间: 原作者:

  • @EXPORT 应包含非符号的名称 。
  • 在函数名之前不需要,它是不标准的。
  • 请记住在模块的末尾返回 1
  • 如果你想检查包的内容,可以做什么,使用 can

    
    die 'Auto-import sub was not named"TestSubSomeUnknownName"' 
    
    
     unless $package->can( 'TestSubSomeUnknownName' )
    
    
     ;
    
    
    $package->TestSubSomeUnknownName(); 
    
    
    
    
原作者:
...