Perl2Exe User Manual

Dec 29, 1999


CONTENTS

About This Program
System Requirements
Installation
Release History
Contacting the Author
License Agreement


About This Program

Perl2Exe is a command line utility for converting Perl scripts to executable files.

This allows you to create stand alone programs in perl that do not require the perl interpreter. You can also ship the executable file without having to ship your perl source code.

Perl2Exe also allows you to create no-console programs using Tk. 

Perl2Exe for Unix can generate executables for supported Unix machines.  Perl2Exe for Unix can also be used from a Win32 host to generate executables for a Unix target host.

This document covers the following version of Perl2Exe:
Perl2Exe for ActivePerl 5.005
Perl2Exe for ActiveState's Perl 5.003
Perl2Exe for Standard Perl 5.004
Perl2Exe for Unix Perl 5.005

This document covers all versions. Where there are differences, the differences are noted in the text.


Usage:

perl2exe myscript.pl

This will convert a script named myscript.pl to myscript.exe. For the Standard version use the following command:

p2xstd myscript.pl

 

options:

-perloptions
Sets the options used to invoke the perl interpreter. If several options are used put them in quotes, e.g.: -perloptions="-s -p". Default is none.  The options can also be set from a 'perloptions' environment variable.

For Perl2Exe for Perl 5.003 the default is -s. For no options use: -perloptions=none

-register

This option allow you to enter registration information for Perl2Exe. You will be prompted for a registration key.

-small

Generates a smaller executable which uses a shared runtime DLL. The generated executable will be smaller by about 500KB. The executable will require a shared DLL, p2xdll.dll, to run. This DLL will be copied to the current directory.

This option is not available in the Lite versions of Perl2Exe. The -small option is not used for the Standard version.

-tiny

Create an even smaller executable by placing additional code into DLL's. Perl2Exe will create DLL files in the current directory containing code from loadable modules which use pll, dll, or so files. This option is not available in the Lite versions of Perl2Exe.

-gui

Create a no-console executable.  This can be used for Tk and Win32::GUI applications.   I/O to STDOUT and STDIN will not be visible. Applies to ActivePerl and Standard versions only.

-icon=filename

ActivePerl version only

Add a user supplied icon to the executable. The icon must contain a Standard(32x32) and a Small(16x16) bitmap and must be 1078 bytes long.

How to create the required icon using Dev Studio:
Start DevStudio and open or create a new icon file. Draw the Standard (32x32) icon image. Press the Insert key. Select Small (16x16). Draw the small icon image. Save the icon file.

Icons will not display on Win95 systems unless IE is also installed.

-platform=sun
-platform=linux

Perl2Exe for Unix Only

Specify the target platform for the executable.  The default is based on the host machine.  On a Linux host the default is linux, on a Solaris host the default is sun.

-libc=5
-libc=6

Perl2Exe for Unix Only

Use -libc=5 to generate executable for a libc5 based machine, such as Slackware and Caldera.  Use -libc=6 to generate executables for a libc6 based machine, such as Red Hat 5.2.  On Slackware and Caldera hosts the default is libc5, on other hosts the default is libc6.


Notes and FAQ's:

1. Contacting us for support
If you are having trouble getting your script to run, please send us the following information:
The output of Perl2exe (do not send the binary executable)
The output of your script
The output produced by 'perl -v'
The script
Any data files, etc. required by the script.
Any non standard modules (.pm, .pll, .dll and .so files) requires by your script.

You can save the output of perl2exe, and your program to a file with the commands:
perl2exe myscript.pl >foo.txt
myscript >>foo.txt

You should strip the script down to the minimum needed to to reproduce the problem.

2.Perl2exe compatibility
The ActivePerl version is compatible with ActiveState's build 5xx, including build 517, 509, etc.
The ActiveState version is compatible with "Perl, version 5.003_07, Perl for Win32 Build 316".
The Standard version is compatible with "Perl 5.004_02".
Perl2Exe for Uinx is compatible with Perl 5.00503.

3. Perl2Exe performance
Programs created with Perl2Exe will run at about the same speed as perl scripts run with the standard interpreter.

4. Command line options
This section applies to the ActiveState release only
When we invoke perl on your script, it is equivalent to running with the perl -s option. So the command line:
myscript -opt1=My_Name
is equivalent to:
perl -s script.pl -opt1=My_Name
This will set $opt1="My_Name", i.e. the variable is already set, and you don't have to do any parsing of command line parameters. You can override the -s flag by using the -perloptions options

