1

PerlモジュールをOOPで書いてみたのですが、配列にオブジェクトを追加できるのですが、Dumpメソッドを使うとこのように間違ったデータが出力されてしまいます。私のエラーはどこですか?

ありがとう

bless( {
                 '_name' => 'CUSIP',
                 '_validation_array' => [],
                 '_seq' => '1'
               }, 'Field' );

ソースコード:

 package Field;

    sub new {
    my $class = shift;
    my $self = {
        _name => shift,
        _seq => shift,
        _validation_array => [ @_ ],
    };

    bless($self, $class);
    return $self;
};

sub pushValidation(){
    my $validation = shift;   
    push(@{$self->{_validation_array}}, $validation);     
};

sub dump(){
    foreach my $validation (@{$self->{_validation_array} })   {
        #print Dumper($validation);#will work, 
        print $validation->{name}; #error, Use of uninitialized value
    }
}        
    1;

これは私がこのメソッドを呼び出す方法です:

my $validationObj = new Validation($validation->{name}, $validation->{seq});
$field->pushValidation($validationObj);
4

1 に答える 1

6

ここにはいくつかの問題がありますが、最も深刻な問題は次のとおりです。

sub pushValidation() {
    my $validation = shift;   
    push(@{$self->{_validation_array}}, $validation);     
};

この関数は引数を期待してい$selfますが、引数からシフトしていません。Perl ファイルの先頭に追加する必要があります。use strict;有効になっていれば、問題はすぐに明らかになります。

Global symbol "$self" requires explicit package name at <filename> line <line>.

関数についても同じことが言えdump()ます。(ちなみに、dump同じ名前の (あいまいな) Perl 組み込み関数があるため、 は悪いメソッド名です。しかし、それは大きな問題ではありません。)

于 2013-09-04T03:36:10.763 に答える