modperl-light_weight_cgi_generation_ala_cgi_pm

This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.



To: Larry Leszczynski <larryl@furph.com>
From: Stas Bekman <stas@stason.org>
Subject: Re: [OT] Lightweight CGI.pm - Why?
Date: Sun, 20 May 2001 17:43:46 +0800 (SGT)

On Sat, 19 May 2001, Larry Leszczynski wrote:

> Hi all -
>
> Just curious because it seems to come up a lot - for what applications
> have people run into a serious need for HTML generators ala CGI.pm?  (I'm
> not talking about templating systems, there's obvious need and practical
> use for those.)
>
> It seems like people like to use the HTML generating features of CGI.pm.
> I've generated a lot of HTML, and I haven't run into any situations where
> I would do something like this:
>
> >    print table(
> >        -align => "center",
> >        tr(
> >            td( "foo" ),
> >            td( "bar" ),
> >        ),
> >    ) ;
>
> instead of just doing this:
>
> print <<EOF;
>    <table align="center">
>    <tr>
>       <td>foo</td>
>       <td>bar</td>
>    </tr>
>    </table>
> EOF
>
> Seems like the same amount of typing, it's easier (for me anyway) to read
> and understand, and faster.  What am I missing?

In addition to the feature mentioned by Gunther in his reply to your
question (params' stickyness), it's about not clutterring your code with
HTML. Embedding HTML makes it harder to some degree to understand the Perl
code fast. Unless you are used to it :)

it's also about smart construction of HTML code using map() and similar
constructs:

  print table(-align => 'center',
              tr( map { td($_) } qw(foo bar) )
             );

or even more usual non-hardcoded use:

  print table(-align => 'center',
              tr( map { td($_),td($rows{$_} } keys %rows )
             );
now try to write the same code using HERE construct... you get the idea...

Anyway, I never use CGI::Q (function API), and always use OO interface,
which is faster in case of CGI.pm, since its API functions aren't true
functions and are resolved at run time. See the code and notes in the
guide if you need a proof.

Of course a better way to handle this is to use templates. TT is very
good, but we all wait for Perrin's talk at OSC which will summarize the
long thread we had here some 6 months ago and add his own experience.

===


the rest of The Pile (a partial mailing list archive)

doom@kzsu.stanford.edu