我需要将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
,我们可能会解决这个问题。