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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Paul Kulchenko                       2:5020/400     25 Apr 2000  00:55:54
 To : All
 Subject : Re: mod_perl
 -------------------------------------------------------------------------------- 
 
 Hi, Dmitriy!
 Dmitriy Goldobin wrote in message <8dt9hs$7if$1@www.office.ems.chel.su>...
 
 >>  >> а mod_perl_traps.html (или как там его?) прочитать? там очень кратко
 >>  g> интуиция
 >>  >> направляется в нужное русло...
 >>  g> я читал.
 >> не похоже.
 >В mod_perl_traps _нет_ ответа на мой вопрос. Где именно лежит ответ
 
 Это правда. Hа ЭТОТ вопрос там ответа нет. Кстати, как и в документации по
 Перлу. В прямом виде, естественно.
 
 >не скажу "из принципа" :)
 
 Ладно, ладно, обижаться-то.
 
 >>  g>  ты не ответил, что в этом куске неправильно. BEGIN там нет..
 >> не отвечу. из принципа.
 >"...а скудность мыслей прикрывал он скупостью фраз..."  Задавая вопрос,
 >ответ я уже знал и специально вопрос сформулировал должным образом.
 >В результате двое гуру (я ведь правильно понял, отвечающие на все вопросы
 >perldoc/man/rtfm - это здесь гуру такие местного масштаба?) уже сели
 >в лужу при попытке ответить, ты оказался хитрее. :)) В моем примере нет
 всякий случай отмечу что это не мне письмо (:)). И надеюсь, в список гуру
 в данном контексте я не попал. Или вообще не попал :))
 
 >ошибки, он под mod_perl будет работать как часы, но ошибка потенциальная
 >(или идеологическая, не знаю как правильно) там есть.
 
 Это тоже верно. В данном коде ошибки нет. Hа всякий случай я его приведу:
 #!perl
  my %params;
 
  {
    ...
    $params{A} = 'B';
    ...
    sss();
    ...
  }
  ...
  sub sss { print $params{A} };
 
 Поскольку вопрос показался мне интересным, приведу слегка модифицированный
 код, а потом свои объяснения. Прежде всего, вышеприведенный код ВЫГЛЯДИТ
 совершенно безобидно, даже после второго рассмотрения (хотя я так и не
 пишу). Рассмотрим такой код:
 
 #!perl
 
 sub a {
  my %params;
 
  $params{A} = 'B';
  sss();
  $params{A} = 'C';
 
  sub sss { print $params{A} };
 }
 a;
 a;
 
 Вывод данного скрипта весьма примечателен (по всем признакам должен быть
 'BB'):
 BC
 
 Почему? При первом выполнении процедуры 'а' функция 'sss' ссылается на ТУ ЖЕ
 самую переменную, что и процедура 'a'. При модификации это переменной,
 соответственно изменяется значение возвращаемое 'sss'. Однако после выхода
 из процедуры 'a' локальная копия уничтожается, но ссылка на нее остается в
 'sss', посему интерпретатор оставляет ее пожить еще чуть-чуть. Вызовы 'sss'
 будут возвращать именно ее значение. При повторном входе в 'a' будет создана
 опять переменная, но это уже ДРУГАЯ переменная, а не та, значение (ссылка
 на) которой хранится в 'sss'. Соотвественно, на вывод 'sss' изменение этой
 переменной HИКОИМ образом HЕ ВЛИЯЕТ. Т.е. при втором и последующих входах
 'a' и 'sss' работают с РАЗHЫМИ переменными. Сюрприз? Отсюда и потенциальные
 сложности, которые могут возникнуть в mod_perl. В обычном случае это
 работает, поскольку мало кто создает вложенные процедуры. Еще раз оговорюсь,
 что проблема не тривиальная и на первый взгляд не видна.
 
 >Я уже понял, что на все вопросы здесь отвечают точно такие же чайники
 >как и те кто их задают. А остальные если снисходят до ответа отличного
 >от perldoc, то отделываются глубокомысленными замечаниями с нулевой
 >смысловой нагрузкой. А это уже давно замечено - люди глубоко
 >разбирающиеся в предмете при ответах обычно подстраиваются под уровень
 >спрашивающего, те же кто просто нахватался вершков обычно наоборот
 >напускают такого тумана, что лучше бы и не спрашивал.
 
 Такое бывает везде, и обижаться на это нечего. Иногда действительно проще
 ответить perldoc, чем объяснять. Иногда человеку КАЖЕТСЯ, что он понял
 проблему и он дает ответ в соответствии со своим пониманием. В ДАHHОМ случае
 проблема действительно имеет отношение к mod_perl и общие рекомендации типа
 'не используйте my переменные в области видимости файла' могут помочь, хотя
 и не объясняют почему.
 Best wishes, Paul.
 --- ifmail v.2.15dev5
  * Origin: Rostelecom/Internet Centre (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Re: mod_perl   Paul Kulchenko   25 Apr 2000 00:55:54 
 mod_perl   Albert N. MICHEEV   25 Apr 2000 08:31:02 
 Re: mod_perl   Dmitriy Goldobin   25 Apr 2000 09:04:13 
Архивное /ru.perl/655267c15087.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional