Я работаю над созданием класса Graph в Perl и надеюсь, что каждый Graph будет содержать узлы. Каждый узел имеет некоторые свойства, а также (на данный момент) массив, который содержит ссылки на каждый узел, к которому он подключен. Пока у меня есть это определение узла:
использовать строгое;
Пакет Node;
sub new{
my $class = shift;
my @array = ();
my $array_r = \@array;
my $self = {
code => undef,
name => undef,
country => undef,
continent => undef,
timezone => undef,
coordinates => undef
population => undef,
region => undef,
arrayRef => $array_r,
@_,
};
благослови себя, класс;
вернуть $ self;
}
И все же после вызова следующей функции из моего основного скрипта:
sub getSetArray{
my $self = shift;
my $param = shift;
my $temp = $self->{arrayRef};
push(@{$temp}, $param) if defined $param;
return $self->{arrayRef};
}
и попытка перебрать массив узла (который будет содержать больше узлов, к которым он подключен):
my $firstnode = Node->new(); # Node constructor should have @array of
my $secondnode = Node->new();
$firstnode->getSetCode("test");
print "The current code is ", $firstnode->getSetCode(), "\n";
my $array_r = $firstnode->getSetArray($secondnode);
$array_r = $firstnode->getSetArray($firstnode);
foreach my $obj (@{$array_r}){
print $obj;
}
Это распечатывает Node = HASH (0x10092bb00) Node = HASH (0x100907bd8). Что приводит меня к мысли, что я имею дело с массивом, содержащим 2 узла (это то, что я хочу). Но при попытке вызвать любые методы этого $ obj мне говорят, что я
Невозможно вызвать метод "getSetNode" без ссылки на пакет или объект.
Я уже ранее благословил эти два объекта при вызове new на этих узлах. Поэтому я не уверен, почему они не распознаются как узлы, и я не могу назвать их методы ....
РЕДАКТИРОВАТЬ -
foreach my $obj (@{$array_r}){
print $obj->getSetCode();
}
, где getSetCode () равен
sub getSetCode{
my $self = shift;
my $param = shift;
$self->{code} = $param if defined $param;
return $self->{code};
}