如何读取传递给构造函数的参数和通过`use Module`在Perl中传递的参数?
问题描述:
目前我正在制作一个新模块,我想知道如何在模块中实现两件事情。如何读取传递给构造函数的参数和通过`use Module`在Perl中传递的参数?
我们经常看到的use
,如:
use My::Module qw(something);
例如:
use CGI::Carp qw(fatalsToBrowser);
所以,第一个问题是,我怎么 检索此,我的意思是羯羊的 用户指定了什么以及他指定了什么 ?
-
第二个问题是,我如何通过直接像 这种构造阅读ARGS :
我的$ my_module =我::模块 - >新(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
答
import
子程序获取在use
中传递的参数。以下代码示例应该会对您有所帮助。
文件:我的/ 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这将节省你很多时间。
+0
真棒,真的很感激。我会看看穆斯。 – Prix 2010-09-25 12:24:52
答
perldoc -f use
解释说,use
keyword仅仅是加载在编译时一个模块,然后调用它->import
。调用者给use
语句的参数将传递给导入方法调用。
至于你的第二个问题:构造函数只是方法。通过使用@_
variable来获取它们的参数就像对其他任何方法或函数一样。
您的问题的第二部分并不完全清楚。你可能可能会重述它,或者可能包括一些真实的代码,你尝试过的东西,并没有像你期望的那样工作,等等? – rafl 2010-09-25 12:17:45
我没有尝试过任何东西,因为我不知道如何在构造函数中读取它。我所有的是一个简单的测试模块,我做了测试这些我将更新与代码。 – Prix 2010-09-25 12:20:41