尝试用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);
答案 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内置函数具有相同的名称。但这不是一个大问题。)