NAME

CGI::PrintWrapper - CGI methods output to a print handle

SYNOPSIS

use CGI::PrintHandle;
use IO::Scalar; # just an example
use HTML::Stream; # continuing the example

my $content = '';
my $handle = IO::Scalar->new (\$content);
my $cgi = CGI::PrintHandle ($handle);
my $html = HTML::Stream->new ($handle);

# Not a very exciting example:
$cgi->start_form;
$html->STRONG->t ('I am a form.')->_STRONG;
$cgi->submit;
$cgi->end_form;

print "$content\n";
<FORM METHOD="POST"  ENCTYPE="application/x-www-form-urlencoded">
<STRONG>I am a form.</STRONG><INPUT TYPE="submit" NAME=".submit"></FORM>

DESCRIPTION

CGI::PrintWrapper arranges for CGI methods to output their results by printing onto an arbitrary handle. This gets around the problem that the CGI's subs return strings.

You could just call print yourself on the appropriate file handle, but there are many contexts in which it is cleaner to provide the extra abstraction (such as mixing CGI with HTML::Stream, the problem which prompted my solution, illustrated above).

CGI::PrintWrapper creates the necessary callbacks for printing dynamically, updating the symbol table as it encounters a new CGI method.

CONSTRUCTOR

new($h)

Creates a new CGI::PrintWrapper, printing the results of CGI methods onto the print handle object, $h.

METHODS

io()

Returns the underlying print handle object.

cgi()

Returns the underlying CGI object. This is handy for invoking methods on the object whose result you do not wish to print, such as param().

AUTOLOAD

Initially, CGI::PrintWrapper has no methods (except io). As the caller invokes CGI methods, AUTOLOAD creates anonymous subroutines to perform the actual CGI method call and print the results with the print handle object. It also updates the symbol table so that future calls can bypass AUTOLOAD.

SEE ALSO

CGI, IO::Scalar, HTML::Stream, "print" in perlfunc

CGI is the canonical package for working with fill-out forms on the web.

IO::Scalar is a handy package for treating a string as an object supporting IO handle semantics.

HTML::Stream is a nice package for writing HTML markup and content into an IO handle with stream semantics.

DIAGNOSTICS

The following are the diagnostics generated by Class::Class. Items marked "(W)" are non-fatal (invoke Carp::carp); those marked "(F)" are fatal (invoke Carp::croak).

No print handle

(F) The caller tried to create a new CGI::PrintWrapper without supplying an object which supports print.

'%s' is not a print handle

(F) The caller tried to create a new CGI::PrintWrapper using an object which does not support print.

BUGS AND CAVEATS

So far, none, but you never know. Caveat emptor.

AUTHORS

B. K. Oxley (binkley) at Home <binkley@bigfoot.com>. I am grateful to my employer, DataCraft, Inc., for time spent preparing this package for public consumption.

COPYRIGHT

$Id: PrintWrapper.pm,v 1.5 1999/11/19 13:29:31 binkley Exp $

Copyright 1999, B. K. Oxley (binkley).

This library is free software; you may redistribute it and/or modify it under the same terms as Perl itself.