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

In reply to Re: Web page template for an HTTP daemon script by bronto
in thread Web page template for an HTTP daemon script by bronto

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.