5. Building exe for scripts containing the glob function
This section applies to the ActiveState and ActivePerl release only.
Use the following code if your code uses the glob function:
use File::DosGlob 'glob';
@flist = glob "*.*";

6. Using the system( ) function
This section applies to the ActiveState release only
Most system() function calls require no special handling. However if your system call uses io redirection or pipes them you will need to add cmd32.exe to your executable. Bind cmd32.exe into your exe as follows:
perl2exe myscript.pl c:\perl\bin\cmd32.exe
The above line assumes that standard Perl is installed in c:\perl. An alternative to binding cmd32.exe into your exe is to ship cmd32.exe with your exe file.

The following examples require no special handling:
system("cls"); system("dir"); system("net use");

The following examples require cmd32.exe:
system("net use >foo"); system("date <cr.dat"); system("dir | more");

As an altenative to using cmd32.exe consider using the back-tick method of running a program. Example: instead of system("net use >foo"); use $foo = `net use`; print OUT $foo;

7. Building exe files for scripts containing "use" or "require" statements
Perl2Exe will automatically scan your source code for use and require statements. Required source modules modules (".pm" files) and autoloadable (".pll" and ".dll" files) will be automatically complied into you exe file. In order for this to work the Perl interpreter's bin directory must be in your path (e.g. c:\perl\bin)

You can cause Perl2Exe to look in additional non-standard directories with the statement:
use lib 'some/path';    # use this exact syntax

Recent versions of Perl2Exe will also look at the perl5lib environment variable to determine the location of library modules. 

8. "Can't locate somemodule.pm in @INC at myscript.pl line 1" error message
If you get an error message like the one above, you can force the missing module to be compiled into the exe by adding a line like one of the following to your script:

use somemodule;

Only if that does not work, use:

#perl2exe_include somemodule.pm
#perl2exe_include NET::FTP::I
#perl2exe_include scriptname.pl

Only if that does not work, use the command: "perl2exe myscript \somepath\somemodule.pm".

Please also send us the script with this problem, so we can fix the problem in a future version of Perl2Exe.

9. #perl2exe_include run-time messages
#perl2exe_include somemodule.pm
use somemodule;    #perl2exe

If you see a message like the ones above when you run your program, it means that a missing module was detected at run-time.  Copy and past the messages to your script and rebuild it.

If you simply want to hide these message, then compile your script with the option -perloptions=-p2x_noshow_includes .  Note there are no spaces in the string "-perloptions=-p2x_noshow_includes".

10. Using dbmopen
If your script contains a dbmopen function call, add the following two lines to your script.
use AnyDBM_File;
use SDBM_File;

11. Building programs using the Tk library
If your script uses the Tk library it will be necessary to add some additional use statements to your main script. Build you executable in the normal way. When you run the program, if you get a message like "Can't locate Tk/Entry.pm in @INC", then add "use Tk::Entry;" to your main script.

If you get an error message like: 'error reading bitmap file "PERL2EXE_STORAGE/Tk/balArrow.xbm"' then add the following line to your script:
#perl2exe_include tk/balarrow.xbm
Compile your script with the command:
perl2exe -perloptions=-p2x_xbm yourscriptname.pl
Note: "-perloptions=-p2x_xbm" is one word without spaces.

If you see a message that says something like:
Can't find 'boot_IO' symbol in C:\WINDOWS\TEMP/IO.dll

Run the command:
ren c:\perl\site\lib\auto\tk\io\io.dll io.dll.save

12. Unrecognized switch: -2x_console
If you see the above message, it means that you are using the wrong perl.dll file when running an executable created with Perl2Exe for Standard Perl.

13. Creating an NT services
Perl2Exe can be used to create NT services. Use the SRVANY utility program which comes with Microsoft Resource Kit to start your executable as a service.  Configure SRVANY to start in the directory where the executable is located.  You will probably also need to use the -tiny option.

14. Finding the directory where the your application is located.
The environment variable $ENV{sourceExe} contains the full path to where your application is located.

15. Extra Modules bundled with Perl2Exe for Unix
Digest-MD5-2.09.tar
HTML-Parser-2.23.tar
MIME-Base64-2.11.tar
Tk800.015.tar (except HP/UX)
URI-1.04.tar
libnet-1.0607.tar
libwww-perl-5.45.tar

16. Perl2Exe for Linux system library code generation options
On a very few Linux systems you may encounter a message like one of the following when trying to run an executable:

": can't load library 'libgdbm.so.1'"
To fix this problem use the option -libgdbm=2

": can't load library 'libdb.so.1'"
To fix this problem use the option -libdb=2

"libgdbm.so.2: cannot open shared object file: No such file or directory"
You may get this message on a SuSe 6.1 Linux system.  To fix this problem use the option -libgdbm=1

"libdb.so.2: cannot open shared object file: No such file or directory"
To fix this problem use the option -libdb=1

"bash: ./foo: No such file or directory"
To fix this problem use the -libc=5 option

17. Known problems
Perl2Exe for ActivePerl and Unix will remove all lines from scripts that start with the '#' character.  If this a problem, you can override this behaviour by using the -embed option.


System Requirements

Win32 versions:
Windows 95/98 or Windows NT

Unix versions:
Solaris, Linux,  Win95/98 or WinNT


Installation - Win32 versions

Unzip the installation file, and copy the files to the perl\bin directory , or any directory that is in your path, or place it in the current directory.

If you have a registration key for Perl2Exe, start perl2exe with the command:
perl2exe -register
or
p2xstd -register
This option allow you to enter registration information for Perl2Exe. You will be prompted for a registration key.

NOTE:
Perl2Exe for Standard Perl is shipped with a modified perl.dll library file. This perl.dll is a superset of the one supplied with the release of the Perl interpreter. The modified dll is required to run Perl2Exe generated executable files.


Installation - Perl2Exe for Unix on a Unix host

  1. Add ~/per2exe and ~/perl2exe/perl5/bin to your path.
  2. Extract Perl2Exe tar file in your home (or other) directory with the commands below.  This will create a perl2exe directory and copy the required files into it.  In the following steps replace the * with SunOS or Linux, etc.

    cd ~
    gzip -dc p2xunix-*.tar.gz | tar -x


    Repeat above step if installing multiple platform versions.  Your own platform version should be extracted last.  For example on a Linux host the Linux version should be extracted last.
  3. Configure Perl2Exe with the commands below:
    cd ~/perl2exe
    ./setup
  4. Building a test program:
    cd ~/perl2exe
    perl2exe lwpsamp.pl
    lwpsamp
  5. If you have a compatible perl installation you can replace the provided perl binary libraries with your own:
    cd ~/perl2exe
    rm -rf perl5
    perl ./setup_perl2exe.pl
  6. Adding additional modules to the Perl library.
    You can add additional modules to the Perl library that comes with Perl2Exe.   Adding a module is done in the usual way:
    1) Make sure that you have added ~/perl2exe/perl5/bin to your path.
    2) download and expand the required tar file.
    3) cd into the extracted directory, and type the following commands:
    perl Makefile.PL
    make
    make test
    make install

Installation - Perl2Exe for Unix on a Win32 host

  1. Unzip p2xunix-*.tar.gz to any directory, e.g c:\
    This will create a c:\perl2exe directory and copy the required files into it.  If you wish you can install in some other directory.  Replace * with Linux, or SunOS, etc.  
    Repeat this step if installing multiple platform versions.  Even though the file is in tar.gz format is will work on Windows.  Use a program like Winzip to extract it.  The download process may rename the file by replacing the period with an underscrore to p2xunix-*_tar.gz, if it does rename it back to p2xunix-*.tar.gz .
  2. Add c:\perl2exe to your path
  3. Building a test program:
    cd c:\perl2exe
    perl2exe -platform=linux lwpsamp.pl
    or
    perl2exe -platform=sun lwpsamp.pl
    This will create lwpsamp file in the current directory. Copy the file to your target host and make it exectuable with "chmod 755 lwpsamp".

Release History

V3.12b-AP5XX Dec 16,1999
Fixed: GUI programs started hidden when using system or back-ticks

V1.07-Unix Dec 29, 1999
Executable will also search the current directory for system .so files.
Added -libdb and -libgdbm options
Fixed: Cgi failed to run on Solaris with Netscape server and cgiwrap (SunOS)
Added support for AIX
Added support for FreeBSD
Fixed: BSDOS executables not working as cgi
Fixed: Using Mail::SendMail with libc=5 causes a fault when program exits (Linux5)

V1.06-Unix Nov 11 ,1999
Fixed GP fault  which affects some modules containing __END__
Added the libnet module
Fixed: glob function was not working on SunOS and IRIX


V3.12-AP5XX Nov 10 ,1999
Fixed the crypt function
Tested with Perl build 522
Minor documentation updates

V1.05-Unix Oct 12 ,1999
Perl2Exe for Unix rebuilt with Perl 5.00503
Added support for SunOS Linux, HP-UX, BSDOS and IRIX

V1.04-Unix Sep 10 ,1999
Release for each platform is now standalone and includes the Perl libraries

V3.11-AP5XX Aug 8,1999
Support for Build 518
Fixed: missing function Win32::CopyFile error
Fixed: returning a scalar from inside a for loop produces an undef result
Handling of these statements: require "cgi-lib.pl"; use File::DosGlob 'glob'; use CGI qw(:cgi);
Handle the use lib 'somepath'; statement
Handle #!perl -options

V3.10-AP5XX July 22,1999
Fixed a intemittent failure with opendir with a UNC path
Files like Tk.dll, Win32/process.dll, tk\autosplit.ix were not compiled into executable when using PRK
Fixed syntax error in CGi.pm

V3.09-AP5XX June 19,1999
Fixes the following error with Tk programs 'couldn't read file "PERL2EXE_STORAGE/Tk/minus.xpm"'
Fixes GP fault on exit with -gui switch in trial mode.
Executables no longer require PerlCRT.dll if the script does not require the Socket module.
Can now handle requires containing a full path like: require 'c:\mylibrary\foo.pl';
The -gui option now generates an executable that no longer requires the pxdll.dll

V1.03-Unix May 15,1999
Add Tk library to Solaris binary
Fixed error in registration key handling code

V3.08-AP5XX May 05,1999
Fixes to support the following newer modules CGI.pm ,LWP::UserAgent, and Tk
- fixes tksamp.pl lwpsamp.pl

V3.07-AP5XX April 22,1999
Now supports Perl 5.005_03 (build 515 etc)

V1.02-Unix April 18,1999
Support for libc5 based Linux machines (Slackware and Caldera)

V1.01-Unix April 14,1999
Fixes a divid by zero error when running Perl2Exe

V1.00-Unix Mar 21,1999
Initial release

V3.06-AP5xx Mar 12,1999
Fixed: LWP and Socket functions not working if -gui option used
Updated documentation

V3.05-STD Mar 12, 1999
Updated documentaion

V2.19-316 Mar 12, 1999
Updated documentaion

V3.04B-STD Jan 19, 1999
Now supports the Lite registration key

V3.05-AP5xx Jan 10, 1999
Fixed: command line parameters containing quoted spaces incorrectly handled with -gui option
Fixed: Crypt function was not implemented
Added -icon option
Search additional library directories to support PRK build 509
Fixed problem with -e -d on sharenames

V3.04-STD Dec 10, 1998
Generates smaller executables
No longer requires CW3220MT.DLL

V3.04-AP507 Dec 10, 1998
Generates smaller executables
Xbm option documented
Tested with Perl Build 507

V3.03-AP506 Nov 15, 1998
Bug fix: file io when the -gui option is used now working correctly.
perloptions can be set from an environment variable.
Perl2Exe will search for library modules based on path and on perl5lib environment variables


V3.03-STD Nov 15, 1998
Bug fix: system and backtick functions now work when -gui is not used.
perloptions can be set from an environment variable.
Perl2Exe will search for library modules based on path and on perl5lib environment variables

V3.02-AP506 Nov 8, 1998
Perl2Exe will now find modules in build 506 (and 502) directory structure
Look for modules in directories below . and ./lib
Fixed: Use POSIX correctly handled
Fixed: Missing re.pm, used by File::Basename
Exe extract feature added
Default perloptions is now 'none'

V3.01-AP502 Sep 07, 1998
Added odbc sample code - cleaned up other samples
Automatically compiles IO if IO::Socket is used
Automatically compiles modules required by LWP::UserAgent
Fixed: close function sometimes fails with -gui option

V3.00-AP502 Sep 02, 1998
Rebuilt to use perlcrt.dll, this fixes socket problems and supports LWP module
Fixed: Library modules in current directory not compiled
gui option will now say p2xdll.dll is required
Fixed: GUI exe will display a message if p2xdll.dll is missing or incorrect version

V2.21-AP502 Aug 18, 1998
Initial release of Perl2Exe for ActivePerl

V2.20-STD July 11,1998
Bug fix to remove Invalid argument -p2x_xx message
Standard version now uses same registration key as ActiveState version.

V2.19-STD July 5,1998
Second release of the Standard version of Perl2Exe for Perl 5.004
Added -gui option for creating no-console executables

V2.18-STD May 14,1998
Initial release of the Standard version of Perl2Exe for Perl 5.004

