【发布时间】:2012-01-13 18:50:49
【问题描述】:
在研究了 Perl require docs 和 Stackoverflow 上的其他类似链接之后,我仍然没有更聪明,一定是错过了一个相当简单的技巧。我在运行时加载一个模块并在其中调用一个子例程。问题是我不一定知道导出的子程序的名字,但一定有,而且是导出的。
所有模块看起来都是这样的,即。他们大致遵循来自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
}
然后我可以像这样访问 sub,假设我知道它的名字:
use Module::Load;
my $package = "modules::Test";
my $subr = "TestSubSomeUnknownName";
load $package;
# Call the subroutine
my $hashref = $package->$subr;
但是如果有人在包裹中拼错了名字或者我不知道怎么办?解决方案似乎是使用其中一个 EXPORT 来查看其中的内容,但怎么做呢?
【问题讨论】:
-
该 Perlmonks 文档的官方当前版本位于 perldoc.perl.org/perlmod.html。
标签: perl dynamic module load package