Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

autotie CGI::SSI to CGI::Application output

by ryan (Pilgrim)
on Feb 06, 2003 at 07:43 UTC ( #233073=perlquestion: print w/replies, xml ) Need Help??
ryan has asked for the wisdom of the Perl Monks concerning the following question:

I want to autotie CGI::SSI in some way to the output of my CGI::Application module.

For a normal CGI I would do the following and it would interpret any SSI tags in whatever the script outputs before it goes to the browser:

use CGI::SSI (autotie => STDOUT);
When I try this in a CGI::Application module it reports errors about file handles such as:
Failed to copy the filehandle (ATRACK::STDOUT): Invalid argument at /u +sr/share/perl5/CGI/ line 74.
I'll be the first to admit I don't know how CGI::Application handles STDOUT, or what filehandle it uses to do it's magic, do I need to autotie it to some other special file handle? I've had a look through the source for any clues, but it is beyond me. Can anyone suggest how I could achieve this or if I'm wasting my time trying?



Replies are listed 'Best First'.
Re: autotie CGI::SSI to CGI::Application output
by ryan (Pilgrim) on Feb 13, 2003 at 05:14 UTC
    OK, I'll have a go at my own question then :)

    The reason for this is the HTML templates were rather 'pretty' and had a heap of nested tables in them that was just too much code to duplicate. So I wanted a way to call a function from within the template that can accept a parameter and produce the code for the table with the parameter as the title of the table.

    In the end I found that HTML::Template::Expr can do this so I modified CGI::Application to use HTML::Template::Expr instead of HTML::Template and it all went well. It was just a simple substitution of the module name in two spots.

    I know this is not a good use of templating technology, both I and the HTML::Template author agree there - but this particular case called for it.

    The actual code in the CGI::Application module was a declaration of the template functions and their related subs:

    HTML::Template::Expr->register_function(box => \&box); sub box { #read in other templates to costruct table header #use parameters to decide if it is the start or the #end of the box and what title to use etc. }
    Then in the templates:
    <!-- TMPL_VAR expr="box('box-start','Table title')" --> table contents here <!-- TMPL_VAR expr="box('box-end')" -->
    Ugly, but it works and reduces the template code size to about half :)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://233073]
Approved by blokhead
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2017-09-26 02:29 GMT
Find Nodes?
    Voting Booth?
    During the recent solar eclipse, I:

    Results (291 votes). Check out past polls.