package MyCGIApp; use base 'CGI::Application'; use CGI::Application::Plugin::AutoRunmode; sub setup { ... load database ... ... load session ... ... other setup stuff... } sub runmode1 : Runmode { my $html_output = ''; $html_output .= $q->start_html(-title=>'petnuch.com', -style=>{-src=>'/css/layout.css'}); $html_output .= $self->banner; $html_output .= $self->menu; require 'MyCGIApp::Runmode1'; # do_runmode1 is defined in MyCGIApp::Runmode1 $html_output .= $self->do_runmode1; $html_ouput .= $self->footer; return $html_output; } /* Common functions to every web page */ sub banner { ... } sub menu { ... } sub footer { ... } 1; #### package MyCGIApp::Runmode1; use strict; use Runmode1specficmodules; sub do_runmode1 { my $self = shift; my $session = $self->session; my $q = $self->query(); my $id = $q->param('n'); unless( somecondition ) return $self->error; ...do stuff... return $html_output; } sub error { ...runmode1 error stuff... } 1;