Ваш код пока выглядит законным. Поэтому ошибка МОЖЕТ быть в данных, переданных в set()
.
Пожалуйста, добавьте следующее, чтобы установить код:
sub set {
my ($self, @items) = @_;
@{ $self->{InnerObjects} } = @items;
print "OBJECT To work on: " . ref($self) . "\n";
print "TOTAL objects passed: " . scalar(@items) . "\n";
foreach my $obj (@items) { print "REF: " . ref($obj) . "\n" };
}
Это покажет, сколько объектов вы передали и действительно ли они являются объектами правильного класса (ref
должен напечатать имя класса)
Кроме того, имейте в виду, что @{ $self->{InnerObjects} } = @items;
копирует массив массива ссылок на объекты вместо сохранения ссылки на исходный массив @items
- это вообще НЕ причина вашей проблемы, но заставляет вас в основном выделить 2 массива вместо одного. Не является большой проблемой в управлении памятью, если массив не очень большой, но все еще расточительный (массив @items
необходимо будет собрать после сборки set()
).
Я прошу прощения за то, что поместил то, что по сути было комментарием, в качестве ответа, но оно слишком велико, чтобы быть комментарием.