我在我的模块中创建了几个EXPORT_TAGS,如下所示,
package My::Module;
use strict;
use warnings;
require Exporter;
our @ISA = qw ( Exporter );
our %EXPORT_TAGS = (
'set1' => [
qw(
&func1
&func2
)
],
'set2' => [
qw(
$var1
$var2
)
],
'set3' => [
qw(
&sub3
&sub4
)
]
);
# remaining module code
我现在尝试通过简单地给出导出标记来声明EXPORT和EXPORT_OK数组中的可导出符号,而不是单独指定每个符号,
our @EXPORT = $EXPORT_TAGS { 'set2' };
our @EXPORT_OK = (
$EXPORT_TAGS { 'set1' },
$EXPORT_TAGS { 'set3' }
);
在我的目标脚本中,我正在调用我的模块,如下所示
use My::Module qw ( :set1 :set3 );
模块编译没有错误。但是,目标脚本没有,当我尝试使用属于该模块的变量/函数时,我收到以下错误,
Global symbol "$var1"
需要显式包名称
我缺少/忽视什么?谢谢你的帮助。
答案 0 :(得分:1)
%EXPORT_TAGS
中的内容是arrayrefs;您需要取消引用它们以将它们展平为@EXPORT
和@EXPORT_OK
。你想写:
our @EXPORT = @{ $EXPORT_TAGS { 'set2' } };
our @EXPORT_OK = (
@{ $EXPORT_TAGS { 'set1' } },
@{ $EXPORT_TAGS { 'set3' } },
);