CGI.pm is a large and once widely used Perl module for programming Common Gateway Interface (CGI) web applications, providing a consistent API for receiving and processing user input. There are also functions for producing HTML or XHTML output, but these are now unmaintained and are to be avoided. CGI.pm was a core Perl module but has been removed as of v5.22 of Perl. and is now maintained by Lee Johnson.
History
In 1993 the CGI specification was formalized to standardize how web servers could execute external programs and scripts; instead of just serving static files, they could generate dynamic content. In response to individual requests, CGI scripts could process user input and generate new HTML pages on the fly.
CGI.pm was written by Lincoln Stein to simplify not only the process of correctly capturing information and data sent to a web site, but also generating the new HTML content in the response.
Before the advent of this module, creating a CGI script from scratch required writing code that could:
- Parse environment variables (to get request data)
- Decode URL-encoded form data
- Parse query strings
- Generate proper HTTP headers
- Escape HTML output to prevent errors . However, in the interim, as web development toolkits expanded and evolved over time, these sites eventually migrated to using other programming languages and frameworks. ,
Examples
Here is a simple CGI page, written in Perl using CGI.pm (in object-oriented style):
<syntaxhighlight lang="perl">
- !/usr/bin/env perl
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
print $cgi->header('text/html');
print << "EndOfHTML";
<!DOCTYPE html>
<html>
<head>
<title>A Simple CGI Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>A Simple CGI Page</h1>
<form method="post" enctype="multipart/form-data">
Name: <input type="text" name="name" /><br />
Age: <input type="text" name="age" /><p>
<input type="submit" name="Submit!" value="Submit!" />
</form>
<hr />
EndOfHTML
if ( my $name = $cgi->param('name') ) {
print "Your name is $name.<br />";
}
if ( my $age = $cgi->param('age') ) {
print "You are $age years old.";
}
print '</body></html>';
</syntaxhighlight>
This would print a very simple webform, asking for your name and age, and after having been submitted, redisplaying the form with the name and age displayed below it. This sample makes use of CGI.pm's object-oriented abilities; it can also be done by calling functions directly, without the , however the necessary functions must be imported into the namespace of the script that requires access to those functions:
<syntaxhighlight lang="perl">
- !perl
use strict;
use warnings;
use CGI qw/ :standard /;
print header('text/html');
- ... HTML output same as above example
if ( my $name = param('name') ) {
print "Your name is $name.<br />";
}
if ( my $age = param('age') ) {
print "You are $age years old.";
}
print '</body></html>';
</syntaxhighlight>
Note: in many examples , short for query, is used to store a CGI object.
See also
- mod_perl
References
External links
- CGI.pm – at the CPAN
