1.3. Alternative Technologies
As its title suggests, this book focuses on CGI programs written in
Perl. Because Perl and CGI are so often used together, some people
are unclear about the distinction. Perl is a programming language, and CGI is an
interface that a program uses to handle requests from a web server.
There are alternatives both to CGI and to Perl: there are new
alternatives to CGI for handling dynamic requests, and CGI
applications can be written in a variety of languages.
1.3.1. Why Perl?
Although CGI applications can be written in any almost any language,
Perl and CGI scripting have become synonymous to many programmers. As
Hassan Schroeder, Sun's first webmaster, said in his oft-quoted
statement, "Perl is the duct tape of the Internet." Perl
is by far the most widely used language for CGI programming, and for
many good reasons:
Perl is easy to learn because it resembles other popular languages
(such as C), because it is forgiving, and because when an error
occurs it provides specific and detailed error messages to help you
locate the problem quickly.
Perl allows rapid development because it is interpreted; the source
code does not need to be compiled before execution.
Perl is easily portable and available on many platforms.
Perl contains extremely powerful
string manipulation operators, with
regular expression matching and substitution built right into the
Perl handles and manipulates binary data just as easily as it handles
Perl does not require
strict variable types;
numbers, strings, and booleans are
Perl interfaces with external applications very easily and provides
its own filesystem functions.
There are countless
open source modules for Perl available
on CPAN, ranging from modules for creating
dynamic graphics to interfacing with Internet servers and database
engines. For more information on CPAN, refer to Appendix B, "Perl Modules".
Furthermore, Perl is fast. Perl isn't
strictly an interpreted
language. When Perl reads a source file, it actually compiles the
source into low-level opcodes and then executes them. You do not
generally see compilation and execution in Perl as separate steps
because they typically occur together: Perl launches, reads a source
file, compiles it, runs it, and exits. This process is repeated each
time a Perl script is executed, including each time a CGI script is
executed. Because Perl is so efficient, however, this process occurs
fast enough to handle requests for all but the most heavily
trafficked web sites. Note that this is considerably less
efficient on Windows systems than on Unix systems because of the
additional overhead that creating a new process on Windows entails.
1.3.2. Alternatives to CGI
Several alternatives to CGI have appeared in recent
years. They all build upon CGI's legacy and provide their own
approaches to the same underlying goal:
responding to queries and
presenting dynamic content via HTTP. Most of them also attempt to
avoid the main drawback to CGI scripts: creating a separate
process to execute the script every time it
is requested. Others also try to make less of a distinction between
HTML pages and code by moving code into
HTML pages. We'll discuss the theories behind this approach in
Chapter 6, "HTML Templates". Here is a list of some of the major
alternatives to CGI:
Active Server Pages, or ASP, was
created by Microsoft for its web server, but it is now available for
many servers. The ASP engine is integrated into the web server so it
does not require an additional process. It allows programmers to mix
code within HTML pages instead of writing separate programs. As
we'll see in Chapter 6, "HTML Templates", there are modules
available that allow us to do similar things using CGI. ASP supports
is also supported, and ActiveState offers a version of Perl that can
be used on Windows with ASP. There is also a
Perl module, Apache::ASP, that
supports ASP with mod_perl.
PHP is a programming language that is
similar to Perl, and its interpreter is embedded within the web
server. PHP supports embedded code within HTML pages. PHP is
supported by the Apache web server.
creates more of a
distinction than PHP between code pages and HTML pages. HTML pages
can include additional tags that call ColdFusion functions. A number
of standard functions are available with ColdFusion, and developers
can create their own controls as extensions. ColdFusion was
originally written for Windows, but versions for various
Unix platforms are now available as well.
The ColdFusion interpreter is integrated into the web server.
- Java servlets
Java servlets were created by Sun. Servlets
are similar to CGI scripts in that they are code that creates
documents. However, servlets, because they use Java, must be compiled
as classes before they are run, and servlets are dynamically loaded
as classes by the web server when they are run. The interface is
quite different than CGI. JavaServer Pages, or JSP, is another
technology that allows developers to embed Java in web pages, much
FastCGI maintains one or more instances of
perl that it runs continuously along with an
interface that allows dynamic requests to be passed from the web
server to these instances. It avoids the biggest drawback to CGI,
which is creating a new process for each request, while still
remaining largely compatible with CGI. FastCGI is available for a
variety of web servers. We'll discuss FastCGI further in Chapter 17, "Efficiency and Optimization".
is a module for the Apache web
server that also avoids creating separate instances of
perl for each CGI. Instead of maintaining a
separate instance of perl like FastCGI,
mod_perl embeds the
interpreter inside the web
server. This gives it a performance advantage and also gives Perl
code written for mod_perl access to
Apache's internals. We'll discuss
mod_perl further in Chapter 17, "Efficiency and Optimization".
Despite a proliferation of these competing
technologies, CGI continues to be the most popular method for
delivering dynamic pages, and, despite what the marketing literature
for some of its competitors may claim, CGI will not go away any time
soon. Even if you do imagine that you may begin using other
technologies down the road, learning CGI is a valuable investment.
Because CGI is such a thin interface, learning CGI teaches you how
web transactions works at a basic level, which can only further your
understanding of other technologies built upon this same foundation.
Additionally, CGI is universal. Many alternative technologies require
that you install a particular combination of technologies in addition
to your web server in order to use them. CGI is supported by
virtually every web server "right out of the box" and
will continue to be that way far into the future.
Copyright © 2001 O'Reilly & Associates. All rights reserved.