目前我正在制作一个新模块,我想知道如何在我的模块中实现2件事。
我们经常看到use
喜欢:
use My::Module qw(something);
例如:
use CGI::Carp qw(fatalsToBrowser);
所以第一个问题是,我该怎么做 检索这个,我的意思是 用户指定了什么以及什么 他指定了吗?
第二个问题是,我如何通过并阅读args 直接在构造函数上 这样:
my $ my_module = My :: Module-> new(arg1,arg2,arg3);
AS要求评论简单模块测试代码:
package My::Module;
# $Id$
use strict;
use Carp;
sub new {
my $class = shift;
my $self = {};
$self->{ARG1} = undef;
$self->{ARG2} = undef;
$self->{ARG3} = undef;
$self->{ARG4} = undef;
bless($self,$class);
return $self;
}
sub arg1 {
my $self = shift;
if (@_) { $self->{ARG1} = shift }
return $self->{ARG1};
}
sub arg2 {
my $self = shift;
if (@_) { $self->{ARG2} = shift }
return $self->{ARG2};
}
sub arg3 {
my $self = shift;
if (@_) { $self->{ARG3} = shift }
return $self->{ARG3};
}
sub arg4 {
my $self = shift;
if (@_) { $self->{ARG4} = shift }
return $self->{ARG4};
}
sub dump {
my $self = shift;
require Data::Dumper;
my $d = Data::Dumper->new([$self], [ref $self]);
$d->Deepcopy(1);
return $d->Dump();
}
1; # so the require or use succeeds
答案 0 :(得分:6)
perldoc -f use
解释说use
keyword只是在编译时加载一个模块,然后在其上调用->import
。调用者给use
语句的参数将传递给import方法调用。
至于你的第二个问题:构造函数只是方法。使用@_
variable获取他们的参数就像使用任何其他方法或函数一样。
答案 1 :(得分:4)
import
子例程获取use
中传递的参数。以下代码示例可以为您提供帮助。
文件:My / Module.pm
package My::Module;
use warnings;
use strict;
use Data::Dumper;
sub import {
my ( $package, @args ) = @_;
print Dumper \@args;
}
1;
文件:module.pl
#!/usr/bin/env perl
use warnings;
use strict;
use My::Module qw(something);
如果您正在编写面向对象的模块,可以尝试使用Moose,这将为您节省大量时间。