Ada's Introduction to CGI Programming

As a student who's learned C programming at school, I had a little head start when taking on CGI programming. Having said that, I'm still fairly new to the game, so, as the title suggests, this is simply an introduction to CGI programming. Here, I'm going to discuss the basics of CGI programming (In Perl)- the structure of it, how to define variables in Perl, open close files, and print out pages.


There are basically two ways to write a CGI script- in C, or Perl. The advantage of C is that it's a compiled language, so it tends to be more efficient than Perl. However, Perl, with it's advanced data handling capabilities (such as regular expressions) and open source nature, makes it the choice of most people when it comes to CGI programming. This tutorial is on how to program in CGI using Perl.

Before you can begin programming using Perl, you'll need a copy of the Perl interpreter on your computer. The interpreter is needed to interpret your Perl code; like Borland C++ is to your C code. You can get a copy of it at If you don't want to install the interpreter onto your own computer, and your web host has Perl installed, you can alternatively test out your scripts by uploading them and testing them remotely.

-Basic structure of a CGI script

CGI scripts are really just text files saved with an extension of either .cgi or .pl. The extension tells the Perl interpreter that this is a CGI script, and that the interpreter should process it as such. A basic CGI script looks like the following:


print "Content-type: text/html\n\n";
print "<HTML><HEAD>";
print "<TITLE>This is a test</TITLE>";
print "</HEAD><BODY>";
print "My first CGI script!";
print "</BODY></HTML>";

The first line of your script, as always, should point to where the Perl interpreter on your machine is. Following that is a basic Perl code that dynamically generates and displays a webpage. This is done by using the "print" command of perl to write out the underlining HTML code for the page. Notice the line:

print "Content-type: text/html\n\n";

This is required whenever you wish to use Perl to print out a webpage- it tells the browser that the following is HTML content.

Like any other CGI script, to install and test it, simply save the code with an extension of .cgi or .pl, upload it, chmod it, and run it in your browser. If you need help on how to install a CGI script, please refer to my tutorial on it.

-Variables in Perl

Variables are used to hold static values and help further manipulate it in your program. Perl supports most of the well known variable types, such as scaler or array variables. Let's have a look at variables, and how to use them in your Perl script.

-Scaler variables

Scaler variables are variables that can hold only one value at a time (unlike an array). A scaler variable is defined in Perl by using "$", then the name of the variable itself. For example:


Along with the "print" command, I can now use Perl to print out my name:

print "My name is $myname\n";

Scaler variables can obviously contain numbers as well:


Moreover, scaler variables can contain the value of other scaler variables as well:


Thanks for the swap!

-Array variables

Perl also support array variables. An array holds lists of values, kind of like one big storage tank divided into many compartments. Arrays are defined by using the character "@" in front of the variable name. For example:

@fruits=("oranges", "bananas", "apples");

The variable @fruits holds three distinct values. So how do you access and retrieve each of these values? Watch:

print $fruits[0];          #PRINTS "oranges"
print $fruits[1];         #PRINTS "bananas"
print $fruits[2];         #PRINTS "apples"

As you can see, it's pretty simple. The important thing to realize here is that the first value inside the array is referenced by the index number "0", NOT "1". Also, note that "$", NOT "@", proceeds each individual array element. This makes sense, since each array element only contains ONE value.

You can assign a new variable to an array by using a subscript that's 1 index position higher than the last variable inside the array. Let's say I decide, after declaring the above array, that I want to add a new fruit, "pears" to it. Just do the following:


The array automatically expands to accommodate this new fruit.

-Putting it together

Let's incorporate what we've learned thus far and create a simple CGI script that uses variables in it:


@myhobbies=("computers", "basketball". "reading");
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>This is a test</TITLE></HEAD><BODY>";
print "Hi. My name is $myname. I\'m $myage years old, and my hobbies
include @myhobbies[0]. @myhobbies[1], and @myhobbies[2].";
print "</BODY></HTML>";

-Decision Trees in Perl

Like most other programming languages, you can use decision trees such as if-else statements in your program to allow it to make crude decisions. Let me show you how to use some of the more common decision trees.

-If-else statement


if (condition){
#do this



if ($thisyear>=2000){
print " Welcome to the new millennium!";
print "Be patient. The millennium is coming soon";

-While loop


while (condition){
#do this


while ($x<5){
print "$x ";

-For loop


for (begin; end; increment){
#do this


@animals=("horse", "sheep", "dog", "cat", "monkey", "chicken");
for ($i=0; $i<=5; $i++){
print "$animals[$i] ";

Opening and reading files in Perl

A very cool thing about Perl is it's ability to open up any file and read data from it. Here's the basic syntax:

open (FHANDLE, "mydata.dat");

FHANDLE is a temporary variable that's used to represent "mydata.dat" You can name this variable anything you like. mydata.dat represents the file name of the data file itself.

The following example prints out the contents of "ada.dat":

open (FHANDLE, "ada.dat");
while (FHANDLE){

The line

while (FHANDLE)

basically means "while NOT END OF FILE."

The above is just a very basic example of how Perl can open and read external files. More complex examples are: searching the file for a specific match, writing to it, search-and-replace operations, and more.

Well, that's a wrap for now. As I learn more about Perl, I'll bring them to you through this site. Until then mi amigo!