2

目前我正在制作一个新模块,我想知道如何在我的模块 2 中实现。

我们经常看到use这样的:

use My::Module qw(something);

例如:

use CGI::Carp qw(fatalsToBrowser);
  1. 所以第一个问题是,我如何检索这个,我的意思是用户是否指定了任何内容以及他指定了什么?

  2. 第二个问题是,我如何直接在构造函数上传递和读取参数,如下所示:

    我的 $my_module = My::Module->new(arg1,arg2,arg3);

正如在评论中要求的简单模块测试代码:

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
4

2 回答 2

6

perldoc -f use解释了use关键字只是在编译时加载一个模块,然后调用->import它。调用者为use语句提供的参数将传递给导入方法调用。

至于你的第二个问题:构造函数只是方法。@_使用变量获取他们的参数就像对任何其他方法或函数一样。

于 2010-09-25T12:16:59.003 回答
4

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,它会为你节省很多时间。

于 2010-09-25T12:20:02.787 回答