|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/5284a3901e9d.html, оценка из 5, голосов 10
|