Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Ways to Seperate Code from Content

by cayenne (Scribe)
on Mar 17, 2002 at 18:51 UTC ( [id://152335] : perlquestion . print w/replies, xml ) Need Help??

cayenne has asked for the wisdom of the Perl Monks concerning the following question:

I have a CGI script in which I would like to seperate the code from the content, but whenever I've tried to think the best way to do this I only think of things that would make it more convoluted rather than less. But I'm appreciating the ways I have kept my code clean and would like to deal with this before the thing gets bigger.

The main reason that it seems difficult to do is that the pattern of when perl needs to do things isn't entirely regular. There's a part of the page where there are a number of different elements that may or may not be there, and there are a few places where I need to send it through a filter or two (not everything that gets output is created by my script; some of it is a mix of that and stuff that gets read in already as HTML.) Also, I want to be using methods rather than directly working with HTML.

I know that there are modules that do similar things but don't quite meet my requirements. How do other people organize such things?

Replies are listed 'Best First'.
Re: Ways to Seperate Code from Content
by tachyon (Chancellor) on Mar 17, 2002 at 19:12 UTC
Re: Ways to Seperate Code from Content
by simon.proctor (Vicar) on Mar 17, 2002 at 19:38 UTC
Re: Ways to Seperate Code from Content
by Ryszard (Priest) on Mar 17, 2002 at 23:15 UTC
    HTML::Template is a pretty easy method to template your application. You embed HTML'esque tags in your code <TMPL_VAL NAME=CONTENT>, assign content to them $tmpl->param(CONTENT=>$mycontent; then send the output to the browser print $tmpl->output;

    I dont completely abstract the html gen and the code completely as i find it easier (and quicker) to have a "sensible" mix of the two, which of course is subjective, but works well for me.

    If you're going the whole maintaince angle on your designs, check out CGI::Application which is a good method to build structured web sites that are easy to maintain and add new functionality.

Re: Ways to Seperate Code from Content
by Stegalex (Chaplain) on Mar 17, 2002 at 20:04 UTC
    The first thing to do is to become familiar with building modules. Put as much thought as you can into the design of your modules and try to keep all your business logic in them. The only perl code in your CGI should be form processing code. Let the modules do the heavy lifting. It's worked for me. Hope this isn't too high level or unhelpful. I like chicken.