package <tmpl_var package_name>;
use strict;
use warnings;
use base qw/<tmpl_var base_module>/;
<tmpl_loop use_modules>use <tmpl_var module_name>;
</tmpl_loop>
##############################
##### OVERRIDE METHODS #####
##############################
sub setup {
my $self = shift;
$self->start_mode('<tmpl_var start_mode>');
$self->run_modes([qw/<tmpl_loop run_modes>
<tmpl_var mode_name></tmpl_loop>
/]);
<tmpl_if tmpl_path> $self->tmpl_path('<tmpl_var tmpl_path>');</tmpl_if>
<tmpl_if new_dbh_method> $self->param('DBH' => <tmpl_var new_dbh_method>);</tmpl_if>
}
sub teardown {
my $self = shift;<tmpl_if new_dbh_method>
my $dbh = $self->param('DBH');
$dbh->disconnect();</tmpl_if>
}
##############################
##### RUN-MODE METHODS #####
##############################
<tmpl_loop run_modes>
sub <tmpl_var mode_name> {
my $self = shift;
my $q = $self->query();<tmpl_if new_dbh_method>
my $dbh = $self->param('DBH');</tmpl_if>
return $self->dump_html();
}
</tmpl_loop>
#############################
##### PRIVATE METHODS #####
#############################
1;
=pod
=head1 NAME
<tmpl_var package_name> -
Abstract of web application....
=head1 SYNOPSIS
use <tmpl_var package_name>;
my $app = <tmpl_var package_name>->new();
$app->run();
=head1 DESCRIPTION
Overview of functionality and purpose of
web application module <tmpl_var package_name>...
=head1 RUN MODES
=over 4
<tmpl_loop run_modes>
=item <tmpl_var mode_name>
Description of run-mode <tmpl_var mode_name>...
* Purpose
* Expected parameters
* Function on success
* Function on failure
</tmpl_loop>
=back
=head1 AUTHOR
Author of Module <author@module>
=head1 SEE ALSO
<tmpl_loop use_modules>L<<tmpl_var module_name>>, </tmpl_loop>L<<tmpl_var base_module>>
=cut