CGI.pm
Perl module for web applications
From Wikipedia, the free encyclopedia
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.[1] CGI.pm was a core Perl module but has been removed as of v5.22 of Perl.[1] The module was written by Lincoln Stein [2] and is now maintained by Lee Johnson.
| CGI.pm | |
|---|---|
| Original author | Lincoln Stein |
| Developer | Lee Johnson |
| Stable release | 4.71
/ 2025-10-01 |
| Platform | Perl |
| Type | Perl module for CGI |
| License | Artistic License |
| Website | metacpan |
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.[3]
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 [3]
In contrast, the various methods and functions available in CGI.pm allowed one to create a Perl script that automated a great deal of the more tedious coding (see examples below). Many of the largest and most well-known web sites and Web Apps relied on CGI.pm when they were first launched: EBay, IMDb, CPanel, Slashdot, Craigslist, Ticketmaster, Booking.com, TWiki, Bugzilla, Movable type, and LiveJournal. [4]. However, in the interim, as web development toolkits expanded and evolved over time, these sites eventually migrated to using other programming languages and frameworks. [5],[6]
Examples
Here is a simple CGI page, written in Perl using CGI.pm (in object-oriented style):
#!/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>';
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 $cgi->, however the necessary functions must be imported into the namespace of the script that requires access to those functions:
#!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>';
Note: in many examples $q, short for query, is used to store a CGI object.