2010-11-28 30 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中使用它們,那麼它們應該被垃圾收集。

相關問題