使用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
导出功能?
我可以使用吗?
答案 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();