Joshua Chamas, you're my hero. The key, of course, was the Script_OnStart event. Declaring %var there made $var{'TITLE'}, $var{'HEADER'}, $var{'BODY'}, etc. available to the page, its template, and its includes. You're a life-saver!
For those curious, we ended up with the following: global.asa contains: sub Script_OnStart { use vars qw(%var); %var = (); } sub Script_OnEnd { $var{'TITLE'} ||= $var{'HEADER'}; my $template_ref = $Response->TrapInclude($var{'TEMPLATE'}); $main::Response->Write($$template_ref); } sub my::header { shift; $var{'HEADER'} .= shift; } sub my::template { my $args = shift; $var{'TEMPLATE'} = $Server->MapPath($args->{'href'}); } sub my::body { my $args = shift; $var{'BODY'} = shift; } A typical page, foo.html, contains: <my:template href="/templates/simple.html" /> <my:header> Welcome back, <%= $Session->{'username'} %>! </my:header> <my:body> <!--#include file="foo.inc" --> </my:body> And simple.html contains all the pretty formatting like so: <html> <head><title><%= $var{'TITLE'} %></title></head> <body> <h1><%= $var{'HEADER'} %></h1> <%= $var{'BODY'} %> </body> </html> The really great thing is that code can be added anywhere: to foo.html, simple.html, to their includes, in the subs-- it's ridiculously flexible. Plus, it's pretty similar to our existing module, which means I won't have a tough time retraining my staff. > I have long wanted to build support for easier variables substitution > where one could do this: > > PerlSetVar QuickVars 1 > > sub Script_OnStart { > $Vars->{DATA} = 1; > } > > Then in the ASP script, PHP quick variables would be supported like: > > <% for(1..10) { %> > $DATA > <% } %> > > $DATA would be pulled from $Vars->{DATA} automatically at runtime. > I think this would be a worthwhile extension to Apache::ASP since > <%= $Vars->{DATA} %> type templates can be unwieldy for HTML developers. That's pretty much exactly how we do it: s/\$(\w+)/(exists $var{$1}) ? $var{$1} : "\$$1" /seg; We also have some special hashes, like %input and %db, which simplify development: s/\$input{'(\w+)'}/(exists $input{$1}) ? $input{$1} : "\$$1" /seg; Seems like we could just pop that into Script_OnEnd. Anyway, thanks again, Joshua. This stuff is great. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]