use strict; use DBI; use CGI; use HTML::Template::Pro; use Crypt::CBC; use Storable qw/freeze thaw/; use Data::Dumper; our($dbh, $q, $curruser); our(%rootlvl, %userlvl); eval{ main(); }; if($@){ warn $@; } sub dnice{ print "Content-type: text/html\n\n"; my($msg) = @_; print $msg; die @_; } sub main{ #$dbh ||= DBI->connect('...','','',{RaiseError => 1, AutoCommit => 0}); $q = new CGI; checkuser(); my $action; $action = $q->param('action') || $q->param('action','index'); dnice('No such action') if $action !~ /^(\w+)$/; $action = 'ext_' . $1; my($hdrs, $result, $noncacheable); dnice 'No access' if !accessallowed($action, $curruser); eval{ ($hdrs, $result, $noncacheable) = __PACKAGE__->$action; }; dnice($@) if $@; print $q->header( -type => 'text/html', -charset => 'cp1251', @$hdrs); !$result && return; !ref $result && print($result) && return; my $tmpl = HTML::Template::Pro->new( filename => $q->param('action') . '.tmpl', path => './tmpl', associate => $q, loop_context_vars => 1, global_vars => 1 ); $tmpl->param(@$result); print $tmpl->output(); } #просто выводим страницу sub ext_example{ return [], [ dummy=> 1 ]; } #делаем редирект sub ext_example_redirect{ return [ -location => 'http://www.lala.com' ]; } #вместо запрошенного action делаем другой - н., засабмитили некорректно заполненную форму, надо бы ее еще раз вывести sub ext_example_substitute{ $q->param('action', 'example'); return ext_example(); } #а вдруг нам надо вернуть картинку? sub ext_example_plain{ return [ -content_type => 'application/octet-stream' ], 'plain octet-stream'; } ####################################################### sub checkuser{ return 1; } sub accessallowed{ return 1; }