Perl циклическая ссылка. Это то, что происходит
Я пытаюсь написать демон с помощью Perl. Теперь этот демон имеет следующий код
sub b {
my $data;
if (some condition) {
$data->{"endsmeet"} = 1;
} else {
$data->{"endsmeet"} = 2;
}
my $newData = a($data);
}
sub a {
my ($data) = @_;
my %a = ();
my $newData = {
endsmeet => undef,
};
$a{"boo"} = $data->{"endsmeet"};
$newData->{"endsmeet"} = \%a;
return $newData;
}
У меня вопрос из вышесказанного, исчезает ли ссылка для%a и очищается ли она, когда b выходит из области видимости?
1 ответ
Решение
b
возвращает значение $newdata
, который является ссылкой на анон хэш, который содержит ссылку на %a
, который содержит скаляр в элементе с ключом boo
,
Если значение возвращается b
не сохраняется, ничто не будет ссылаться на значение $newdata
Таким образом, он будет освобожден, поэтому ничто не будет ссылаться на хэш anon, поэтому он будет освобожден, поэтому ничто не будет ссылаться на скаляр в элементе с ключом. boo
так оно и будет освобождено.
Нет циклов. Нет утечки