perl - 如何在 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;
任何帮助我编写正确且有效的“要求”语法将不胜感激。
提前致谢。
解决方案
该use
语句基本上转换为BEGIN
带有import
调用的块,其中参数列表被传递到import
.
所以这将转化为
require MyModule;
MyModule->import(qw/ :tag1 :tag2 /);
它是标签、函数名还是变量名都没有关系。唯一的特殊情况是如果你有use Foo ()
一个空的参数列表,在这种情况下根本不会有import
调用。
推荐阅读
- mysql - 我需要一个具有最大值的字符串
- javascript - 空值合并运算符 (??) 与 ECMAScript 中的逻辑 OR 运算符 (||) 有何不同?
- javascript - 将数组中的唯一值添加到另一个 JS
- dom - 如何将 P5.js 图像放入 DOM?
- django - 将数据迁移到 django 中的多对多字段
- java - Azure Pipeline Maven 构建失败并出现 Spring 类型转换器错误
- javascript - 如何使用 javascript 从外部 xml 文件填充下拉列表
- base64 - 是的 dataURI 验证
- python - 在 Pandas Dataframe 中组合列的值和状态条件
- c++ - 为什么当 std::vector 重定位存储时,复制 ctor 优于 move-ctor?