对象内的Perl数组属性

时间:2013-09-04 03:16:33

标签: perl

尝试用OOP编写一个perl模块,但它可以向数组中添加一个对象,当我使用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);

1 个答案:

答案 0 :(得分: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内置函数具有相同的名称。但这不是一个大问题。)