0

我正在尝试用 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 超出范围时它是否被清理?

4

1 回答 1

4

b返回 的值$newdata,它是对匿名哈希的引用,该哈希包含对 的引用%a,该引用在带有 key 的元素中保存一个标量boo

如果b未存储返回的值,则不会引用 的值$newdata,因此它将被释放,因此不会引用匿名哈希,因此它将被释放,因此不会引用带有 key 的元素中的标量boo,所以它会被释放。

没有循环。没有泄漏。

于 2013-08-28T01:54:27.493 回答