If you would have used an OO framework like CGI::Application for the structure of your app, you would have been able to do this very easily, without needing to subclass HTML::Template.
package My::App;
use base qw(CGI::Application);
sub load_tmpl {
my $self = shift;
my $template = $self->SUPER::load_tmpl(@_);
# add some global params here
$template->param( ... );
return $template;
}
sub runmode {
my $self = shift;
my $template = $self->load_tmpl('filename.tmpl');
$template->param( ... );
return $template->output;
}
OO doesn't work for everything, but if you find yourself passing the same bits of data to all of your functions, then you probably should at least investigate using an object instead.