Пытался написать модуль perl с OOP, но он может добавить объект в массив, когда я использую метод Dump, он выдаст неверные данные, подобные этому. Где моя ошибка?Атрибут массива Perl внутри объекта
Благодаря
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);
правильно, я поставил «использовать строгое», я вижу эта ошибка. как это исправить? – user595234
Вам нужно перевести '$ self' в качестве первого аргумента функции - например, добавить' my $ self = shift; 'перед аргументом' $ validation'. В качестве альтернативы распакуйте оба в одном: 'my ($ self, $ validation) = @_;'. – duskwuff
Я сделал это изменение, внутри дампа, используйте print $ validation -> {name}; по-прежнему возникают ошибки, «Использование неинициализированного значения в печати» – user595234