- From: <dreano@capstone.nalda.navy.mil>
- Date: Tue, 11 Apr 1995 14:21:55 -0400 (EDT)
- To: Mark Warren <mwarren@us.oracle.com>
- Cc: Multiple recipients of list <www-rdb@www10.w3.org>
Let me be a little more explicit about the Perl 'preamble' for performing virtual HTML generation... The script preamble is called cgi-lib.pl and basically provides the framework for parsing a CGI (Common Gateway Interface) request for execution of a UNIX program with parameter passing. It then does some VERY rudimentary formatting for returning the results of a program as an HTML. Anything fancier must be hand-crafted and my project has done a lot of that (PERL provides excellent support for this)...Frank Dreano ======= CUT HERE ========= #!/usr/local/bin/perl -- -*- C -*- # Perl Routines to Manipulate CGI input # S.E.Brenner@bioc.cam.ac.uk # $Header: /people/seb1005/http/cgi-bin/RCS/cgi-lib.pl,v 1.2 1994/01/10 15:05:40 seb1005 Exp $ # # Copyright 1993 Steven E. Brenner # Unpublished work. # Permission granted to use and modify this library so long as the # copyright above is maintained, modifications are documented, and # credit is given for any use of the library. # ReadParse # Reads in GET or POST data, converts it to unescaped text, and puts # one key=value in each member of the list "@in" # Also creates key/value pairs in %in, using '\0' to separate multiple # selections # If a variable-glob parameter (e.g., *cgi_input) is passed to ReadParse, # information is stored there, rather than in $in, @in, and %in. sub ReadParse { if (@_) { local (*in) = @_; } local ($i, $loc, $key, $val); # Read in text if ($ENV{'REQUEST_METHOD'} eq "GET") { $in = $ENV{'QUERY_STRING'}; } elsif ($ENV{'REQUEST_METHOD'} eq "POST") { for ($i = 0; $i < $ENV{'CONTENT_LENGTH'}; $i++) { $in .= getc; } } @in = split(/&/,$in); foreach $i (0 .. $#in) { # Convert plus's to spaces $in[$i] =~ s/\+/ /g; # Convert %XX from hex numbers to alphanumeric $in[$i] =~ s/%(..)/pack("c",hex($1))/ge; # Split into key and value. $loc = index($in[$i],"="); $key = substr($in[$i],0,$loc); $val = substr($in[$i],$loc+1); $in{$key} .= '\0' if (defined($in{$key})); # \0 is the multiple separator $in{$key} .= $val; } return 1; # just for fun } # PrintHeader # Returns the magic line which tells WWW that we're an HTML document sub PrintHeader { return "Content-type: text/html\n\n"; } # PrintVariables # Nicely formats variables in an associative array passed as a parameter # And returns the HTML string. sub PrintVariables { local (%in) = @_; local ($old, $out); $old = $*; $* =1; $output .= "<DL COMPACT>"; foreach $key (sort keys(%in)) { ($out = $in{$key}) =~ s/\n/<BR>/g; $output .= "<DT><B>$key</B><DD><i>$out</I><BR>"; } $output .= "</DL>"; $* = $old; return $output; } # PrintVariablesShort # Nicely formats variables in an associative array passed as a parameter # Using one line per pair (unless value is multiline) # And returns the HTML string. sub PrintVariablesShort { local (%in) = @_; local ($old, $out); $old = $*; $* =1; foreach $key (sort keys(%in)) { if (($out = $in{$key}) =~ s/\n/<BR>/g) { $output .= "<DL COMPACT><DT><B>$key</B> is <DD><i>$out</I></DL>"; } else { $output .= "<B>$key</B> is <i>$out</I><BR>"; } } $* = $old; return $output; } 1; #return true ==================== CUT HERE ================
Received on Tuesday, 11 April 1995 09:27:51 UTC