2010-11-28 29 views
2

我有一个使用Config :: Tiny读取全局配置文件的脚本。基于选择变量,我的脚本为SQLite,MySQL或PgSQL选择一个子例程。子程序结束时私人变量会发生什么变化?

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

回答

3

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

+2

词法变量表现为这种方式;包变量有不同的行为。 – 2010-11-28 02:22:02

+0

完美!我只是想确定脚本何时运行,它不会保留变量使用的空间。 – ianc1215 2010-11-28 02:32:15

5

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

相关问题