perl.exe vs. perlis.dll

This section describes differences between perl.exe and perlis.dll. A performance test program is provided to measure the performance of perlis.dll.

Instead of using perl.exe, you could also use perlis.dll to run your Perl programs through IIS. perlis.dll is the DLL of Perl for ISAPI. The advantage of using PerlIS.dll is that IIS will only need to load PerlIS.dll into memory once, therefore much quicker to run the next Perl program if requested.

To try Perl for ISAPI, I decided to configure IIS to run *.plx files in cgi-bin with perlis.dll. I repeated the steps described in the previous section to add another entry into the Application Mappings:

Executable: c:\perl\bin\perlis.dll
Extension: .plx
Verbs: All verbs
Script Engine: Checked

Then I changed Changed to helloHttp.plx:

   print "Content-Type: text/html\n\n";
   print "<html><body>\n";
   print "Hello world!\n";
   print "</html></body>\n";

Checked with IE on http:\\localhost\cgi-bin\helloHttp.plx, and got the output correctly.

To compare the performance difference between perl.exe and perlis.dll, I used the following Java program. This program is doing a single HTTP request to a specified Web page, and repeating this for many times.

 * Copyright (c) 2002 by Dr. Herong Yang,
public class HttpResponseTest {
   public static void main(String[] args) {
      int numberOfTests = 1;
      if (args.length > 0) numberOfTests 
         = Integer.valueOf(args[0]).intValue();
      long t1 = System.currentTimeMillis();
      String result = "";
      for (int nTest=1; nTest<=numberOfTests; nTest++) {
         result = test(args);
      long t2 = System.currentTimeMillis();
      long t = t2 - t1;
      PrintStream out = System.out;
      out.println("Performace Information:");
      out.println("   Number of tests = " + numberOfTests);
      out.println("   Time = " + (t/1000) + " seconds.");
      out.println("Rerulst of Last Test:");
   public static String test(String[] args) {
      String path = "/index.html";
      int port = 80;
      String host = "localhost";
      if (args.length > 1) path = args[1];
      if (args.length > 2) port
         = Integer.valueOf(args[2]).intValue();
      if (args.length > 3) host = args[3];
      String result = "";
      try {
         Socket c = new Socket(host,port);
         BufferedWriter w = new BufferedWriter(new OutputStreamWriter(
         BufferedReader r = new BufferedReader(new InputStreamReader(
         String m = "GET "+path;
         while ((m=r.readLine())!= null) {
            result = result + m + "\n";
      } catch (IOException e) {
      return result;      

Here is the output my first test:

\j2sdk1.4.1_01\bin\java -cp . HttpResponseTest 1 /cgi-bin/
Performace Information:
   Number of tests = 1
   Time = 0 seconds.
Rerulst of Last Test:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Mon, 23 Dec 2002 19:39:09 GMT
Content-Type: text/html

Hello world!

I repeated the tests by changing the controlling parameters. The following table shows the results comparing with similar tests I did with other technologies:

        Number     Debug   Time
Cases   of Tests   Mode    (Sec)   Note
 1.     1000       No       2      Static text with IIS 5.0
 2.     2000       No       4      Static text with IIS 5.0
 3.     1000       No       6      ASP page with IIS 5.0
 4.     2000       No      11      ASP page with IIS 5.0
 5.     1000       ?        7      Static text with Tomcat 4.1.18
 6.     2000       ?       15      Static text with Tomcat 4.1.18
 7.     1000       ?        8      JSP page with Tomcat 4.1.18
 8.     2000       ?       16      JSP page with Tomcat 4.1.18
 9.     1000       ?       25      perl.exe 5.6.1 with IIS 5.0
10.     2000       ?       47      perl.exe 5.6.1 with IIS 5.0
11.     1000       ?       12      perlis.dll 5.6.1 with IIS 5.0
12.     2000       ?       24      perlis.dll 5.6.1 with IIS 5.0

Table of Contents

 About This Book

 Perl on Linux Systems

 ActivePerl on Windows Systems

 Data Types: Values and Variables

 Expressions, Operations and Simple Statements

 User Defined Subroutines

 Perl Built-in Debugger

 Name Spaces and Perl Module Files

 Symbolic (or Soft) References

 Hard References - Addresses of Memory Objects

 Objects (or References) and Classes (or Packages)

 Typeglob and Importing Identifiers from Other Packages

 String Built-in Functions and Performance

 File Handles and Data Input/Output

 Open Files in Binary Mode

 Open Directories and Read File Names

 File System Functions and Operations

 Converting Perl Script to Executable Binary

 Using DBM Database Files

 Using MySQL Database Server

 Socket Communication Over the Internet

 XML::Simple Module - XML Parser and Generator

 XML Communication Model

 SOAP::Lite - SOAP Server-Client Communication Module

Perl Programs as IIS Server CGI Scripts

 Configuring IIS 5.0 for Perl Programs

perl.exe vs. perlis.dll

 CGI (Common Gateway Interface)

 XML-RPC - Remote Procedure Call with XML and HTTP

 RPC::XML - Perl Implementation of XML-RPC

 Integrating Perl with Apache Web Server Module for Building Web Pages

 LWP::UserAgent and Web Site Testing


 PDF Printing Version