在EXPORT和EXPORT_OK中使用预定义的EXPORT_TAGS

时间:2014-01-20 04:38:14

标签: perl perl-module

我在我的模块中创建了几个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"需要显式包名称

我缺少/忽视什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

%EXPORT_TAGS中的内容是arrayrefs;您需要取消引用它们以将它们展平为@EXPORT@EXPORT_OK。你想写:

our @EXPORT = @{ $EXPORT_TAGS { 'set2' } };
our @EXPORT_OK = (
    @{ $EXPORT_TAGS { 'set1' } },
    @{ $EXPORT_TAGS { 'set3' } },
);