perl什么时候从内存中释放它的词法变量?

nid*_*ima 6 perl

我从一个网站上读到了词汇变量,因为他们解释说,使用"my"关键字声明的变量是一个词法变量.它使用my关键字直到当前块结尾的地方.这是词法变量的范围.

我的疑问是,如果范围完成,词汇变量是否从记忆中解放出来?如果完成范围意味着词汇变量没有从内存中释放出来,那么它何时会从内存中释放出来?谁能清楚地向我解释一下?

yst*_*sth 6

Perl词法变量喜欢保留它们的内存,以便下次词法在范围内时可以重用它.通常,对于数字,引用,小字符串或散列或具有少量元素的数组,这并不重要.

对于包含大字符串或数组或具有大量元素的哈希的词法,您可以明确地使用它undef yourvarname来释放它们的内存.(虽然这只是释放了Perl进程用于其他事情的内存,但不会将其释放到其他进程.)


Geo*_*dis 0

当词法变量超出范围时将被“释放”。如果它指向一个具有循环引用的数据结构,那么即使没有其他人指向它,该结构也不会被“释放”。

  • 此时可能值得指出 `Scalar::Util` 和 [`weaken`](http://perldoc.perl.org/Scalar/Util.html#weaken)。 (3认同)