in reply to Web page template for an HTTP daemon script

In the end, I did the most obviuous thing: wrote an html file with tags in it, and substituted values with s///. Thanks a lot, larsen. How is it that I didn't think it myself?

The template:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- page template for sshttpd.pl --> <!-- $Id: form.html,v 1.1 2003/08/13 15:53:42 bronto Exp $ --> <html> <head> <title>_SERVICE_NAME_ controls</title> </head> <body> <h1 align="center">_SERVICE_NAME_ controls</h1> <div align="center"> <table style="border-width: 2px ; border-style: solid"> <tr align="center"> <td> <form action="/start" method="post"> <input type="submit" value=" Start " > </form> </td> <td> <form action="/stop" method="post"> <input type="submit" value=" Stop " > </form> </td> <td> <form action="/restart" method="post"> <input type="submit" value=" Restart " > </form> </td> </tr> <tr align="center"> <td colspan="3"> <form action="/status" method="post"> <input type="submit" value=" Update status " > </form> </td> <tr> <tr> <td colspan="3" align="center">_MESSAGE_</td> <tr> <tr> <td colspan="3">Status: _SERVICE_NAME_ is _STATUS_</td> <tr> </table> </div> </body> </html>

The subroutine:

sub show_form { my $c = shift ; my $status = status() ; my $message = get_message() ; my $page ; my %subst = ( _SERVICE_NAME_ => $service_name, _MESSAGE_ => $message, _STATUS_ => $status ) ; my $th = IO::File->new ; die "FATAL: Cannot open template file $template: $!" unless $th->open($template,'r') ; foreach my $line ($th->getlines) { $line =~ s/(_[A-Z_]+_)/$subst{$1}/g ; $page .= $line ; } $th->close ; reset_message ; my $resp = HTTP::Response->new ; $resp->content($page) ; $c->send_response($resp) ; }

The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
--John M. Dlugosz

Replies are listed 'Best First'.
2Re: Web page template for an HTTP daemon script
by jeffa (Bishop) on Aug 14, 2003 at 02:47 UTC
    Before you run off and start using your templating system on all of your HTTP daemons, ask yourself these questions:
    • How will be able to have conditional branches?
    • How will be able to loop?
    • How will i be able to restrict scope?
    • How will i be able to include other files?
    • How will i know when to escape certain variables?
    Sure, you don't need them now ... but you will ;)

    Do me a favor. Read my reply OOPS! my reply (hopefully) again and compare the code i submitted to your hand rolled solution above. The template itself is mostly the same, you may like your 'tags' better, but HTML::Template's have the features i listed above. The code also looks mostly the same - these are reasons to use HTML::Template ... or Text::Template. I get the feeling that you did not play around with these modules and get a real feel for them. There is nothing wrong with reinventing wheels for your own education, but there is everything wrong with reinventing wheels because you are too hasty to 'see results now'. Invest time in research, it pays big. ;)

    jeffa

    L-LL-L--L-LL-L--L-LL-L--
    -R--R-RR-R--R-RR-R--R-RR
    B--B--B--B--B--B--B--B--
    H---H---H---H---H---H---
    (the triplet paradiddle with high-hat)
    

      Hello jeffa

      First, thanks a lot for replying with constructive arguments: I apreciate it a lot

      About your comments:

      • How will be able to have conditional branches?
      • How will be able to loop?
      • How will i be able to restrict scope?
      • How will i be able to include other files?
      • How will i know when to escape certain variables?

      The answer to all questions is no

      Read my reply (hopefully)

      jeffa, I read your answer, as I did with all the other ones (the right, one, not the one you linked, anyway: you missed the final digit in the ID :-). Your solution is good, and mine isn't surely better, nor it is flexible. The reason why I chose an handmade solution is the footprint that my script has in memory: it's about 5300 kbytes at startup. Simply adding a use HTML::Template, without instanciating any object, makes it go to about 6000 kbytes...

      I get the feeling that you did not play around with these modules and get a real feel for them.

      Your feeling is right. I am an AxKit guy. :-) I found that it is such a great tool that I definitely abandoned any other template approach for web site management. Until yesterday.

      There is nothing wrong with reinventing wheels for your own education, but there is everything wrong with reinventing wheels because you are too hasty to 'see results now'. Invest time in research, it pays big. ;)

      Well, actually I don't like reinventing the wheels, mainly because I assume that there is someone that did the job better than me, unless the contrary is proven; in this sense, perlmonks often confirmed that my assumptions were right.

      Thanks again for your help
      --bronto


      The very nature of Perl to be like natural language--inconsistant and full of dwim and special cases--makes it impossible to know it all without simply memorizing the documentation (which is not complete or totally correct anyway).
      --John M. Dlugosz