|
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 - это здесь гуру такие местного масштаба?) уже сели >в лужу при попытке ответить, ты оказался хитрее. :)) В моем примере нет Hа всякий случай отмечу что это не мне письмо (:)). И надеюсь, в список гуру в данном контексте я не попал. Или вообще не попал :)) >ошибки, он под 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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/655267c15087.html, оценка из 5, голосов 10
|