子例程结束时私有变量会发生什么?

时间:2010-11-28 02:10:10

标签: perl

我有一个使用Config :: Tiny读取全局配置文件的脚本。基于选择变量,我的脚本为SQLite,MySQL或PgSQL选择一个子例程。

现在,在脚本顶部读取配置文件,并在子例程之外设置变量。但考虑到MySQL变量与PgSQL或SQLite无关,我想在子例程中设置私有变量。唯一的事情我想知道,一旦子程序运行过程,变量会发生什么?它们会被删除吗?

2 个答案:

答案 0 :(得分:5)

由于Perl 5没有“私有变量”这样的东西,我假设你的意思是用my函数声明的词法变量。在声明词法变量的范围的末尾,该内存块的引用计数递减。如果这意味着引用计数变为零,那么它将被垃圾收集。由于函数提供范围,因此只要您不将对这些变量的引用传递给保留它们的东西,或者在closure中使用它们,那么它们应该被垃圾收集。

答案 1 :(得分:3)

子程序返回后,子程序中声明的变量将不存在。他们的内存将被释放,任何引用的值都有资格进行垃圾收集(假设没有其他任何内容引用这些值)。