Что происходит с частными переменными в конце подпрограммы? - PullRequest
2 голосов
/ 28 ноября 2010

У меня есть скрипт, который читает глобальный конфигурационный файл, используя Config :: Tiny. На основе переменной выбора мой скрипт выбирает подпрограмму для SQLite, MySQL или PgSQL.

Прямо сейчас файл конфигурации читается в верхней части скрипта, а переменные устанавливаются вне подпрограмм. Но учитывая, что переменные MySQL не имеют ничего общего с PgSQL или SQLite, я хотел установить частные переменные в подпрограммах. Единственное, что Мне интересно, что происходит с переменными, когда подпрограмма завершает свою работу?

Ответы [ 2 ]

5 голосов
/ 28 ноября 2010

Поскольку в Perl 5 нет такой вещи, как "частные переменные", я предполагаю, что вы имеете в виду лексические переменные, объявленные с помощью функции my.В конце области, в которой была объявлена ​​лексическая переменная, счетчик ссылок для этого фрагмента памяти уменьшается.Если это означает, что счетчик ссылок становится равным нулю, то он получает мусор.Так как функции предоставляют область действия, то, пока вы не передаете ссылки на эти переменные чему-то, что их удерживает, или не используете их в замыкании , тогда они должны собираться.

3 голосов
/ 28 ноября 2010

Переменные, объявленные в подпрограммах, не будут существовать после возврата подпрограммы.Их память будет освобождена, и любые ссылочные значения будут иметь право на сборку мусора (при условии, что ничего не ссылается на эти значения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...