package Renderer; # a class w/common functionality in all "application" classes sub new { my ($class, $cgi) = @_; return bless { CGI => $cgi }, $class; } sub cgi { return shift->{CGI} } sub render { my ($self, $content) = @_; my $templateText = q{
Welcome. My name is Perl. What's your name?
}); } package NiceToMeetYou; use base 'Renderer'; sub POST { my $self = shift; my $name = $self->cgi->param('name'); # yes, it would be scrubbed in production code $self->render(qq{Nice to meet you $name. Leaving already?
}); } package Goodbye; use base 'Renderer'; sub GET { my ($self, $name) = @_; $self->render("Goodbye, $name. It was nice visiting."); }