标签: perl
我有一个使用Config :: Tiny读取全局配置文件的脚本。基于选择变量,我的脚本为SQLite,MySQL或PgSQL选择一个子例程。
现在,在脚本顶部读取配置文件,并在子例程之外设置变量。但考虑到MySQL变量与PgSQL或SQLite无关,我想在子例程中设置私有变量。唯一的事情我想知道,一旦子程序运行过程,变量会发生什么?它们会被删除吗?
答案 0 :(得分:5)
由于Perl 5没有“私有变量”这样的东西,我假设你的意思是用my函数声明的词法变量。在声明词法变量的范围的末尾,该内存块的引用计数递减。如果这意味着引用计数变为零,那么它将被垃圾收集。由于函数提供范围,因此只要您不将对这些变量的引用传递给保留它们的东西,或者在closure中使用它们,那么它们应该被垃圾收集。
my
答案 1 :(得分:3)
子程序返回后,子程序中声明的变量将不存在。他们的内存将被释放,任何引用的值都有资格进行垃圾收集(假设没有其他任何内容引用这些值)。