Код, который вы опубликовали, вызывает время выполнения "Не ссылка на массив ..." Ошибка.Причина в том, что _owned_files
устанавливается на \[]
, что не является ссылкой на массив, а скорее ссылкой на ссылку на массив.Удалите \
из обоих атрибутов массива.
После этого мы можем перейти к следующей проблеме.@array
является копией анонимного массива, содержащегося в объекте.Первые два push
относятся к копии, а последние - к массиву.Затем вы блокируете удерживаемый массив, заменяя его ссылкой на копию.Лучше всего просто работать с исходным массивом по ссылке.Будет работать любой из следующих вариантов:
push @$ref, 'something';
push @{$self->{_owned_files}}, 'something';
И в конце выведите
$self->{_owned_files} = \@array;
.
sub new {
my $class = shift;
my $name = shift;
my $self = {
_name => $name,
_owned_files => [],
_shared_files => [],
};
return bless $self, $class;
}
sub addOwnedFile {
my ($self, $file) = @_;
push @{$self->{_shared_files}}, $file;
}