Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     27 Feb 2002  01:22:27
 To : Nelly Sadretdinova
 Subject : Re: mod_perl&nesting subroutines
 -------------------------------------------------------------------------------- 
 
 
 "Nelly Sadretdinova" <nelly@ufanet.ru> wrote in message
 news:a5gi4o$ca7$1@www.ufanet.ru...
 
 > Решила попробовать mod_perl как альтернативу FastCGI.
 > Столкнулась тут же с проблемой именуемой в руководстве nested subroutines.
 >
 > т.е. например (упрощенно), имеем кусок кода
 >
 > use strict;
 > my %V;
 >
 > $V{a} = 1;
 > test();
 > ...
 >
 > sub test
 > {
 >     ....
 >     my $c = "test1";
 >     $V{b} .= $c;
 >     ...
 > }
 >
 > получаем результат
 > Variable "%V" will not stay shared at ...и $V{b} не обнуляется.
 > В руководстве во избежании этого предлагается вынести вызов test в
 
 отдельную
 
 > подпрограмму и все это вместе вынести в отдельный файл.
 > Хотелось бы узнать, есть ли другие решения этой проблемы....
 
 Масса. Hапример принудительное обнуление + использование use vars qw(%V)
 вместо my, передача ссылки на %V в test в качестве параметра, редизайн
 скрипта в OOP...
 
 Тут вот в чем дело, функция test на самом деле определена внутри большой,
 спрятанной от Вас функции которая содержит весь Ваш скрипт. При
 компиляции функции происходит подстановка адреса переменной %V
 в скомпилированый код. Дело в том, что переменные определяемые
 через my (lexical scope) не хранятся в таблицах имен в момент исполнения.
 При повторном вызове Вашего скрипта (т.е. скрытой функции), в нем
 происходит создание новой копии переменной %V, вполне себе обнуленой,
 но функция test продолжает помнить и использовать адрес старой. В итоге,
 в памяти существует две копии %V - самая первая, запомненная в test и более
 никому не доступная (если нет еще таких же функций), и самая последняя.
 
 Андрей
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 mod_perl&nesting subroutines   Nelly Sadretdinova   26 Feb 2002 21:55:17 
 Re: mod_perl&nesting subroutines   Andrey Sapozhnikov   27 Feb 2002 01:22:27 
 Re: mod_perl&nesting subroutines   Sadretdinova Nelly   27 Feb 2002 15:00:38 
 Re: mod_perl&nesting subroutines   Nelly Sadretdinova   27 Feb 2002 19:59:40 
 Re: mod_perl&nesting subroutines   Artem Chuprina   27 Feb 2002 21:28:05 
 Re: mod_perl&nesting subroutines   Artem Chuprina   27 Feb 2002 14:21:33 
Архивное /ru.cgi.perl/6577c81e93e4.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional