我正在尝试用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超出范围时是否会清理它?
答案 0 :(得分:4)
b
返回$newdata
的值,它是对anon哈希的引用,它包含对%a
的引用,boo
在元素中保存带有键{{1}的标量}}
如果b
返回的值未存储,则没有任何内容会引用$newdata
的值,因此它将被释放,因此没有任何内容会引用anon哈希值,因此它将被释放,所以没有任何东西会引用带有键boo
的元素中的标量,因此它将被释放。
没有周期。没有泄漏。