In this tutorial, we’ll learn about how to install, setup and configure CGI and Perl in the Apache HTTP web server running in Windows operating system, Windows XP specifically. In Windows, we make use of free ActivePerl community edition provided by ActiveState to provide Perl functionality.


Obviously, a web server needs to be running on the Windows machine. Refer to this post for instructions on how to install Apache2 in Windows.

Download ActivePerl


Download ActivePerl from Click on Free Download to start the download process. There is no need to input any contact info. Just leave it blank and press ‘Next’ to start the download.

Then download the latest version of Windows MSI package.

Install ActivePerl

Start the installation by double clicking the setup file. Follows the on-screen instruction. If you will be using Perl CGI programs and want to maintain some level of portability between both Linux machines and Windows machines, you may want to install Perl at the same location on your Windows machine as it is on most Linux machines.

For example, on Linux machine, Perl is located at /usr/bin/perl and so every Perl program that I write begins with #!/usr/bin/perl. So, it’s best when install Perl on an Windows machine, instead of installing it in the default location (i.e. C:\perl), install it in C:\usr instead, so that the Perl executable is located at /usr/bin/perl. This allows codes written on Windows machine been moved to, without changes, to Linux machine, and have it run there, and vice versa.

To change the installation path, click on browse button when you’re on the installation screen that prompts you to select which features you want to install. Set it to C:\usr if needed.

Make sure that the following options is checked (selected):
Add Perl to the PATH environment variable
Create Perl file extension association

Activating CGI

Open the httpd.conf file for editing by selecting Start > Programs > Apache HTTP Server > Configure Apache Server > Edit the Apache httpd.conf Configuration File. Alternatively, open the httpd.conf with any text editor.

In the main directory section, search for Options Indexes FollowSymLinks (at about line 267), and add ExecCGI to the end so it looks like:

Options Indexes FollowSymLinks ExecCGI

Search for the following line and remove the hash mark character (#) to uncomment this line. (You can also change .cgi to .pl, or add .pl behind .cgi if you prefer that perl extention is also treated as cgi files) For example:

#AddHandler cgi-script .cgi

Should look like:

AddHandler cgi-script .cgi .pl


AddHandler cgi-script .pl


AddHandler cgi-script .cgi

Save the httpd.conf configuration file, restart the Apache server. Test the configuration as described in Testing Your Web Server CGI Configuration at the end of this article.

Optional: Enabling CGI in Any Directory

If you want to use CGI outside ScriptAliased directory (ScriptAlias is usually the Apache2/cgi-bin/), comment out the following line:

ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/"

Should look like:

#ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/"

Alternatively, if you want to specify just one directory to put all your cgi programs, change the path instead, but makes ure that directory exists.

Should look like (for default settings):

ScriptAlias /cgi-bin/ "your_prefer_cgi-bin_direcotry"

Save the httpd.conf file. Restart the Apache server.

Replace backslashes of directory/folder path with forward slashes in Apache httpd.conf even though you’re on Windows machine.

Finding Perl Executable Location

If you don’t know where is perl.exe installed to, go to Start -> Search and search for perl.exe. This location is the path to the perl executable that has to be put on the top of all cgi scripts. If you follow default installation procedure, the path should be C:\perl\bin\perl.exe.

For the path to perl.exe path, all of these format are valid:

Testing Your Web Server CGI Configuration

Save the following test script in your DocumentRoot directory (if you have uncomment ScriptAlias, you can put it anywhere inside your DocumentRoot directory, or if you have set ScriptAlias to some particular directory, put the cgi in that directory only, i.e Apache2/cgi-bin) as or test.cgi (depending on your configuration of the AddHandler line) and modify the first line as required to point to your ActivePerl interpreter:

# ^^^ this must be the first line of the script! ^^^
# start code

use strict;
use CGI;
my $q = new CGI;

# print header and start the markup output

print $q->header( "text/html" ),$q->start_html( "hello from perl cgi!" );
print $q->h2("hello dave...");
print $q->end_html;
# end code

Now go to http://localhost/cgi-bin/test.cgi (scripts in Apache2\cgi-bin\ are read as http://localhost/cgi-bin/ by default). You should see a page that displays a level two heading with the following text:

hello dave

If you see the above message, CGI is running. If you get a 500 error, go to the last entry in your Apache2/logs/error.log (or the Review Error Log in the Start menu) to see exactly what caused this error.