Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compile a Perl script to a Windows executable with Strawberry Perl?

What would be the easiest way to compile a simple Perl script to an executable under Windows with Strawberry Perl (as I understand it's possible and free)?

In the past I've used ActiveState compiler and perl2exe and was simple enough. However, now after a few computer changes and OS updates I've lost the licenses and I'd like to find a better/permanent solution.

like image 723
Notitze Avatar asked Jun 01 '10 08:06

Notitze


People also ask

Which Perl is best for Windows?

Strawberry Perl (a Perl packaged for Windows) is recommended as you get many useful modules (especially those that are tricky to install) along with it.


2 Answers

Install PAR::Packer from CPAN (it is free) and use pp utility.

like image 180
Alexandr Ciornii Avatar answered Oct 14 '22 00:10

Alexandr Ciornii


  :: short answer :   :: perl -MCPAN -e "install PAR::Packer"    pp -o <<DesiredExeName>>.exe <<MyFancyPerlScript>>     :: long answer - create the following cmd , adjust vars to your taste ...   :: next_line_is_templatized   :: file:compile-morphus.1.2.3.dev.ysg.cmd v1.0.0   :: disable the echo   @echo off    :: this is part of the name of the file - not used   set _Action=run    :: the name of the Product next_line_is_templatized   set _ProductName=morphus    :: the version of the current Product next_line_is_templatized   set _ProductVersion=1.2.3    :: could be dev , test , dev , prod next_line_is_templatized   set _ProductType=dev    :: who owns this Product / environment next_line_is_templatized   set _ProductOwner=ysg    :: identifies an instance of the tool ( new instance for this version could be created by simply changing the owner )      set _EnvironmentName=%_ProductName%.%_ProductVersion%.%_ProductType%.%_ProductOwner%    :: go the run dir   cd %~dp0    :: do 4 times going up   for /L %%i in (1,1,5) do pushd ..    :: The BaseDir is 4 dirs up than the run dir   set _ProductBaseDir=%CD%   :: debug echo BEFORE _ProductBaseDir is %_ProductBaseDir%   :: remove the trailing \    IF %_ProductBaseDir:~-1%==\ SET _ProductBaseDir=%_ProductBaseDir:~0,-1%   :: debug echo AFTER _ProductBaseDir is %_ProductBaseDir%   :: debug pause     :: The version directory of the Product    set _ProductVersionDir=%_ProductBaseDir%\%_ProductName%\%_EnvironmentName%    :: the dir under which all the perl scripts are placed   set _ProductVersionPerlDir=%_ProductVersionDir%\sfw\perl    :: The Perl script performing all the tasks   set _PerlScript=%_ProductVersionPerlDir%\%_Action%_%_ProductName%.pl    :: where the log events are stored    set _RunLog=%_ProductVersionDir%\data\log\compile-%_ProductName%.cmd.log    :: define a favorite editor    set _MyEditor=textpad    ECHO Check the variables    set _   :: debug PAUSE   :: truncate the run log   echo date is %date% time is %time% > %_RunLog%     :: uncomment this to debug all the vars    :: debug set  >> %_RunLog%    :: for each perl pm and or pl file to check syntax and with output to logs   for /f %%i in ('dir %_ProductVersionPerlDir%\*.pl /s /b /a-d' ) do echo %%i >> %_RunLog%&perl -wc %%i | tee -a  %_RunLog% 2>&1     :: for each perl pm and or pl file to check syntax and with output to logs   for /f %%i in ('dir %_ProductVersionPerlDir%\*.pm /s /b /a-d' ) do echo %%i >> %_RunLog%&perl -wc %%i | tee -a  %_RunLog% 2>&1    :: now open the run log   cmd /c start /max %_MyEditor% %_RunLog%     :: this is the call without debugging   :: old    echo CFPoint1  OK The run cmd script %0 is executed >> %_RunLog%   echo CFPoint2  OK  compile the exe file  STDOUT and STDERR  to a single _RunLog file >> %_RunLog%   cd %_ProductVersionPerlDir%    pp -o %_Action%_%_ProductName%.exe %_PerlScript% | tee -a %_RunLog% 2>&1     :: open the run log   cmd /c start /max %_MyEditor% %_RunLog%    :: uncomment this line to wait for 5 seconds   :: ping localhost -n 5    :: uncomment this line to see what is happening    :: PAUSE    ::   :::::::   :: Purpose:    :: To compile every *.pl file into *.exe file under a folder    :::::::   :: Requirements :    :: perl , pp , win gnu utils tee    :: perl -MCPAN -e "install PAR::Packer"    :: text editor supporting <<textEditor>> <<FileNameToOpen>> cmd call syntax   :::::::   :: VersionHistory   :: 1.0.0 --- 2012-06-23 12:05:45 --- ysg --- Initial creation from run_morphus.cmd   :::::::   :: eof file:compile-morphus.1.2.3.dev.ysg.cmd v1.0.0 
like image 31
Yordan Georgiev Avatar answered Oct 13 '22 22:10

Yordan Georgiev