package Pod::Usage::CGI; use strict; use Exporter; use vars qw($VERSION @ISA @EXPORT); $VERSION = sprintf'%d.%03d', q$Revision: 1.10 $ =~ /: (\d+)\.(\d+)/; @ISA=qw(Exporter); @EXPORT=qw(pod2usage); sub pod2usage { my %options = @_; my $message = '
\n" || $options{raw_message}; my $css = delete $options{css}; $css = [$css] if($css && ref $css ne 'array'); my $file = ($0 eq '-e')? undef : $0; require Pod::Xhtml; my $parser = new Pod::Xhtml(%options, StringMode => 1); if($css) { $parser->addHeadText(qq[\n]) for @$css; } $parser->addBodyOpenText($message) if($message); my $usage = ""; if($file) { $parser->parse_from_file($file); $usage = $parser->asString; } if($ENV{MOD_PERL}) { # Although Apache::Registry would do this for us # we do this to support any variants that may not require Apache; my $r = Apache->request; $r->content_type("text/html"); $r->send_http_header; $r->print($usage); Apache::exit(); } else { require CGI; print CGI::header(); print $usage; exit; } } sub _html_escape { my $str = shift; return '' unless length $str; $str =~ s/&/&/g; $str =~ s/</g; $str =~ s/>/>/g; $str =~ s/'/'/g; $str =~ s/\"/"/g; return $str; } 1; =head1 NAME Pod::Usage::CGI - generate usage message for CGI scripts =head1 SYNOPSIS use CGI; use Pod::Usage::CGI; #Message is HTML-escaped my $necessary = CGI::param(foo) || pod2usage(message => "you forgot >>foo<<"); #Raw message is not escaped my $another = CGI::param(bar) || pod2usage(raw_message => "you forgot bar"); =head1 DESCRIPTION Provides pod2usage exit from CGI scripts. You may optionally supply a message. By default the message text is escaped to prevent cross-site scripting injection attacks and placed in a div container of class "message" that you can optionally format with a CSS. You can use the C