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


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     15 Mar 2002  18:56:08
 To : Oleg Shumsky
 Subject : Re: mod_perl
 -------------------------------------------------------------------------------- 
 
 Oleg Shumsky wrote:
 
 > Log on. Andrey on-line.
 > 
 >  >> ну и все. Дальше кладу его в /cgi-bin/. И запускаю из браузера.  В
 >  >> конфиге апача все, соответственно, прописано. А вот что за такой
 >  >> mod_perl ?
 > 
 >  AS> Это интерпретатор Перл "внутри" Apache.
 > 
 > это я понял. Как его использовать? Т.е. отличается ли чем-нить его
 > использование принципиально от самого перла?
 
 Язык тот же самый - Перл, он и в африке Перл. Hасколько я понял вас
 интересуют mod_perl (или более точно - Apache::Registry) скрипты, а
 не вмешательство в процесс работы апача. Так вот для тех, кто использует
 модуль CGI.pm - отличия минимальны. Параметры берем так же, вывод формируем
 так же. Только помним, что наш скрипт - это не скрипт, а функция в нееотором
 уникальном неймспейсе. Посему, глобальные переменные могут уже содержать
 какие-то значения оставшиеся от старых обращений, не забываем закрывать файлы,
 и т.д. Да, и не вызываем функцию exit, мы ведь не хотим завершить весь
 апач, а только выйти из своей функции. Либо строим код так, чтобы управление
 всегда доходило до конца:
 
 sub main {
      my $query = shift
      ....
      return if $err;
      ...
      return if $var == 3;
      ...
 }
 
 my $query = CGI->new;
 main($query);
 
 либо, используем goto END; и метку END в конце скрипта (фу как некрасиво),
 либо читаем доку на предмет функции Apache::exit (это хитрая функция, лучше
 ее без особой нужды не трогать).
 Еще один фокус - не пытаемся использовать внешние local scope переменные
 в функциях:
 
 т.е. вот так неправильно:
 
 my $query;
 
 sub main {
      print $query->header;
 }
 
 $query = CGI->new;
 main();
 
 а делать надо так:
 
 my $query;
 
 sub main {
      my $query = shift;
      print $query->header;
 }
 
 $query = CGI->new;
 main($query);
 
 В противном случае возникнут "странные" ошибки, связанные с тем,
 что функция main "запомнит" первое значение $query и при последующих
 вызовах будет использовать именно его, а не новое.
 
 Еще одна особенность - нельзя использовать __DATA__ и __END__, запомните
 ваш код будет обернут в
 
 sub XXXXX {
     нечто1
 
     ваш код
 
     нечто2
 }
 
 Hу в основном все. Дальше можно писать. Остальное понимание придет в процессе.
 ( Hапример понимание того, что fork под mod_perl более тяжелая операция, что
 использование модулей дает большой выигрыш, особенно если модуль можно загрузить
 до того, как апач породит дочерние процессы, что соединения с базами данных
 можно держать открытыми от обращения к обращению, что аккуратно объявлять
 переменные просто необходимо, и т.д. )
 
 Андрей
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 mod_perl   Oleg Shumsky   14 Mar 2002 18:15:42 
 Re: mod_perl   Victor Wagner   14 Mar 2002 21:27:08 
 Re: mod_perl   Andrey Sapozhnikov   14 Mar 2002 21:31:12 
 Re: mod_perl   Oleg Shumsky   15 Mar 2002 16:55:54 
 Re: mod_perl   Andrey Sapozhnikov   15 Mar 2002 18:56:08 
 mod_perl   Andrew Alakozow   16 Mar 2002 12:09:12 
 Re: mod_perl   Andrey Sapozhnikov   17 Mar 2002 02:41:44 
Архивное /ru.cgi.perl/5284a3901e9d.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional