xref: /openbsd/gnu/usr.bin/perl/README.win32 (revision e0680481)
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