如何用Perl编写require语句以从模块中获取%EXPORT_TAGS



我需要将Perl代码中的"use"语句转换为"require"语句,以便从另一个模块导入一些%EXPORT_TAGS。我所处的模块";使用";ing是一个普通的.pm文件(不是带构造函数的类(。

以下是MyModule.pm文件的片段

package MyModule;
use Exporter qw(import);
our %EXPORT_TAGS = ( 'tag1' => [qw (func1 func2)],
'tag2' => [qw (func3 func4)]
);
our @EXPORT_OK   = qw (func1 func2 func3 func4); 
sub func1 {
#some statement
}
# similary other functions written ...

";使用";我在脚本中尝试过的语句如下:

use MyModule qw(:tag1 :tag2); 

现在我需要将其转换为";要求";陈述我尝试了下面的建议,但没有帮助:

require MyModule;
MyModule->import; 

一个限制,即:这个MyModule.pm在其他脚本中由";使用";语句,因此我无法删除%EXPORT_TAGS和@EXPORT_OK;

任何帮助给我写正确和有效的";要求";将高度赞赏语法。

提前谢谢。

use语句基本上转换为具有import调用的BEGIN块,其中参数列表被传递到import中。

所以这将转化为

require MyModule;
MyModule->import(qw/ :tag1 :tag2 /); 

不管是标签、函数名还是变量名。唯一的特殊情况是,如果use Foo ()的参数列表为空,那么在这种情况下根本不会有import调用。

use语句:

use MyModule qw(:tag1 :tag2); 

这是require:吗

BEGIN {
require MyModule;
MyModule->import( qw(:tag1 :tag2) );
}

如果没有BEGIN,模块就不会加载,直到Perl在运行时遇到该语句,这对于想要使用您想要导入的东西的代码来说可能为时已晚。

如果你解释了为什么需要require,我们可能会解决这个问题。

最新更新