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так оно и будет освобождено.

Нет циклов. Нет утечки

Другие вопросы по тегам