首页 > 解决方案 > 如何在 Perl 中编写 require 语句以从模块中获取 %EXPORT_TAGS?

问题描述

我需要将我的 Perl 代码中的“use”语句转换为“require”语句以从另一个模块导入一些 %EXPORT_TAGS。我“使用”的模块是一个普通的 .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”语句。我尝试了下面的建议但没有帮助:

require MyModule;
MyModule->import; 

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

任何帮助我编写正确且有效的“要求”语法将不胜感激。

提前致谢。

标签: perl

解决方案


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

所以这将转化为

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

它是标签、函数名还是变量名都没有关系。唯一的特殊情况是如果你有use Foo ()一个空的参数列表,在这种情况下根本不会有import调用。


推荐阅读