设置Perl模块参数并同时使用Exporter

时间:2015-02-12 11:37:22

标签: perl perl-module

使用Perl模块时,有时需要进行一些配置。 在这种情况下,我正在我的模块中实现自定义import功能。 (为简洁起见,省略了语用)。

Api.pm

package Api;

# Default settings
my %PARAMS = (
     name => 'google',
     url => 'www.google.com'
);

sub import {
    my ( $pkg , %args )= @_;
    while ( my ($k,$v) = each %args ) {
        $PARAMS{$k} = $v;
}

sub some_method {
   # ...
}

sub another_method {
   # ...
}

这样做,我可以在脚本中使用它时轻松配置它。

script.pl

use Api ( name => 'stackoverflow', url => 'http://stackoverflow.com' );

但现在我还要导出模块函数some_method。通常使用Exporter模块执行此操作。但继承此模块会覆盖{em>我的 import的实现。

从客户的角度来看,我有一些想法

 use Api ( name => 'stackoverflow', 
           url => 'http://stackoverflow.com' ,
           import => [ 'some_method' ,'another_method' , ... ] );

但在这里我被困住了。

如何在模块Exporter中使用Api.pm导出功能?

我可以使用吗?

1 个答案:

答案 0 :(得分:2)

在示例中,我使用哈希引用作为use Api的第一个参数:

package Api;

use warnings;
use strict;

use Exporter;
our @EXPORT_OK = qw{ test };

my $params;

sub import {
    $params = splice @_, 1, 1;
    goto &Exporter::import
}

sub test {
    print $params->{test}, "\n";
}

1;

测试代码:

use Api { test => scalar localtime }, qw{ test };
test();