Wiki Article
CGI.pm
Nguồn dữ liệu từ Wikipedia, hiển thị bởi DefZone.Net
This article relies largely or entirely on a single source. (April 2024) |
| 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 |
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.
History
[edit]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
[edit]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.
See also
[edit]References
[edit]- ^ a b "CGI - Handle Common Gateway Interface requests and responses - metacpan.org". metacpan.org.
- ^ Stein, Lincoln D. (1998). Official guide to programming with CGI. pm: [the standard for building Web scripts]. New York: Wiley. ISBN 978-0-471-24744-9.
- ^ a b Coar, Ken A. L.; Robinson, David (October 2004). The Common Gateway Interface (CGI) Version 1.1 (Report). Internet Engineering Task Force. Retrieved 2025-12-24.
- ^ "All Software is Legacy". leejo.github.io. Retrieved 2025-12-24.
- ^ Stevenson, Michael. "Perl and the birth of the dynamic web | Opensource.com". opensource.com. Retrieved 2025-12-24.
- ^ Stevenson, Michael (2018-10-02). "Having it both ways: Larry Wall, Perl and the technology and culture of the early web". Internet Histories. 2 (3–4): 264–280. doi:10.1080/24701475.2018.1495810. ISSN 2470-1475.
External links
[edit]