Привожу шаблон модуля для 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;
|
|