1*e0680481Safresh1# vim: syntax=pod 2*e0680481Safresh1 3ba47ec9dSmillertIf you read this file _as_is_, just ignore the funny characters you 4ba47ec9dSmillertsee. It is written in the POD format (see pod/perlpod.pod) which is 5ba47ec9dSmillertspecially designed to be readable as is. 6ba47ec9dSmillert 7ba47ec9dSmillert=head1 NAME 8ba47ec9dSmillert 979cd0b9aSmillertperlwin32 - Perl under Windows 10ba47ec9dSmillert 11ba47ec9dSmillert=head1 SYNOPSIS 12ba47ec9dSmillert 13eac174f2Safresh1These are instructions for building Perl under Windows 7 and later. 14ba47ec9dSmillert 15ba47ec9dSmillert=head1 DESCRIPTION 16ba47ec9dSmillert 17ba47ec9dSmillertBefore you start, you should glance through the README file 18c5dcfd37Smillertfound in the top-level directory to which the Perl distribution 19ba47ec9dSmillertwas extracted. Make sure you read and understand the terms under 20ba47ec9dSmillertwhich this software is being distributed. 21ba47ec9dSmillert 229f11ffb7Safresh1Also make sure you read L</BUGS AND CAVEATS> below for the 23ba47ec9dSmillertknown limitations of this port. 24ba47ec9dSmillert 25ba47ec9dSmillertThe INSTALL file in the perl top-level has much information that is 26ba47ec9dSmillertonly relevant to people building Perl on Unix-like systems. In 27ba47ec9dSmillertparticular, you can safely ignore any information that talks about 28ba47ec9dSmillert"Configure". 29ba47ec9dSmillert 3048950c12SsthenYou may also want to look at one other option for building a perl that 3148950c12Ssthenwill work on Windows: the README.cygwin file, which give a different 3248950c12Ssthenset of rules to build a perl for Windows. This method will probably 3348950c12Ssthenenable you to build a more Unix-compatible perl, but you will also 3448950c12Ssthenneed to download and use various other build-time and run-time support 3548950c12Ssthensoftware described in that file. 36ba47ec9dSmillert 37ba47ec9dSmillertThis set of instructions is meant to describe a so-called "native" 3848950c12Ssthenport of Perl to the Windows platform. This includes both 32-bit and 3979cd0b9aSmillert64-bit Windows operating systems. The resulting Perl requires no 40ba47ec9dSmillertadditional software to run (other than what came with your operating 416345ca90Smillertsystem). Currently, this port is capable of using one of the 42eac174f2Safresh1following compilers on the Intel x86 and x86_64 architectures: 436345ca90Smillert 44eac174f2Safresh1 Microsoft Visual C++ version 12.0 or later 45e5157e49Safresh1 Intel C++ Compiler (experimental) 46eac174f2Safresh1 Gcc by mingw.org gcc version 3.4.5-5.3.0 47b8851fccSafresh1 Gcc by mingw-w64.org gcc version 4.4.3 or later 486345ca90Smillert 490dc2eaceSmillertNote that the last two of these are actually competing projects both 500dc2eaceSmillertdelivering complete gcc toolchain for MS Windows: 51ba47ec9dSmillert 5248950c12Ssthen=over 4 5348950c12Ssthen 54eac174f2Safresh1=item L<https://osdn.net/projects/mingw/> 5548950c12Ssthen 56eac174f2Safresh1Delivers gcc toolchain building 32-bit executables (which can be used both 32 and 64 bit Windows platforms) 5748950c12Ssthen 58*e0680481Safresh1=item L<https://mingw-w64.org> 5948950c12Ssthen 6048950c12SsthenDelivers gcc toolchain targeting both 64-bit Windows and 32-bit Windows 6148950c12Ssthenplatforms (despite the project name "mingw-w64" they are not only 64-bit 6248950c12Ssthenoriented). They deliver the native gcc compilers and cross-compilers 6348950c12Ssthenthat are also supported by perl's makefile. 6448950c12Ssthen 6548950c12Ssthen=back 6648950c12Ssthen 67eac174f2Safresh1The Microsoft Visual C++ compilers are also now being given away free. They 68eac174f2Safresh1are available as "Visual C++ 2013-2022 Community Edition" and are the same 69eac174f2Safresh1compilers that ship with "Visual C++ 2013-2022 Professional". 70f3142520Smillert 71eac174f2Safresh1Visual C++ 2013 is capable of B<targeting> XP and Windows Server 2003 but the 72eac174f2Safresh1build host requirement is Windows 7/Windows Server 2012. For more details see 73eac174f2Safresh1https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-compatibility-vs 74eac174f2Safresh1and 75eac174f2Safresh1https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs 7679cd0b9aSmillert 77*e0680481Safresh1The MinGW64 compiler is available at L<https://mingw-w64.org>. 780dc2eaceSmillertThe latter is actually a cross-compiler targeting Win64. There's also a trimmed 790dc2eaceSmillertdown compiler (no java, or gfortran) suitable for building perl available at: 80*e0680481Safresh1L<https://strawberryperl.com/package/kmx/64_gcctoolchain/> 810dc2eaceSmillert 820dc2eaceSmillertNOTE: If you're using a 32-bit compiler to build perl on a 64-bit Windows 830dc2eaceSmillertoperating system, then you should set the WIN64 environment variable to "undef". 840dc2eaceSmillertAlso, the trimmed down compiler only passes tests when USE_ITHREADS *= define 850dc2eaceSmillert(as opposed to undef) and when the CFG *= Debug line is commented out. 8679cd0b9aSmillert 8779cd0b9aSmillertThis port fully supports MakeMaker (the set of modules that 88ba47ec9dSmillertis used to build extensions to perl). Therefore, you should be 89ba47ec9dSmillertable to build and install most extensions found in the CPAN sites. 909f11ffb7Safresh1See L</Usage Hints for Perl on Windows> below for general hints about this. 91ba47ec9dSmillert 9248950c12Ssthen=head2 Setting Up Perl on Windows 93ba47ec9dSmillert 94ba47ec9dSmillert=over 4 95ba47ec9dSmillert 96e2e5c5d3Smillert=item Make 97e2e5c5d3Smillert 98e2e5c5d3SmillertYou need a "make" program to build the sources. If you are using 99eac174f2Safresh1Visual C++, you can use nmake supplied with Visual C++. 100eac174f2Safresh1You may also use gmake instead of nmake. Builds using gcc need 101eac174f2Safresh1gmake. nmake is not supported for gcc builds. Parallel building is only 102eac174f2Safresh1supported with gmake, not nmake. 103e2e5c5d3Smillert 104ba47ec9dSmillert=item Command Shell 105ba47ec9dSmillert 10648950c12SsthenUse the default "cmd" shell that comes with Windows. Some versions of the 1076345ca90Smillertpopular 4DOS/NT shell have incompatibilities that may cause you trouble. 1086345ca90SmillertIf the build fails under that shell, try building again with the cmd 109e2e5c5d3Smillertshell. 110e2e5c5d3Smillert 1116345ca90SmillertMake sure the path to the build directory does not contain spaces. The 1126345ca90Smillertbuild usually works in this circumstance, but some tests will fail. 113ba47ec9dSmillert 114ba47ec9dSmillert=item Microsoft Visual C++ 115ba47ec9dSmillert 11656d68f1eSafresh1The nmake that comes with Visual C++ will suffice for building. Visual C++ 11756d68f1eSafresh1requires that certain things be set up in the console before Visual C++ will 118eac174f2Safresh1successfully run. To make a console box be able to run the C compiler, you will 11956d68f1eSafresh1need to beforehand, run C<vcvarsall.bat x86> to compile for x86-32 and for 12056d68f1eSafresh1x86-64 C<vcvarsall.bat amd64>. On a typical install of a Microsoft C++ 12156d68f1eSafresh1compiler product, these batch files will already be in your C<PATH> 122e9260a21Safresh1environment variable so you may just type them without an absolute path into 123e9260a21Safresh1your console. If you need to find the absolute path to the batch file, it is 12456d68f1eSafresh1usually found somewhere like 12556d68f1eSafresh1C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC. 126eac174f2Safresh1With some newer Microsoft C products (released after ~2004), the installer will 127e9260a21Safresh1put a shortcut in the start menu to launch a new console window with the 128e9260a21Safresh1console already set up for your target architecture (x86-32 or x86-64 or IA64). 129e9260a21Safresh1With the newer compilers, you may also use the older batch files if you choose 130e9260a21Safresh1so. 131ba47ec9dSmillert 132eac174f2Safresh1=item Microsoft Visual C++ 2013-2022 Community Edition 1337bfa9f44Smillert 134eac174f2Safresh1These free versions of Visual C++ 2013-2022 Professional contain the same 13548950c12Ssthencompilers and linkers that ship with the full versions, and also contain 136eac174f2Safresh1everything necessary to build Perl. 1377bfa9f44Smillert 138*e0680481Safresh1These packages can be downloaded from L<https://visualstudio.microsoft.com/>. 1397bfa9f44Smillert 140eac174f2Safresh1Install Visual C++ 2013-2022 Community, then setup your environment 1419f11ffb7Safresh1using, e.g. 1427bfa9f44Smillert 143*e0680481Safresh1F<C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat> 1447bfa9f44Smillert 1457bfa9f44Smillert(assuming the default installation location was chosen). 1467bfa9f44Smillert 147*e0680481Safresh1Perl should now build using the F<win32/Makefile>. You will need to edit that 148*e0680481Safresh1file to set C<CCTYPE> to one of C<MSVC120>-C<MSVC143> first. 149*e0680481Safresh1 150*e0680481Safresh1=item Microsoft C++ Build Tools 151*e0680481Safresh1 152*e0680481Safresh1There's also a standalone (IDE-less) version of the build tools mentioned 153*e0680481Safresh1above containing the MSVC compiler available for download from 154*e0680481Safresh1L<https://visualstudio.microsoft.com/visual-cpp-build-tools/>. 155*e0680481Safresh1 156*e0680481Safresh1This is also referred to as I<Build Tools for Visual Studio>. 15779cd0b9aSmillert 1589f11ffb7Safresh1=item GCC 159ba47ec9dSmillert 1609f11ffb7Safresh1Perl can be compiled with gcc from MinGW (version 3.4.5 or later) or from 1619f11ffb7Safresh1MinGW64 (version 4.4.3 or later). It can be downloaded here: 162ba47ec9dSmillert 163eac174f2Safresh1L<https://osdn.net/projects/mingw/> 164*e0680481Safresh1L<https://www.mingw-w64.org/> 1650dc2eaceSmillert 166eac174f2Safresh1You also need gmake. Usually it comes with MinGW but its executable may have 167eac174f2Safresh1a different name, such as mingw32-make.exe. 168c5dcfd37Smillert 169eac174f2Safresh1Note that the MinGW build currently fails with version 6.3.0 or later. 1709f11ffb7Safresh1 1719f11ffb7Safresh1Note also that the C++ mode build currently fails with MinGW 3.4.5 and 4.7.2 1729f11ffb7Safresh1or later, and with MinGW64 64-bit 6.3.0 or later. 1739f11ffb7Safresh1 174e5157e49Safresh1=item Intel C++ Compiler 175e5157e49Safresh1 176e5157e49Safresh1Experimental support for using Intel C++ Compiler has been added. Edit 177*e0680481Safresh1F<win32/Makefile> and pick the correct C<CCTYPE> for the Visual C that Intel C 178*e0680481Safresh1was installed into. Also uncomment C<__ICC> to enable Intel C on Visual C support. 179b46d8ef2Safresh1To set up the build environment, from the Start Menu run 180e5157e49Safresh1IA-32 Visual Studio 20__ mode or Intel 64 Visual Studio 20__ mode as 181*e0680481Safresh1appropriate. Then run C<nmake> as usual in that prompt box. 182e5157e49Safresh1 183e5157e49Safresh1Only Intel C++ Compiler v12.1 has been tested. Other versions probably will 184b8851fccSafresh1work. Using Intel C++ Compiler instead of Visual C has the benefit of C99 185b8851fccSafresh1compatibility which is needed by some CPAN XS modules, while maintaining 186b8851fccSafresh1compatibility with Visual C object code and Visual C debugging infrastructure 187b8851fccSafresh1unlike GCC. 188e5157e49Safresh1 189ba47ec9dSmillert=back 190ba47ec9dSmillert 191ba47ec9dSmillert=head2 Building 192ba47ec9dSmillert 193ba47ec9dSmillert=over 4 194ba47ec9dSmillert 195ba47ec9dSmillert=item * 196ba47ec9dSmillert 197*e0680481Safresh1Make sure you are in the F<win32> subdirectory under the perl toplevel. 198*e0680481Safresh1This directory contains a F<Makefile> that will work with 199*e0680481Safresh1versions of C<nmake> that come with Visual C++, and 200*e0680481Safresh1a GNU make F<GNUmakefile> that will work for all supported compilers. 201*e0680481Safresh1The defaults in the C<gmake> makefile are set up to build with MinGW/gcc. 202ba47ec9dSmillert 203ba47ec9dSmillert=item * 204ba47ec9dSmillert 205*e0680481Safresh1Edit the F<GNUmakefile> (or F<Makefile>, if you're using F<nmake>) and change 206*e0680481Safresh1the values of I<INST_DRV> and C<INST_TOP>. You can also enable various build 207*e0680481Safresh1flags. These are explained in the makefiles. 2086345ca90Smillert 209*e0680481Safresh1Note that it is generally not a good idea to try to build a C<perl> with 210*e0680481Safresh1C<INST_DRV> and C<INST_TOP> set to a path that already exists from a previous 21104bf48b9Smillertbuild. In particular, this may cause problems with the 212*e0680481Safresh1F<lib/ExtUtils/t/Embed.t> test, which attempts to build a test program and 213*e0680481Safresh1may end up building against the installed C<perl>'s F<lib/CORE> directory 214*e0680481Safresh1rather than the one being tested. 21504bf48b9Smillert 216*e0680481Safresh1You will have to make sure that C<CCTYPE> is set correctly and that 217*e0680481Safresh1C<CCHOME> points to wherever you installed your compiler. For GCC this 218b46d8ef2Safresh1should be the directory that contains the F<bin>, F<include> and 219b46d8ef2Safresh1F<lib> directories. 2200dc2eaceSmillert 2210dc2eaceSmillertIf building with the cross-compiler provided by 222b8851fccSafresh1mingw-w64.org you'll need to uncomment the line that sets 223*e0680481Safresh1C<GCCCROSS> in the F<GNUmakefile>. Do this only if it's the cross-compiler, 224*e0680481Safresh1ie. only if the F<bin> folder doesn't contain a F<gcc.exe>. (The cross-compiler 225*e0680481Safresh1does not provide a F<gcc.exe>, F<g++.exe>, F<ar.exe>, etc. Instead, all of these 226*e0680481Safresh1executables are prefixed with C<x86_64-w64-mingw32->.) 2276345ca90Smillert 228*e0680481Safresh1The default value for C<CCHOME> in the makefiles for Visual C++ 229e2e5c5d3Smillertmay not be correct for some versions. Make sure the default exists 230e2e5c5d3Smillertand is valid. 2316345ca90Smillert 232*e0680481Safresh1If you want build some core extensions statically into C<perl>'s DLL, 233*e0680481Safresh1specify them in the C<STATIC_EXT> macro. 234ad15181aSmillert 235e2e5c5d3SmillertBe sure to read the instructions near the top of the makefiles carefully. 2366345ca90Smillert 237ba47ec9dSmillert=item * 238ba47ec9dSmillert 239*e0680481Safresh1Type C<gmake> (or C<nmake> if you are using that version of C<make>). 240ba47ec9dSmillert 241*e0680481Safresh1This should build everything. Specifically, it will create F<perl.exe>, 242*e0680481Safresh1F<perl538.dll> at the perl toplevel, and various other extension DLL's 243*e0680481Safresh1under the F<lib\auto> directory. If the build fails for any reason, make 244e2e5c5d3Smillertsure you have done the previous steps correctly. 245ba47ec9dSmillert 246*e0680481Safresh1To try C<gmake>'s parallel mode, type C<gmake -j2> where C<2> is the maximum number 247b8851fccSafresh1of parallel jobs you want to run. A number of things in the build process will 248b8851fccSafresh1run in parallel, but there are serialization points where you will see just 1 249b8851fccSafresh1CPU maxed out. This is normal. 250b8851fccSafresh1 251e9260a21Safresh1If you are advanced enough with building C code, here is a suggestion to speed 252*e0680481Safresh1up building C<perl>, and the later C<make test>. Try to keep your C<PATH> environment 253e9260a21Safresh1variable with the least number of folders possible (remember to keep your C 254*e0680481Safresh1compiler's folders there). F<C:\WINDOWS\system32> or F<C:\WINNT\system32> 255*e0680481Safresh1depending on your OS version should be first folder in C<PATH>, since C<cmd.exe> 256e9260a21Safresh1is the most commonly launched program during the build and later testing. 257e9260a21Safresh1 258ba47ec9dSmillert=back 259ba47ec9dSmillert 26048950c12Ssthen=head2 Testing Perl on Windows 261ba47ec9dSmillert 262eac174f2Safresh1Type "gmake test" (or "nmake test"). This will run most 263b46d8ef2Safresh1of the tests from the testsuite (many tests will be skipped). 264ba47ec9dSmillert 26548950c12SsthenThere should be no test failures. 266e2e5c5d3Smillert 267e5157e49Safresh1If you build with Visual C++ 2013 then three tests currently may fail with 268e5157e49Safresh1Daylight Saving Time related problems: F<t/io/fs.t>, 269b8851fccSafresh1F<cpan/HTTP-Tiny/t/110_mirror.t> and F<lib/File/Copy.t>. The failures are 2709f11ffb7Safresh1caused by bugs in the CRT in VC++ 2013 which are fixed in VC++2015 and 2719f11ffb7Safresh1later, as explained by Microsoft here: 272e5157e49Safresh1L<https://connect.microsoft.com/VisualStudio/feedback/details/811534/utime-sometimes-fails-to-set-the-correct-file-times-in-visual-c-2013>. In the meantime, 273e5157e49Safresh1if you need fixed C<stat> and C<utime> functions then have a look at the 274e5157e49Safresh1CPAN distribution Win32::UTCFileTime. 275e5157e49Safresh1 276b46d8ef2Safresh1If you build with Visual C++ 2015 or later then F<ext/XS-APItest/t/locale.t> 277b46d8ef2Safresh1may crash (after all its tests have passed). This is due to a regression in the 278b46d8ef2Safresh1Universal CRT introduced in the Windows 10 April 2018 Update, and will be fixed 279b46d8ef2Safresh1in the May 2019 Update, as explained here: L<https://developercommunity.visualstudio.com/content/problem/519486/setlocalelc-numeric-iso-latin-16-fails-then-succee.html>. 280b46d8ef2Safresh1 281eac174f2Safresh1If you build with certain versions (e.g. 4.8.1) of gcc from mingw then 282e5157e49Safresh1F<ext/POSIX/t/time.t> may fail test 17 due to a known bug in those gcc builds: 28356d68f1eSafresh1see L<https://sourceforge.net/p/mingw/bugs/2152/>. 284e5157e49Safresh1 285e2e5c5d3SmillertSome test failures may occur if you use a command shell other than the 286e2e5c5d3Smillertnative "cmd.exe", or if you are building from a path that contains 287e2e5c5d3Smillertspaces. So don't do that. 288ba47ec9dSmillert 2896345ca90SmillertIf you are running the tests from a emacs shell window, you may see 290eac174f2Safresh1failures in op/stat.t. Run "gmake test-notty" in that case. 2916345ca90Smillert 29279cd0b9aSmillertFurthermore, you should make sure that during C<make test> you do not 29379cd0b9aSmillerthave any GNU tool packages in your path: some toolkits like Unixutils 29479cd0b9aSmillertinclude some tools (C<type> for instance) which override the Windows 29579cd0b9aSmillertones and makes tests fail. Remove them from your path while testing to 29679cd0b9aSmillertavoid these errors. 29779cd0b9aSmillert 298b46d8ef2Safresh1To see the output of specific failing tests run the harness from the t 299b46d8ef2Safresh1directory: 300b46d8ef2Safresh1 301b46d8ef2Safresh1 # assuming you're starting from the win32 directory 302b46d8ef2Safresh1 cd ..\win32 303b46d8ef2Safresh1 .\perl harness <list of tests> 304b46d8ef2Safresh1 3059f11ffb7Safresh1Please report any other failures as described under L</BUGS AND CAVEATS>. 306ba47ec9dSmillert 30748950c12Ssthen=head2 Installation of Perl on Windows 308ba47ec9dSmillert 309eac174f2Safresh1Type "gmake install" ("nmake install"). This will 310b46d8ef2Safresh1put the newly built perl and the libraries under whatever C<INST_TOP> 311b46d8ef2Safresh1points to in the Makefile. It will also install the pod documentation 312b46d8ef2Safresh1under C<$INST_TOP\$INST_VER\lib\pod> and HTML versions of the same 313b46d8ef2Safresh1under C<$INST_TOP\$INST_VER\lib\pod\html>. 3146345ca90Smillert 315f3142520SmillertTo use the Perl you just installed you will need to add a new entry to 316f3142520Smillertyour PATH environment variable: C<$INST_TOP\bin>, e.g. 3176345ca90Smillert 318f3142520Smillert set PATH=c:\perl\bin;%PATH% 319e2e5c5d3Smillert 320f3142520SmillertIf you opted to uncomment C<INST_VER> and C<INST_ARCH> in the makefile 321f3142520Smillertthen the installation structure is a little more complicated and you will 322f3142520Smillertneed to add two new PATH components instead: C<$INST_TOP\$INST_VER\bin> and 323f3142520SmillertC<$INST_TOP\$INST_VER\bin\$ARCHNAME>, e.g. 324f3142520Smillert 325f3142520Smillert set PATH=c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH% 326ba47ec9dSmillert 32748950c12Ssthen=head2 Usage Hints for Perl on Windows 328ba47ec9dSmillert 329ba47ec9dSmillert=over 4 330ba47ec9dSmillert 331ba47ec9dSmillert=item Environment Variables 332ba47ec9dSmillert 333ba47ec9dSmillertThe installation paths that you set during the build get compiled 334ba47ec9dSmillertinto perl, so you don't have to do anything additional to start 335ba47ec9dSmillertusing that perl (except add its location to your PATH variable). 336ba47ec9dSmillert 337ba47ec9dSmillertIf you put extensions in unusual places, you can set PERL5LIB 338ba47ec9dSmillertto a list of paths separated by semicolons where you want perl 339ba47ec9dSmillertto look for libraries. Look for descriptions of other environment 3406345ca90Smillertvariables you can set in L<perlrun>. 341ba47ec9dSmillert 3426345ca90SmillertYou can also control the shell that perl uses to run system() and 3436345ca90Smillertbacktick commands via PERL5SHELL. See L<perlrun>. 3446345ca90Smillert 3456345ca90SmillertPerl does not depend on the registry, but it can look up certain default 346b8851fccSafresh1values if you choose to put them there unless disabled at build time with 347b8851fccSafresh1USE_NO_REGISTRY. On Perl process start Perl checks if 348b8851fccSafresh1C<HKEY_CURRENT_USER\Software\Perl> and C<HKEY_LOCAL_MACHINE\Software\Perl> 349b8851fccSafresh1exist. If the keys exists, they will be checked for remainder of the Perl 350b8851fccSafresh1process's run life for certain entries. Entries in 351b8851fccSafresh1C<HKEY_CURRENT_USER\Software\Perl> override entries in 352b8851fccSafresh1C<HKEY_LOCAL_MACHINE\Software\Perl>. One or more of the following entries 353b8851fccSafresh1(of type REG_SZ or REG_EXPAND_SZ) may be set in the keys: 3546345ca90Smillert 355e2e5c5d3Smillert lib-$] version-specific standard library path to add to @INC 356e2e5c5d3Smillert lib standard library path to add to @INC 357e2e5c5d3Smillert sitelib-$] version-specific site library path to add to @INC 358e2e5c5d3Smillert sitelib site library path to add to @INC 359e2e5c5d3Smillert vendorlib-$] version-specific vendor library path to add to @INC 360e2e5c5d3Smillert vendorlib vendor library path to add to @INC 3616345ca90Smillert PERL* fallback for all %ENV lookups that begin with "PERL" 3626345ca90Smillert 3636345ca90SmillertNote the C<$]> in the above is not literal. Substitute whatever version 364e2e5c5d3Smillertof perl you want to honor that entry, e.g. C<5.6.0>. Paths must be 36548950c12Ssthenseparated with semicolons, as usual on Windows. 366ba47ec9dSmillert 367ba47ec9dSmillert=item File Globbing 368ba47ec9dSmillert 369e2e5c5d3SmillertBy default, perl handles file globbing using the File::Glob extension, 370e2e5c5d3Smillertwhich provides portable globbing. 371ba47ec9dSmillert 372e2e5c5d3SmillertIf you want perl to use globbing that emulates the quirks of DOS 373e2e5c5d3Smillertfilename conventions, you might want to consider using File::DosGlob 374e2e5c5d3Smillertto override the internal glob() implementation. See L<File::DosGlob> for 3756345ca90Smillertdetails. 376ba47ec9dSmillert 377ba47ec9dSmillert=item Using perl from the command line 378ba47ec9dSmillert 379ba47ec9dSmillertIf you are accustomed to using perl from various command-line 380ba47ec9dSmillertshells found in UNIX environments, you will be less than pleased 381e2e5c5d3Smillertwith what Windows offers by way of a command shell. 382ba47ec9dSmillert 383c5dcfd37SmillertThe crucial thing to understand about the Windows environment is that 384c5dcfd37Smillertthe command line you type in is processed twice before Perl sees it. 38548950c12SsthenFirst, your command shell (usually CMD.EXE) preprocesses the command 38648950c12Ssthenline, to handle redirection, environment variable expansion, and 38748950c12Ssthenlocation of the executable to run. Then, the perl executable splits 38848950c12Ssthenthe remaining command line into individual arguments, using the 38948950c12SsthenC runtime library upon which Perl was built. 390ba47ec9dSmillert 391c5dcfd37SmillertIt is particularly important to note that neither the shell nor the C 392c5dcfd37Smillertruntime do any wildcard expansions of command-line arguments (so 393c5dcfd37Smillertwildcards need not be quoted). Also, the quoting behaviours of the 394c5dcfd37Smillertshell and the C runtime are rudimentary at best (and may, if you are 395c5dcfd37Smillertusing a non-standard shell, be inconsistent). The only (useful) quote 396c5dcfd37Smillertcharacter is the double quote ("). It can be used to protect spaces 397c5dcfd37Smillertand other special characters in arguments. 398c5dcfd37Smillert 39948950c12SsthenThe Windows documentation describes the shell parsing rules here: 40056d68f1eSafresh1L<https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmd> 40148950c12Ssthenand the C runtime parsing rules here: 40256d68f1eSafresh1L<https://msdn.microsoft.com/en-us/library/17w5ykft%28v=VS.100%29.aspx>. 40348950c12Ssthen 40448950c12SsthenHere are some further observations based on experiments: The C runtime 40548950c12Ssthenbreaks arguments at spaces and passes them to programs in argc/argv. 40648950c12SsthenDouble quotes can be used to prevent arguments with spaces in them from 40748950c12Ssthenbeing split up. You can put a double quote in an argument by escaping 40848950c12Ssthenit with a backslash and enclosing the whole argument within double quotes. 40948950c12SsthenThe backslash and the pair of double quotes surrounding the argument will 41048950c12Ssthenbe stripped by the C runtime. 411c5dcfd37Smillert 412f3142520SmillertThe file redirection characters "E<lt>", "E<gt>", and "|" can be quoted by 413c5dcfd37Smillertdouble quotes (although there are suggestions that this may not always 414c5dcfd37Smillertbe true). Single quotes are not treated as quotes by the shell or 415c5dcfd37Smillertthe C runtime, they don't get stripped by the shell (just to make 416c5dcfd37Smillertthis type of quoting completely useless). The caret "^" has also 417c5dcfd37Smillertbeen observed to behave as a quoting character, but this appears 418c5dcfd37Smillertto be a shell feature, and the caret is not stripped from the command 419c5dcfd37Smillertline, so Perl still sees it (and the C runtime phase does not treat 420c5dcfd37Smillertthe caret as a quote character). 421ba47ec9dSmillert 422ba47ec9dSmillertHere are some examples of usage of the "cmd" shell: 423ba47ec9dSmillert 424ba47ec9dSmillertThis prints two doublequotes: 425ba47ec9dSmillert 426ba47ec9dSmillert perl -e "print '\"\"' " 427ba47ec9dSmillert 428ba47ec9dSmillertThis does the same: 429ba47ec9dSmillert 430ba47ec9dSmillert perl -e "print \"\\\"\\\"\" " 431ba47ec9dSmillert 432ba47ec9dSmillertThis prints "bar" and writes "foo" to the file "blurch": 433ba47ec9dSmillert 434ba47ec9dSmillert perl -e "print 'foo'; print STDERR 'bar'" > blurch 435ba47ec9dSmillert 436ba47ec9dSmillertThis prints "foo" ("bar" disappears into nowhereland): 437ba47ec9dSmillert 438ba47ec9dSmillert perl -e "print 'foo'; print STDERR 'bar'" 2> nul 439ba47ec9dSmillert 440ba47ec9dSmillertThis prints "bar" and writes "foo" into the file "blurch": 441ba47ec9dSmillert 442ba47ec9dSmillert perl -e "print 'foo'; print STDERR 'bar'" 1> blurch 443ba47ec9dSmillert 444ba47ec9dSmillertThis pipes "foo" to the "less" pager and prints "bar" on the console: 445ba47ec9dSmillert 446ba47ec9dSmillert perl -e "print 'foo'; print STDERR 'bar'" | less 447ba47ec9dSmillert 448ba47ec9dSmillertThis pipes "foo\nbar\n" to the less pager: 449ba47ec9dSmillert 450ba47ec9dSmillert perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less 451ba47ec9dSmillert 452ba47ec9dSmillertThis pipes "foo" to the pager and writes "bar" in the file "blurch": 453ba47ec9dSmillert 454ba47ec9dSmillert perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less 455ba47ec9dSmillert 456ba47ec9dSmillert 457e2e5c5d3SmillertDiscovering the usefulness of the "command.com" shell on Windows 9x 458ba47ec9dSmillertis left as an exercise to the reader :) 459ba47ec9dSmillert 460c5dcfd37SmillertOne particularly pernicious problem with the 4NT command shell for 46148950c12SsthenWindows is that it (nearly) always treats a % character as indicating 462c5dcfd37Smillertthat environment variable expansion is needed. Under this shell, it is 463c5dcfd37Smillerttherefore important to always double any % characters which you want 464c5dcfd37SmillertPerl to see (for example, for hash variables), even when they are 465c5dcfd37Smillertquoted. 466c5dcfd37Smillert 467ba47ec9dSmillert=item Building Extensions 468ba47ec9dSmillert 469ba47ec9dSmillertThe Comprehensive Perl Archive Network (CPAN) offers a wealth 470ba47ec9dSmillertof extensions, some of which require a C compiler to build. 47156d68f1eSafresh1Look in L<https://www.cpan.org/> for more information on CPAN. 472e2e5c5d3Smillert 473e2e5c5d3SmillertNote that not all of the extensions available from CPAN may work 47448950c12Ssthenin the Windows environment; you should check the information at 47556d68f1eSafresh1L<https://www.cpantesters.org/> before investing too much effort into 476e2e5c5d3Smillertporting modules that don't readily build. 477ba47ec9dSmillert 478ba47ec9dSmillertMost extensions (whether they require a C compiler or not) can 479ba47ec9dSmillertbe built, tested and installed with the standard mantra: 480ba47ec9dSmillert 481ba47ec9dSmillert perl Makefile.PL 482ba47ec9dSmillert $MAKE 483ba47ec9dSmillert $MAKE test 484ba47ec9dSmillert $MAKE install 485ba47ec9dSmillert 4866345ca90Smillertwhere $MAKE is whatever 'make' program you have configured perl to 4876345ca90Smillertuse. Use "perl -V:make" to find out what this is. Some extensions 488c5dcfd37Smillertmay not provide a testsuite (so "$MAKE test" may not do anything or 4896345ca90Smillertfail), but most serious ones do. 4906345ca90Smillert 4916345ca90SmillertIt is important that you use a supported 'make' program, and 492eac174f2Safresh1ensure Config.pm knows about it. 4936345ca90Smillert 4946345ca90SmillertNote that MakeMaker actually emits makefiles with different syntax 4956345ca90Smillertdepending on what 'make' it thinks you are using. Therefore, it is 4966345ca90Smillertimportant that one of the following values appears in Config.pm: 4976345ca90Smillert 4986345ca90Smillert make='nmake' # MakeMaker emits nmake syntax 4996345ca90Smillert any other value # MakeMaker emits generic make syntax 5006345ca90Smillert (e.g GNU make, or Perl make) 5016345ca90Smillert 5026345ca90SmillertIf the value doesn't match the 'make' program you want to use, 5036345ca90Smillertedit Config.pm to fix it. 504ba47ec9dSmillert 505ba47ec9dSmillertIf a module implements XSUBs, you will need one of the supported 506ba47ec9dSmillertC compilers. You must make sure you have set up the environment for 507e9260a21Safresh1the compiler for command-line compilation before running C<perl Makefile.PL> 508e9260a21Safresh1or any invocation of make. 509ba47ec9dSmillert 510ba47ec9dSmillertIf a module does not build for some reason, look carefully for 511ba47ec9dSmillertwhy it failed, and report problems to the module author. If 512ba47ec9dSmillertit looks like the extension building support is at fault, report 51398dafc01Safresh1that with full details of how the build failed using the GitHub 51498dafc01Safresh1issue tracker at L<https://github.com/Perl/perl5/issues>. 515ba47ec9dSmillert 5166345ca90Smillert=item Command-line Wildcard Expansion 5176345ca90Smillert 5186345ca90SmillertThe default command shells on DOS descendant operating systems (such 5196345ca90Smillertas they are) usually do not expand wildcard arguments supplied to 5206345ca90Smillertprograms. They consider it the application's job to handle that. 5216345ca90SmillertThis is commonly achieved by linking the application (in our case, 5226345ca90Smillertperl) with startup code that the C runtime libraries usually provide. 5236345ca90SmillertHowever, doing that results in incompatible perl versions (since the 5246345ca90Smillertbehavior of the argv expansion code differs depending on the 5256345ca90Smillertcompiler, and it is even buggy on some compilers). Besides, it may 5266345ca90Smillertbe a source of frustration if you use such a perl binary with an 5276345ca90Smillertalternate shell that *does* expand wildcards. 5286345ca90Smillert 5296345ca90SmillertInstead, the following solution works rather well. The nice things 530c5dcfd37Smillertabout it are 1) you can start using it right away; 2) it is more 531c5dcfd37Smillertpowerful, because it will do the right thing with a pattern like 532c5dcfd37Smillert*/*/*.c; 3) you can decide whether you do/don't want to use it; and 533c5dcfd37Smillert4) you can extend the method to add any customizations (or even 534c5dcfd37Smillertentirely different kinds of wildcard expansion). 5356345ca90Smillert 5366345ca90Smillert C:\> copy con c:\perl\lib\Wild.pm 5376345ca90Smillert # Wild.pm - emulate shell @ARGV expansion on shells that don't 5386345ca90Smillert use File::DosGlob; 5396345ca90Smillert @ARGV = map { 5406345ca90Smillert my @g = File::DosGlob::glob($_) if /[*?]/; 5416345ca90Smillert @g ? @g : $_; 5426345ca90Smillert } @ARGV; 5436345ca90Smillert 1; 5446345ca90Smillert ^Z 5456345ca90Smillert C:\> set PERL5OPT=-MWild 5466345ca90Smillert C:\> perl -le "for (@ARGV) { print }" */*/perl*.c 5476345ca90Smillert p4view/perl/perl.c 5486345ca90Smillert p4view/perl/perlio.c 5496345ca90Smillert p4view/perl/perly.c 5506345ca90Smillert perl5.005/win32/perlglob.c 5516345ca90Smillert perl5.005/win32/perllib.c 5526345ca90Smillert perl5.005/win32/perlglob.c 5536345ca90Smillert perl5.005/win32/perllib.c 5546345ca90Smillert perl5.005/win32/perlglob.c 5556345ca90Smillert perl5.005/win32/perllib.c 5566345ca90Smillert 5576345ca90SmillertNote there are two distinct steps there: 1) You'll have to create 5586345ca90SmillertWild.pm and put it in your perl lib directory. 2) You'll need to 5596345ca90Smillertset the PERL5OPT environment variable. If you want argv expansion 5606345ca90Smillertto be the default, just set PERL5OPT in your default startup 5616345ca90Smillertenvironment. 5626345ca90Smillert 5636345ca90SmillertIf you are using the Visual C compiler, you can get the C runtime's 5646345ca90Smillertcommand line wildcard expansion built into perl binary. The resulting 5656345ca90Smillertbinary will always expand unquoted command lines, which may not be 5666345ca90Smillertwhat you want if you use a shell that does that for you. The expansion 5676345ca90Smillertdone is also somewhat less powerful than the approach suggested above. 5686345ca90Smillert 56979cd0b9aSmillert=item Notes on 64-bit Windows 57079cd0b9aSmillert 57179cd0b9aSmillertWindows .NET Server supports the LLP64 data model on the Intel Itanium 57279cd0b9aSmillertarchitecture. 57379cd0b9aSmillert 57479cd0b9aSmillertThe LLP64 data model is different from the LP64 data model that is the 57579cd0b9aSmillertnorm on 64-bit Unix platforms. In the former, C<int> and C<long> are 57679cd0b9aSmillertboth 32-bit data types, while pointers are 64 bits wide. In addition, 57779cd0b9aSmillertthere is a separate 64-bit wide integral type, C<__int64>. In contrast, 57879cd0b9aSmillertthe LP64 data model that is pervasive on Unix platforms provides C<int> 57979cd0b9aSmillertas the 32-bit type, while both the C<long> type and pointers are of 58079cd0b9aSmillert64-bit precision. Note that both models provide for 64-bits of 58179cd0b9aSmillertaddressability. 58279cd0b9aSmillert 58379cd0b9aSmillert64-bit Windows running on Itanium is capable of running 32-bit x86 58479cd0b9aSmillertbinaries transparently. This means that you could use a 32-bit build 58579cd0b9aSmillertof Perl on a 64-bit system. Given this, why would one want to build 58679cd0b9aSmillerta 64-bit build of Perl? Here are some reasons why you would bother: 58779cd0b9aSmillert 588f3142520Smillert=over 589f3142520Smillert 59079cd0b9aSmillert=item * 59179cd0b9aSmillert 59279cd0b9aSmillertA 64-bit native application will run much more efficiently on 59379cd0b9aSmillertItanium hardware. 59479cd0b9aSmillert 59579cd0b9aSmillert=item * 59679cd0b9aSmillert 59779cd0b9aSmillertThere is no 2GB limit on process size. 59879cd0b9aSmillert 59979cd0b9aSmillert=item * 60079cd0b9aSmillert 60179cd0b9aSmillertPerl automatically provides large file support when built under 60279cd0b9aSmillert64-bit Windows. 60379cd0b9aSmillert 60479cd0b9aSmillert=item * 60579cd0b9aSmillert 60679cd0b9aSmillertEmbedding Perl inside a 64-bit application. 60779cd0b9aSmillert 60879cd0b9aSmillert=back 60979cd0b9aSmillert 610f3142520Smillert=back 611f3142520Smillert 61279cd0b9aSmillert=head2 Running Perl Scripts 613ba47ec9dSmillert 614ba47ec9dSmillertPerl scripts on UNIX use the "#!" (a.k.a "shebang") line to 615ba47ec9dSmillertindicate to the OS that it should execute the file using perl. 61648950c12SsthenWindows has no comparable means to indicate arbitrary files are 617ba47ec9dSmillertexecutables. 618ba47ec9dSmillert 619ba47ec9dSmillertInstead, all available methods to execute plain text files on 62048950c12SsthenWindows rely on the file "extension". There are three methods 621ba47ec9dSmillertto use this to execute perl scripts: 622ba47ec9dSmillert 623ba47ec9dSmillert=over 8 624ba47ec9dSmillert 625ba47ec9dSmillert=item 1 626ba47ec9dSmillert 62748950c12SsthenThere is a facility called "file extension associations". This can be 62848950c12Ssthenmanipulated via the two commands "assoc" and "ftype" that come 62948950c12Ssthenstandard with Windows. Type "ftype /?" for a complete example of how 63048950c12Ssthento set this up for perl scripts (Say what? You thought Windows 63148950c12Ssthenwasn't perl-ready? :). 632ba47ec9dSmillert 633ba47ec9dSmillert=item 2 634ba47ec9dSmillert 635ba47ec9dSmillertSince file associations don't work everywhere, and there are 636ba47ec9dSmillertreportedly bugs with file associations where it does work, the 637ba47ec9dSmillertold method of wrapping the perl script to make it look like a 638ba47ec9dSmillertregular batch file to the OS, may be used. The install process 639ba47ec9dSmillertmakes available the "pl2bat.bat" script which can be used to wrap 640ba47ec9dSmillertperl scripts into batch files. For example: 641ba47ec9dSmillert 642ba47ec9dSmillert pl2bat foo.pl 643ba47ec9dSmillert 644ba47ec9dSmillertwill create the file "FOO.BAT". Note "pl2bat" strips any 645ba47ec9dSmillert.pl suffix and adds a .bat suffix to the generated file. 646ba47ec9dSmillert 647ba47ec9dSmillertIf you use the 4DOS/NT or similar command shell, note that 648ba47ec9dSmillert"pl2bat" uses the "%*" variable in the generated batch file to 649ba47ec9dSmillertrefer to all the command line arguments, so you may need to make 650ba47ec9dSmillertsure that construct works in batch files. As of this writing, 651ba47ec9dSmillert4DOS/NT users will need a "ParameterChar = *" statement in their 652c5dcfd37Smillert4NT.INI file or will need to execute "setdos /p*" in the 4DOS/NT 653ba47ec9dSmillertstartup file to enable this to work. 654ba47ec9dSmillert 655ba47ec9dSmillert=item 3 656ba47ec9dSmillert 657ba47ec9dSmillertUsing "pl2bat" has a few problems: the file name gets changed, 658ba47ec9dSmillertso scripts that rely on C<$0> to find what they must do may not 659ba47ec9dSmillertrun properly; running "pl2bat" replicates the contents of the 660ba47ec9dSmillertoriginal script, and so this process can be maintenance intensive 661ba47ec9dSmillertif the originals get updated often. A different approach that 662ba47ec9dSmillertavoids both problems is possible. 663ba47ec9dSmillert 664ba47ec9dSmillertA script called "runperl.bat" is available that can be copied 665ba47ec9dSmillertto any filename (along with the .bat suffix). For example, 666ba47ec9dSmillertif you call it "foo.bat", it will run the file "foo" when it is 66748950c12Ssthenexecuted. Since you can run batch files on Windows platforms simply 668ba47ec9dSmillertby typing the name (without the extension), this effectively 669ba47ec9dSmillertruns the file "foo", when you type either "foo" or "foo.bat". 670ba47ec9dSmillertWith this method, "foo.bat" can even be in a different location 671ba47ec9dSmillertthan the file "foo", as long as "foo" is available somewhere on 672ba47ec9dSmillertthe PATH. If your scripts are on a filesystem that allows symbolic 673ba47ec9dSmillertlinks, you can even avoid copying "runperl.bat". 674ba47ec9dSmillert 675ba47ec9dSmillertHere's a diversion: copy "runperl.bat" to "runperl", and type 676ba47ec9dSmillert"runperl". Explain the observed behavior, or lack thereof. :) 677ba47ec9dSmillertHint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH 678ba47ec9dSmillert 679f3142520Smillert=back 680f3142520Smillert 681f3142520Smillert=head2 Miscellaneous Things 682ba47ec9dSmillert 683ba47ec9dSmillertA full set of HTML documentation is installed, so you should be 684ba47ec9dSmillertable to use it if you have a web browser installed on your 685ba47ec9dSmillertsystem. 686ba47ec9dSmillert 687ba47ec9dSmillertC<perldoc> is also a useful tool for browsing information contained 688ba47ec9dSmillertin the documentation, especially in conjunction with a pager 68948950c12Ssthenlike C<less> (recent versions of which have Windows support). You may 690ba47ec9dSmillerthave to set the PAGER environment variable to use a specific pager. 691ba47ec9dSmillert"perldoc -f foo" will print information about the perl operator 692ba47ec9dSmillert"foo". 693ba47ec9dSmillert 694f64b279aSmillertOne common mistake when using this port with a GUI library like C<Tk> 695f64b279aSmillertis assuming that Perl's normal behavior of opening a command-line 696f64b279aSmillertwindow will go away. This isn't the case. If you want to start a copy 697f64b279aSmillertof C<perl> without opening a command-line window, use the C<wperl> 698f64b279aSmillertexecutable built during the installation process. Usage is exactly 69948950c12Ssthenthe same as normal C<perl> on Windows, except that options like C<-h> 700f64b279aSmillertdon't work (since they need a command-line window to print to). 701f64b279aSmillert 70298dafc01Safresh1If you find bugs in perl, you can report them to 70398dafc01Safresh1L<https://github.com/Perl/perl5/issues>. 704ba47ec9dSmillert 705ba47ec9dSmillert=head1 BUGS AND CAVEATS 706ba47ec9dSmillert 70779cd0b9aSmillertNorton AntiVirus interferes with the build process, particularly if 70879cd0b9aSmillertset to "AutoProtect, All Files, when Opened". Unlike large applications 70979cd0b9aSmillertthe perl build process opens and modifies a lot of files. Having the 71056d68f1eSafresh1AntiVirus scan each and every one slows build the process significantly. 71179cd0b9aSmillertWorse, with PERLIO=stdio the build process fails with peculiar messages 71279cd0b9aSmillertas the virus checker interacts badly with miniperl.exe writing configure 71379cd0b9aSmillertfiles (it seems to either catch file part written and treat it as suspicious, 71479cd0b9aSmillertor virus checker may have it "locked" in a way which inhibits miniperl 71579cd0b9aSmillertupdating it). The build does complete with 71679cd0b9aSmillert 71779cd0b9aSmillert set PERLIO=perlio 71879cd0b9aSmillert 71979cd0b9aSmillertbut that may be just luck. Other AntiVirus software may have similar issues. 72079cd0b9aSmillert 721e9260a21Safresh1A git GUI shell extension for Windows such as TortoiseGit will cause the build 722e9260a21Safresh1and later C<make test> to run much slower since every file is checked for its 723e9260a21Safresh1git status as soon as it is created and/or modified. TortoiseGit doesn't cause 724e9260a21Safresh1any test failures or build problems unlike the antivirus software described 725e9260a21Safresh1above, but it does cause similar slowness. It is suggested to use Task Manager 726e9260a21Safresh1to look for background processes which use high CPU amounts during the building 727e9260a21Safresh1process. 728e9260a21Safresh1 729e2e5c5d3SmillertSome of the built-in functions do not act exactly as documented in 730e2e5c5d3SmillertL<perlfunc>, and a few are not implemented at all. To avoid 731e2e5c5d3Smillertsurprises, particularly if you have had prior exposure to Perl 732e2e5c5d3Smillertin other operating environments or if you intend to write code 733f3142520Smillertthat will be portable to other environments, see L<perlport> 734e2e5c5d3Smillertfor a reasonably definitive list of these differences. 735ba47ec9dSmillert 736e2e5c5d3SmillertNot all extensions available from CPAN may build or work properly 73748950c12Ssthenin the Windows environment. See L</"Building Extensions">. 738ba47ec9dSmillert 739e2e5c5d3SmillertMost C<socket()> related calls are supported, but they may not 740e2e5c5d3Smillertbehave as on Unix platforms. See L<perlport> for the full list. 741ba47ec9dSmillert 742ba47ec9dSmillertSignal handling may not behave as on Unix platforms (where it 743ba47ec9dSmillertdoesn't exactly "behave", either :). For instance, calling C<die()> 744ba47ec9dSmillertor C<exit()> from signal handlers will cause an exception, since most 74548950c12Ssthenimplementations of C<signal()> on Windows are severely crippled. 746ba47ec9dSmillertThus, signals may work only for simple things like setting a flag 747ba47ec9dSmillertvariable in the handler. Using signals under this port should 748ba47ec9dSmillertcurrently be considered unsupported. 749ba47ec9dSmillert 75056d68f1eSafresh1Please report detailed descriptions of any problems and solutions that 75156d68f1eSafresh1you may find at E<lt>L<https://github.com/Perl/perl5/issues>E<gt>, 75298dafc01Safresh1along with the output produced by C<perl -V>. 753ba47ec9dSmillert 75404bf48b9Smillert=head1 ACKNOWLEDGEMENTS 75504bf48b9Smillert 75604bf48b9SmillertThe use of a camel with the topic of Perl is a trademark 75704bf48b9Smillertof O'Reilly and Associates, Inc. Used with permission. 75804bf48b9Smillert 759ba47ec9dSmillert=head1 AUTHORS 760ba47ec9dSmillert 761ba47ec9dSmillert=over 4 762ba47ec9dSmillert 763c5dcfd37Smillert=item Gary Ng E<lt>71564.1743@CompuServe.COME<gt> 764ba47ec9dSmillert 765c5dcfd37Smillert=item Gurusamy Sarathy E<lt>gsar@activestate.comE<gt> 766ba47ec9dSmillert 76779cd0b9aSmillert=item Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt> 768ba47ec9dSmillert 769ad15181aSmillert=item Jan Dubois E<lt>jand@activestate.comE<gt> 770ad15181aSmillert 77148950c12Ssthen=item Steve Hay E<lt>steve.m.hay@googlemail.comE<gt> 772ad15181aSmillert 773ba47ec9dSmillert=back 774ba47ec9dSmillert 775ad15181aSmillertThis document is maintained by Jan Dubois. 776ba47ec9dSmillert 777ba47ec9dSmillert=head1 SEE ALSO 778ba47ec9dSmillert 779ba47ec9dSmillertL<perl> 780ba47ec9dSmillert 781ba47ec9dSmillert=head1 HISTORY 782ba47ec9dSmillert 783ba47ec9dSmillertThis port was originally contributed by Gary Ng around 5.003_24, 784ba47ec9dSmillertand borrowed from the Hip Communications port that was available 785e2e5c5d3Smillertat the time. Various people have made numerous and sundry hacks 786e2e5c5d3Smillertsince then. 787ba47ec9dSmillert 7886345ca90SmillertGCC/mingw32 support was added in 5.005 (Nick Ing-Simmons). 7896345ca90Smillert 7906345ca90SmillertSupport for PERL_OBJECT was added in 5.005 (ActiveState Tool Corp). 7916345ca90Smillert 792e2e5c5d3SmillertSupport for fork() emulation was added in 5.6 (ActiveState Tool Corp). 793e2e5c5d3Smillert 794e2e5c5d3SmillertWin9x support was added in 5.6 (Benjamin Stuhl). 795e2e5c5d3Smillert 79679cd0b9aSmillertSupport for 64-bit Windows added in 5.8 (ActiveState Corp). 79779cd0b9aSmillert 798eac174f2Safresh1Last updated: 06 October 2021 799ba47ec9dSmillert 800ba47ec9dSmillert=cut 801