0xD*_*EEF 2 perl load module dynamic package
在Stackoverflow上研究了Perl 需要的文档和其他类似的链接后,我仍然没有更聪明,必须错过一个相当简单的技巧.我在运行时加载一个模块并在其中调用子程序.问题是我不一定知道导出的子例程的名称,但必须有一个并且它被导出.
模块都看起来像这样,即.他们粗略地遵循从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
}
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样访问子,假设我知道它的名字:
use Module::Load;
my $package = "modules::Test";
my $subr = "TestSubSomeUnknownName";
load $package;
# Call the subroutine
my $hashref = $package->$subr;
Run Code Online (Sandbox Code Playgroud)
但是,如果有人在包裹中拼错了名字或我不知道呢?解决方案似乎是使用其中一个EXPORT来查看其中的内容,但是如何才能完成?
@EXPORT应该包含名称而不是符号.1在模块结束时返回.如果要检查包可以执行的操作,请使用can.
die 'Auto-import sub was not named "TestSubSomeUnknownName"'
unless $package->can( 'TestSubSomeUnknownName' )
;
$package->TestSubSomeUnknownName();
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2479 次 |
| 最近记录: |