2

現在、私は新しいモジュールを作成しており、モジュール 2 にどのように実装できるか疑問に思っていました。

use次のようなことがよくあります。

use My::Module qw(something);

例えば:

use CGI::Carp qw(fatalsToBrowser);
  1. したがって、最初の質問は、これを取得するにはどうすればよいかということです。つまり、ユーザーが何かを指定し、何を指定したかということです。

  2. 2 番目の質問は、次のようにコンストラクターで直接引数を渡して読み取る方法です。

    私の $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
4

2 に答える 2

6

perldoc -f useuseキーワードは、コンパイル時にモジュールをロードし、それを呼び出すだけであると説明して->importいます。呼び出し元がステートメントに与えた引数はuse、インポート メソッド呼び出しに渡されます。

2 番目の質問については、コンストラクターは単なるメソッドです。それらの引数の取得は、@_変数を使用して、他のメソッドまたは関数の場合と同様に機能します。

于 2010-09-25T12:16:59.003 に答える
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を試すことができます。

于 2010-09-25T12:20:02.787 に答える