Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблон mod_perl2 модуля, Шаблон модуля для mod_perl2 
:(
    Опции темы
ginnie
Дата 7.1.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Привожу шаблон модуля для mod_perl2, который я обычно использую в web-проектах. Модуль обрабатывает запросы вида http://www.mysite.ru/module/function.html

Код

package Module;

use strict;
use warnings;
no warnings qw(redefine);

use Apache2::Reload;
use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, q{ru_RU.cp1251});

use Apache::DBI; # работа с СУБД
use CGI qw{:cgi}; # получение параметров, выдача ответа
use HTML::Template; # шаблоны страниц
use Apache2::Const -compile => qw(OK);
use Apache2::Log;
use Data::Dumper; # анализ объектов
use Test::Timestamp; # оценка быстродействия по времени выполнения
use Exceptions; # собственные классы исключений на основе Exception::Class

use vars q{$VERSION};
$VERSION = q{1.00};

sub handler {
    my $timer = Test::Timestamp->new( uncorrected => 1, );
    my $r = shift;
    my %functions = (
        index   => *_default{CODE},
    );
    my %template_params = (
        cache               => 1, # включаем кэш в памяти
        cache_debug         => 0, # выключаем отладочный журнал
        die_on_bad_params   => 0, # разрешаем работу с неопределенными в шаблоне параметрами
        path                => $ENV{MODULE_TEMPLATES}, # путь к файлам шаблонов (из конфига Apache)
    );
    my $cgi = new CGI;
    $timer->stamp( q{CGI} );
    my $function_name = $cgi->url( -path_info => 1 ) =~ m{([a-z]+)\.html$}o ? $1 : q{index};
    my $script_name = $ENV{SCRIPT_NAME};
    eval {
        unless (exists $functions{$function_name}) {
            Exception::Functions::Undefined->throw( error => sprintf( q{undefined function name: %s}, $function_name ) );
        }
        $functions{$function_name}->(
            cgi                 => $cgi,
            template_params     => \%template_params,
            timer               => $timer,
        );
    };
    my $exception;
    if ( $exception = Exception::Class->caught() ) {
        _error_page(
            cgi                 => $cgi,
            template_params     => \%template_params,
        );
        if ( ref $exception ) {
            $r->log_error( sprintf( q{[exception] %s (%s:%s)}, $exception->error(), $exception->package(), $exception->line() ) );
        }
        else {
            $r->log_error( sprintf( q{[exception] %s}, $exception ) );
        }
    }
    return Apache2::Const::OK;
}
sub _error_page() {
    ...
}
sub _default() {
    ...
}

1;



Класс Exceptions
Код

package Exceptions;

use Exception::Class (
    q{Exception::Functions::Undefined}  => { description => q{used undefined function}, },
    q{Exception::Unknown}  => { description => q{some general error in the code}, },
);

1;


Это сообщение отредактировал(а) ginnie - 8.1.2008, 12:00


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
nitr
Дата 8.1.2008, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Т.е. можно сказать, что для любого нового "приложения" mod_perl2 можно использовать данный шаблон?


--------------------
PM   Вверх
ginnie
Дата 8.1.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый nitr, приведенный шаблон можно взять за основу, когда ничего другого в голову не приходит  smile
Это шаблон модуля, который используется как PerlResponseHandler.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1095 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.