The render method uses the results from engine and template to process a selected template through Template Toolkit. #### render ($engine, $template) #### sub render { my $self = shift; my $tt = $self->engine; my $self_object = $self->reflect->object; # in case we have a classname $tt->process($self->template, { self => $self_object }, \my $output) or die $tt->error; # passes Template::Exception upward $self->display($output); } #### sub template { '[% self.CGI.header %]This page intentionally left blank.'; } #### Called when a page gains control, either at the beginning for a response, or in the middle when switched for rendering. Defaults to nothing. #### sub dispatch { my $self = shift; $self->param('rm') eq 'Webmail' and return 'Local::Page::Webmail' ; return 'Local::Page::Welcome'; } #### sub activate { my $self = shift; eval { $self->app_enter; my $this_page = $self->dispatch; $this_page->control_enter; $this_page->respond_enter; my $next_page = $this_page->respond; $this_page->respond_leave; if ($this_page ne $next_page) { $this_page->control_leave; $next_page->control_enter; } $next_page->render_enter; $next_page->render; $next_page->render_leave; $next_page->control_leave; $self->app_leave; }; $self->error($@) if $@; # failed something, go to safe mode } #### our $_mirror = __PACKAGE__->reflect; # for slots that aren't subs #### $_mirror->addSlot ([qw(CGI FIELD autoload)] => sub { # must be reset in mod_perl require CGI; CGI->new; }); #### $_mirror->addSlot ([qw(engine FIELD autoload)] => sub { my $self = shift; require Template; Template->new or die "Creating tt: $Template::ERROR\n"; }); #### app_enter app_leave control_enter control_leave render_enter render_leave respond_enter respond_leave #### #!/usr/bin/perl BEGIN { my $path='~/perl/lib:~/perl:~/perl/share/perl/5.8.4:~/perl/lib/perl/5.8.4'; for my $p (split ':', $path) { $p =~ s!~!/home/terry!; warn $p; unshift @INC, $p; } warn "@INC"; } use base qw(CGI::Prototype); my $o = __PACKAGE__->reflect; # The next line returns # Class::Prototyped::Mirror=REF(0x816811c) at nullapp.pl line 23. # Why does it not return CGI::Prorotype::Mirror=REF # or main::MIRROR=REF warn $o; # Why does this fail? warn $o->engine; warn $o->display('hi'); CGI::Prototype->activate;