|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Nelly Sadretdinova 2:5020/400 27 Feb 2002 19:59:40 To : Andrey Sapozhnikov Subject : Re: mod_perl&nesting subroutines -------------------------------------------------------------------------------- > Тут вот в чем дело, функция test на самом деле определена внутри большой, > спрятанной от Вас функции которая содержит весь Ваш скрипт. При > компиляции функции происходит подстановка адреса переменной %V > в скомпилированый код. Дело в том, что переменные определяемые > через my (lexical scope) не хранятся в таблицах имен в момент исполнения. > При повторном вызове Вашего скрипта (т.е. скрытой функции), в нем > происходит создание новой копии переменной %V, вполне себе обнуленой, > но функция test продолжает помнить и использовать адрес старой. В итоге, > в памяти существует две копии %V - самая первая, запомненная в test и более > никому не доступная (если нет еще таких же функций), и самая последняя. Т.е. получается, что такое "размножение" переменных приводит к потреблению большого количества памяти? Я не очень понимаю механизм работы mod_perl с переменными С FastCGI было понятно: все переменные, которые не должны меняться от одного вызова скрипта к другому, объявляются до FastCGI->accept цикла, там же им присваиваются значения, которые сидят себе неизменными в памяти. А если у меня при использовании mod_perl есть некие глобальные переменные, которые не должны меняться от запроса к запросу? (грубо говоря, некие константы) Если я объявляю переменную в vars, а затем присваиваю ей некое значение, будет ли оно хранится в таблице имен или при новом вызове скрипта это присвоение выполнится снова? --- ifmail v.2.15dev5 * Origin: OOO BIS (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/77954d62f3d9.html, оценка из 5, голосов 10
|