如何读取传递给构造函数的参数和通过`use Module`在Perl中传递的参数?

如何读取传递给构造函数的参数和通过`use Module`在Perl中传递的参数?

问题描述:

目前我正在制作一个新模块,我想知道如何在模块中实现两件事情。如何读取传递给构造函数的参数和通过`use Module`在Perl中传递的参数?

我们经常看到的use,如:

use My::Module qw(something); 

例如:

use CGI::Carp qw(fatalsToBrowser); 
  1. 所以,第一个问题是,我怎么 检索此,我的意思是羯羊的 用户指定了什么以及他指定了什么 ?

  2. 第二个问题是,我如何通过直接像 这种构造阅读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 
+2

您的问题的第二部分并不完全清楚。你可能可能会重述它,或者可能包括一些真实的代码,你尝试过的东西,并没有像你期望的那样工作,等等? – rafl 2010-09-25 12:17:45

+0

我没有尝试过任何东西,因为我不知道如何在构造函数中读取它。我所有的是一个简单的测试模块,我做了测试这些我将更新与代码。 – Prix 2010-09-25 12:20:41

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来获取它们的参数就像对其他任何方法或函数一样。