V2.17-316 Mar 21, 1998
Rebuild for Perl Perl 5.003_07 Build 316
Bug fix: Get runtime error when modifying an environment variable
Bug fix: wildcards not expanded on command line arguments
Bug fix: Exe fails if filename is mixed case, eg "perl2exe Sample"
Bug Fix: Some system calls not working (see notes)
Documentation: dbmopen requires the addition of use AnyDBM_File; use SDBM_File;

V2.16.2-315 Feb 25,1998
Fixed bug where $foo = <IN> would cause runtime error with -small option

V2.16-315 Feb 9,1998
Enhancements to the -small option
Added -tiny option

V2.15-315 Feb 7,1998
Rebuild for Perl Perl 5.003_07 Build 315

V2.14-313 Feb 1,98
Introduced Pro and Lite versions of Perl2Exe
Added -small option
Removed need for special dynaloader.pm file

V2.13-313 Jan 1,98
Fixed serious error which sometimes causes a GP fault when running generated exe from NT command line, or a "parse exception" when run from IIS.

V2.12-313 Dec 4,97
Rebuild for Perl Perl 5.003_07 Build 313
Handle require "foobar.pl"; syntax
Handle conflict between Socket and IO::Socket
Socket i/o now works.

V2.11-310 Nov 5,97
Minor documentation cleanup.
Handle "use foobar;" where there is a double space between use and foobar.

V2.11 Oct 16,97
Fixed error when exe containing dynamically loaded modules files is executed as a cgi script.
Print error message if Dynaloader.pm is missing from Perl2Exe directory

V2.10 Oct 13,97
Rebuild for Perl Perl 5.003_07 Build 310
Documentation is now in HTML.
Misleading error message references to temp directory cleaned up
Standalone improvements. Exe file can now be tested on PC, even if Perl is installed on it.

V2.04
Base line version for Perl 5.003_07 Build 306

V1.0
Original version

 


Contacting the Author

We'd like to hear your questions and comments! You can reach us at:

Internet Email: info@dynamicstate.com
WWW: http://www.dynamicstate.com

 


Ordering Information

For ordering information please visit our Web page.

 


LICENSE AGREEMENT

You should carefully read the following terms and conditions before using this software. Unless you have a different license agreement signed by DynamicSTATE Software, your use of this software indicates your acceptance of this license agreement and warranty.

Registered Version

Each registered copy of Perl2Exe may be used at a single workstation to create an unlimited number of exe files, subject to the following conditions:

* A separate registered copy of Perl2Exe must be obtained for each workstation on which Perl2Exe will be used even if such use is only temporary. This is not a "concurrent use" license.

* Exe files created by Perl2Exe are shipped with Run-time portions of Perl2Exe. No registered user, nor anyone else, may alter or modify the generated Exe files. You cannot give anyone else permission to modify the Exe files.

* Exe files generated by the registered version of Perl2exe may be freely distributed.

All rights not expressly granted in this license agreement are reserved entirely to DynamicSTATE Software

Governing Law

This agreement shall be governed by the laws of the Province of Ontario, Canada.

Disclaimer of Warranty

THIS SOFTWARE AND THE ACCOMPANYING FILES ARE SOLD "AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED. Because of the various hardware and software environments into which Perl2Exe may be put, NO WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED. Good data processing procedure dictates that any program be thoroughly tested with non-critical data before relying on it. The user must assume the entire risk of using the program. ANY LIABILITY OF THE SELLER WILL BE LIMITED EXCLUSIVELY TO PRODUCT REPLACEMENT OR REFUND OF PURCHASE PRICE.

Shareware Version

This is not free software. You are hereby licensed to use the shareware evaluation version of Perl2Exe for evaluation purposes without charge for a period of 30 days. If you use this software after the 30 day evaluation period a registration fee is required. Under no circumstances are you licensed to distribute Exe files created by the shareware evaluation version of Perl2Exe. Unregistered use of Perl2Exe after the 30 day
evaluation period is in violation of copyright laws.

Distribution of Perl2Exe

You are hereby licensed to make as many copies of the shareware evaluation version of this software and documentation as you wish; give exact copies of the original shareware version to anyone; and distribute the shareware version of the software and documentation
in its unmodified form via electronic means. There is no charge for any of the above.

You are specifically prohibited from charging, or requesting donations, for any such copies, however made; and from distributing the software and/or documentation with other products (commercial or otherwise) without prior written permission, with one exception: Disk Vendors approved by the Association of Shareware Professionals are permitted to redistribute Perl2Exe subject to the conditions in this license, without specific written permission.