This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Promote v5.36 usage and feature bundles doc
[perl5.git] / README.win32
CommitLineData
9baed986
LC
1If you read this file _as_is_, just ignore the funny characters you
2see. It is written in the POD format (see pod/perlpod.pod) which is
3specially designed to be readable as is.
4
5=head1 NAME
6
7perlwin32 - Perl under Windows
8
9=head1 SYNOPSIS
10
4695dc7a 11These are instructions for building Perl under Windows 7 and later.
9baed986
LC
12
13=head1 DESCRIPTION
14
15Before you start, you should glance through the README file
16found in the top-level directory to which the Perl distribution
17was extracted. Make sure you read and understand the terms under
18which this software is being distributed.
19
016af039 20Also make sure you read L</BUGS AND CAVEATS> below for the
9baed986
LC
21known limitations of this port.
22
23The INSTALL file in the perl top-level has much information that is
24only relevant to people building Perl on Unix-like systems. In
25particular, you can safely ignore any information that talks about
26"Configure".
27
b906aaa5
JD
28You may also want to look at one other option for building a perl that
29will work on Windows: the README.cygwin file, which give a different
30set of rules to build a perl for Windows. This method will probably
31enable you to build a more Unix-compatible perl, but you will also
32need to download and use various other build-time and run-time support
33software described in that file.
9baed986
LC
34
35This set of instructions is meant to describe a so-called "native"
b906aaa5 36port of Perl to the Windows platform. This includes both 32-bit and
9baed986
LC
3764-bit Windows operating systems. The resulting Perl requires no
38additional software to run (other than what came with your operating
39system). Currently, this port is capable of using one of the
4695dc7a 40following compilers on the Intel x86 and x86_64 architectures:
9baed986 41
4695dc7a 42 Microsoft Visual C++ version 12.0 or later
a2b08671 43 Intel C++ Compiler (experimental)
341a561f 44 Gcc by mingw.org gcc version 3.4.5-5.3.0
2c3d35a4 45 Gcc by mingw-w64.org gcc version 4.4.3 or later
fa58a56f
S
46
47Note that the last two of these are actually competing projects both
48delivering complete gcc toolchain for MS Windows:
b906aaa5 49
42d76a89
MS
50=over 4
51
4695dc7a 52=item L<https://osdn.net/projects/mingw/>
42d76a89 53
4695dc7a 54Delivers gcc toolchain building 32-bit executables (which can be used both 32 and 64 bit Windows platforms)
b906aaa5 55
2c3d35a4 56=item L<http://mingw-w64.org>
42d76a89
MS
57
58Delivers gcc toolchain targeting both 64-bit Windows and 32-bit Windows
59platforms (despite the project name "mingw-w64" they are not only 64-bit
60oriented). They deliver the native gcc compilers and cross-compilers
61that are also supported by perl's makefile.
62
63=back
9baed986 64
4695dc7a 65The Microsoft Visual C++ compilers are also now being given away free. They
5e4fe298
TK
66are available as "Visual C++ 2013-2022 Community Edition" and are the same
67compilers that ship with "Visual C++ 2013-2022 Professional".
7241fd28 68
4695dc7a
NC
69Visual C++ 2013 is capable of B<targeting> XP and Windows Server 2003 but the
70build host requirement is Windows 7/Windows Server 2012. For more details see
71https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-compatibility-vs
72and
73https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs
9baed986 74
2c3d35a4 75The MinGW64 compiler is available at L<http://mingw-w64.org>.
fa58a56f
S
76The latter is actually a cross-compiler targeting Win64. There's also a trimmed
77down compiler (no java, or gfortran) suitable for building perl available at:
4cef65c2 78L<http://strawberryperl.com/package/kmx/64_gcctoolchain/>
fa58a56f
S
79
80NOTE: If you're using a 32-bit compiler to build perl on a 64-bit Windows
81operating system, then you should set the WIN64 environment variable to "undef".
d774b2d8
CJ
82Also, the trimmed down compiler only passes tests when USE_ITHREADS *= define
83(as opposed to undef) and when the CFG *= Debug line is commented out.
9baed986
LC
84
85This port fully supports MakeMaker (the set of modules that
86is used to build extensions to perl). Therefore, you should be
87able to build and install most extensions found in the CPAN sites.
016af039 88See L</Usage Hints for Perl on Windows> below for general hints about this.
9baed986 89
b906aaa5 90=head2 Setting Up Perl on Windows
9baed986
LC
91
92=over 4
93
94=item Make
95
96You need a "make" program to build the sources. If you are using
eb058c07
SH
97Visual C++, you can use nmake supplied with Visual C++.
98You may also use gmake instead of nmake. Builds using gcc need
76b7a975
TK
99gmake. nmake is not supported for gcc builds. Parallel building is only
100supported with gmake, not nmake.
9baed986 101
9baed986
LC
102=item Command Shell
103
8cbe99e5 104Use the default "cmd" shell that comes with Windows. Some versions of the
9baed986
LC
105popular 4DOS/NT shell have incompatibilities that may cause you trouble.
106If the build fails under that shell, try building again with the cmd
107shell.
108
9baed986
LC
109Make sure the path to the build directory does not contain spaces. The
110build usually works in this circumstance, but some tests will fail.
111
9baed986
LC
112=item Microsoft Visual C++
113
7adf2470
SH
114The nmake that comes with Visual C++ will suffice for building. Visual C++
115requires that certain things be set up in the console before Visual C++ will
f1460a66 116successfully run. To make a console box be able to run the C compiler, you will
7adf2470
SH
117need to beforehand, run C<vcvarsall.bat x86> to compile for x86-32 and for
118x86-64 C<vcvarsall.bat amd64>. On a typical install of a Microsoft C++
119compiler product, these batch files will already be in your C<PATH>
8f5839a9
DD
120environment variable so you may just type them without an absolute path into
121your console. If you need to find the absolute path to the batch file, it is
7adf2470
SH
122usually found somewhere like
123C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC.
f1460a66 124With some newer Microsoft C products (released after ~2004), the installer will
8f5839a9
DD
125put a shortcut in the start menu to launch a new console window with the
126console already set up for your target architecture (x86-32 or x86-64 or IA64).
127With the newer compilers, you may also use the older batch files if you choose
128so.
9baed986 129
5e4fe298 130=item Microsoft Visual C++ 2013-2022 Community Edition
4a3cf07b 131
5e4fe298 132These free versions of Visual C++ 2013-2022 Professional contain the same
2a46176f 133compilers and linkers that ship with the full versions, and also contain
eb058c07 134everything necessary to build Perl.
4a3cf07b 135
2a46176f 136These packages can be downloaded by searching in the Download Center at
71c89d21 137L<https://www.microsoft.com/downloads/search.aspx?displaylang=en>. (Providing exact
cb644b64
SH
138links to these packages has proven a pointless task because the links keep on
139changing so often.)
4a3cf07b 140
5e4fe298 141Install Visual C++ 2013-2022 Community, then setup your environment
d8efeb46 142using, e.g.
4a3cf07b 143
f185f654 144 C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat
4a3cf07b
SH
145
146(assuming the default installation location was chosen).
147
148Perl should now build using the win32/Makefile. You will need to edit that
eb058c07 149file to set CCTYPE to one of MSVC120-MSVC142 first.
9baed986 150
8a217c9a 151=item GCC
9baed986 152
8a217c9a
SH
153Perl can be compiled with gcc from MinGW (version 3.4.5 or later) or from
154MinGW64 (version 4.4.3 or later). It can be downloaded here:
9baed986 155
4695dc7a 156L<https://osdn.net/projects/mingw/>
8a217c9a 157L<http://www.mingw-w64.org/>
7c5b6093 158
76b7a975
TK
159You also need gmake. Usually it comes with MinGW but its executable may have
160a different name, such as mingw32-make.exe.
9baed986 161
341a561f 162Note that the MinGW build currently fails with version 6.3.0 or later.
8a217c9a
SH
163
164Note also that the C++ mode build currently fails with MinGW 3.4.5 and 4.7.2
165or later, and with MinGW64 64-bit 6.3.0 or later.
166
a48cc4c4
DD
167=item Intel C++ Compiler
168
a2b08671
SH
169Experimental support for using Intel C++ Compiler has been added. Edit
170win32/Makefile and pick the correct CCTYPE for the Visual C that Intel C was
171installed into. Also uncomment __ICC to enable Intel C on Visual C support.
ab473f03 172To set up the build environment, from the Start Menu run
a48cc4c4
DD
173IA-32 Visual Studio 20__ mode or Intel 64 Visual Studio 20__ mode as
174appropriate. Then run nmake as usually in that prompt box.
175
176Only Intel C++ Compiler v12.1 has been tested. Other versions probably will
312159d9
DD
177work. Using Intel C++ Compiler instead of Visual C has the benefit of C99
178compatibility which is needed by some CPAN XS modules, while maintaining
179compatibility with Visual C object code and Visual C debugging infrastructure
180unlike GCC.
a48cc4c4 181
9baed986
LC
182=back
183
184=head2 Building
185
186=over 4
187
188=item *
189
190Make sure you are in the "win32" subdirectory under the perl toplevel.
191This directory contains a "Makefile" that will work with
eb058c07 192versions of nmake that come with Visual C++, and
76b7a975
TK
193a GNU make "GNUmakefile" that will work for all supported compilers.
194The defaults in the gmake makefile are setup to build using MinGW/gcc.
9baed986
LC
195
196=item *
197
76b7a975
TK
198Edit the GNUmakefile (or Makefile, if you're using nmake) and change the values
199of INST_DRV and INST_TOP. You can also enable various build flags. These are
200explained in the makefiles.
9baed986 201
2b1846f4
SH
202Note that it is generally not a good idea to try to build a perl with
203INST_DRV and INST_TOP set to a path that already exists from a previous
204build. In particular, this may cause problems with the
205lib/ExtUtils/t/Embed.t test, which attempts to build a test program and
206may end up building against the installed perl's lib/CORE directory rather
207than the one being tested.
208
dbd54a9f 209You will have to make sure that CCTYPE is set correctly and that
8f5d02f0
TC
210CCHOME points to wherever you installed your compiler. For GCC this
211should be the directory that contains the F<bin>, F<include> and
212F<lib> directories.
fa58a56f
S
213
214If building with the cross-compiler provided by
2c3d35a4 215mingw-w64.org you'll need to uncomment the line that sets
76b7a975 216GCCCROSS in the GNUmakefile. Do this only if it's the cross-compiler - ie
fa58a56f
S
217only if the bin folder doesn't contain a gcc.exe. (The cross-compiler
218does not provide a gcc.exe, g++.exe, ar.exe, etc. Instead, all of these
219executables are prefixed with 'x86_64-w64-mingw32-'.)
9baed986
LC
220
221The default value for CCHOME in the makefiles for Visual C++
222may not be correct for some versions. Make sure the default exists
223and is valid.
224
dbd54a9f
VK
225If you want build some core extensions statically into perl's dll, specify
226them in the STATIC_EXT macro.
227
9baed986
LC
228Be sure to read the instructions near the top of the makefiles carefully.
229
230=item *
231
76b7a975 232Type "gmake" (or "nmake" if you are using that make).
9baed986
LC
233
234This should build everything. Specifically, it will create perl.exe,
e0fe22bd 235perl537.dll at the perl toplevel, and various other extension dll's
9baed986
LC
236under the lib\auto directory. If the build fails for any reason, make
237sure you have done the previous steps correctly.
238
76b7a975 239To try gmake's parallel mode, type "gmake -j2", where 2, is the maximum number
3bdc51af
DD
240of parallel jobs you want to run. A number of things in the build process will
241run in parallel, but there are serialization points where you will see just 1
242CPU maxed out. This is normal.
243
8f5839a9 244If you are advanced enough with building C code, here is a suggestion to speed
ab473f03 245up building perl, and the later C<make test>. Try to keep your PATH environmental
8f5839a9
DD
246variable with the least number of folders possible (remember to keep your C
247compiler's folders there). C<C:\WINDOWS\system32> or C<C:\WINNT\system32>
248depending on your OS version should be first folder in PATH, since "cmd.exe"
249is the most commonly launched program during the build and later testing.
250
9baed986
LC
251=back
252
b906aaa5 253=head2 Testing Perl on Windows
9baed986 254
76b7a975 255Type "gmake test" (or "nmake test"). This will run most
15f42aa0 256of the tests from the testsuite (many tests will be skipped).
9baed986 257
b906aaa5 258There should be no test failures.
9baed986 259
ea5eb3d3
SH
260If you build with Visual C++ 2013 then three tests currently may fail with
261Daylight Saving Time related problems: F<t/io/fs.t>,
cb0ee57a 262F<cpan/HTTP-Tiny/t/110_mirror.t> and F<lib/File/Copy.t>. The failures are
1f664ef5
SH
263caused by bugs in the CRT in VC++ 2013 which are fixed in VC++2015 and
264later, as explained by Microsoft here:
78add018
SH
265L<https://connect.microsoft.com/VisualStudio/feedback/details/811534/utime-sometimes-fails-to-set-the-correct-file-times-in-visual-c-2013>. In the meantime,
266if you need fixed C<stat> and C<utime> functions then have a look at the
267CPAN distribution Win32::UTCFileTime.
3e7c2d43 268
a8325b42 269If you build with Visual C++ 2015 or later then F<ext/XS-APItest/t/locale.t>
71153651
SH
270may crash (after all its tests have passed). This is due to a regression in the
271Universal CRT introduced in the Windows 10 April 2018 Update, and will be fixed
272in the May 2019 Update, as explained here: L<https://developercommunity.visualstudio.com/content/problem/519486/setlocalelc-numeric-iso-latin-16-fails-then-succee.html>.
a8325b42 273
4695dc7a 274If you build with certain versions (e.g. 4.8.1) of gcc from mingw then
80ccccdf 275F<ext/POSIX/t/time.t> may fail test 17 due to a known bug in those gcc builds:
71c89d21 276see L<https://sourceforge.net/p/mingw/bugs/2152/>.
80ccccdf 277
9baed986
LC
278Some test failures may occur if you use a command shell other than the
279native "cmd.exe", or if you are building from a path that contains
280spaces. So don't do that.
281
282If you are running the tests from a emacs shell window, you may see
76b7a975 283failures in op/stat.t. Run "gmake test-notty" in that case.
9baed986 284
a6a21311
PEE
285Furthermore, you should make sure that during C<make test> you do not
286have any GNU tool packages in your path: some toolkits like Unixutils
287include some tools (C<type> for instance) which override the Windows
288ones and makes tests fail. Remove them from your path while testing to
289avoid these errors.
290
a1f354d3
TC
291To see the output of specific failing tests run the harness from the t
292directory:
293
294 # assuming you're starting from the win32 directory
295 cd ..\win32
296 .\perl harness <list of tests>
297
016af039 298Please report any other failures as described under L</BUGS AND CAVEATS>.
9baed986 299
b906aaa5 300=head2 Installation of Perl on Windows
9baed986 301
76b7a975 302Type "gmake install" ("nmake install"). This will
15f42aa0
TC
303put the newly built perl and the libraries under whatever C<INST_TOP>
304points to in the Makefile. It will also install the pod documentation
305under C<$INST_TOP\$INST_VER\lib\pod> and HTML versions of the same
306under C<$INST_TOP\$INST_VER\lib\pod\html>.
9baed986 307
00808b83
SH
308To use the Perl you just installed you will need to add a new entry to
309your PATH environment variable: C<$INST_TOP\bin>, e.g.
9baed986 310
00808b83 311 set PATH=c:\perl\bin;%PATH%
9baed986 312
00808b83
SH
313If you opted to uncomment C<INST_VER> and C<INST_ARCH> in the makefile
314then the installation structure is a little more complicated and you will
315need to add two new PATH components instead: C<$INST_TOP\$INST_VER\bin> and
316C<$INST_TOP\$INST_VER\bin\$ARCHNAME>, e.g.
317
318 set PATH=c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH%
9baed986 319
b906aaa5 320=head2 Usage Hints for Perl on Windows
9baed986
LC
321
322=over 4
323
324=item Environment Variables
325
326The installation paths that you set during the build get compiled
327into perl, so you don't have to do anything additional to start
328using that perl (except add its location to your PATH variable).
329
330If you put extensions in unusual places, you can set PERL5LIB
331to a list of paths separated by semicolons where you want perl
332to look for libraries. Look for descriptions of other environment
333variables you can set in L<perlrun>.
334
335You can also control the shell that perl uses to run system() and
336backtick commands via PERL5SHELL. See L<perlrun>.
337
338Perl does not depend on the registry, but it can look up certain default
6937817d
DD
339values if you choose to put them there unless disabled at build time with
340USE_NO_REGISTRY. On Perl process start Perl checks if
0517ed38
DD
341C<HKEY_CURRENT_USER\Software\Perl> and C<HKEY_LOCAL_MACHINE\Software\Perl>
342exist. If the keys exists, they will be checked for remainder of the Perl
343process's run life for certain entries. Entries in
344C<HKEY_CURRENT_USER\Software\Perl> override entries in
345C<HKEY_LOCAL_MACHINE\Software\Perl>. One or more of the following entries
346(of type REG_SZ or REG_EXPAND_SZ) may be set in the keys:
9baed986 347
f185f654
KW
348 lib-$] version-specific standard library path to add to @INC
349 lib standard library path to add to @INC
350 sitelib-$] version-specific site library path to add to @INC
351 sitelib site library path to add to @INC
352 vendorlib-$] version-specific vendor library path to add to @INC
353 vendorlib vendor library path to add to @INC
354 PERL* fallback for all %ENV lookups that begin with "PERL"
9baed986
LC
355
356Note the C<$]> in the above is not literal. Substitute whatever version
357of perl you want to honor that entry, e.g. C<5.6.0>. Paths must be
b906aaa5 358separated with semicolons, as usual on Windows.
9baed986
LC
359
360=item File Globbing
361
362By default, perl handles file globbing using the File::Glob extension,
363which provides portable globbing.
364
365If you want perl to use globbing that emulates the quirks of DOS
366filename conventions, you might want to consider using File::DosGlob
367to override the internal glob() implementation. See L<File::DosGlob> for
368details.
369
370=item Using perl from the command line
371
372If you are accustomed to using perl from various command-line
373shells found in UNIX environments, you will be less than pleased
374with what Windows offers by way of a command shell.
375
376The crucial thing to understand about the Windows environment is that
377the command line you type in is processed twice before Perl sees it.
8cbe99e5
JD
378First, your command shell (usually CMD.EXE) preprocesses the command
379line, to handle redirection, environment variable expansion, and
380location of the executable to run. Then, the perl executable splits
381the remaining command line into individual arguments, using the
382C runtime library upon which Perl was built.
9baed986
LC
383
384It is particularly important to note that neither the shell nor the C
385runtime do any wildcard expansions of command-line arguments (so
386wildcards need not be quoted). Also, the quoting behaviours of the
387shell and the C runtime are rudimentary at best (and may, if you are
388using a non-standard shell, be inconsistent). The only (useful) quote
389character is the double quote ("). It can be used to protect spaces
390and other special characters in arguments.
391
41bfb3b6 392The Windows documentation describes the shell parsing rules here:
c1bde759 393L<https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmd>
41bfb3b6 394and the C runtime parsing rules here:
71c89d21 395L<https://msdn.microsoft.com/en-us/library/17w5ykft%28v=VS.100%29.aspx>.
41bfb3b6
SH
396
397Here are some further observations based on experiments: The C runtime
398breaks arguments at spaces and passes them to programs in argc/argv.
399Double quotes can be used to prevent arguments with spaces in them from
400being split up. You can put a double quote in an argument by escaping
401it with a backslash and enclosing the whole argument within double quotes.
402The backslash and the pair of double quotes surrounding the argument will
403be stripped by the C runtime.
9baed986 404
00808b83 405The file redirection characters "E<lt>", "E<gt>", and "|" can be quoted by
9baed986
LC
406double quotes (although there are suggestions that this may not always
407be true). Single quotes are not treated as quotes by the shell or
408the C runtime, they don't get stripped by the shell (just to make
409this type of quoting completely useless). The caret "^" has also
410been observed to behave as a quoting character, but this appears
411to be a shell feature, and the caret is not stripped from the command
412line, so Perl still sees it (and the C runtime phase does not treat
413the caret as a quote character).
414
415Here are some examples of usage of the "cmd" shell:
416
417This prints two doublequotes:
418
419 perl -e "print '\"\"' "
420
421This does the same:
422
423 perl -e "print \"\\\"\\\"\" "
424
425This prints "bar" and writes "foo" to the file "blurch":
426
427 perl -e "print 'foo'; print STDERR 'bar'" > blurch
428
429This prints "foo" ("bar" disappears into nowhereland):
430
431 perl -e "print 'foo'; print STDERR 'bar'" 2> nul
432
433This prints "bar" and writes "foo" into the file "blurch":
434
435 perl -e "print 'foo'; print STDERR 'bar'" 1> blurch
436
437This pipes "foo" to the "less" pager and prints "bar" on the console:
438
439 perl -e "print 'foo'; print STDERR 'bar'" | less
440
441This pipes "foo\nbar\n" to the less pager:
442
443 perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less
444
445This pipes "foo" to the pager and writes "bar" in the file "blurch":
446
447 perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less
448
449
450Discovering the usefulness of the "command.com" shell on Windows 9x
451is left as an exercise to the reader :)
452
453One particularly pernicious problem with the 4NT command shell for
8cbe99e5 454Windows is that it (nearly) always treats a % character as indicating
9baed986
LC
455that environment variable expansion is needed. Under this shell, it is
456therefore important to always double any % characters which you want
457Perl to see (for example, for hash variables), even when they are
458quoted.
459
460=item Building Extensions
461
462The Comprehensive Perl Archive Network (CPAN) offers a wealth
463of extensions, some of which require a C compiler to build.
71c89d21 464Look in L<https://www.cpan.org/> for more information on CPAN.
9baed986
LC
465
466Note that not all of the extensions available from CPAN may work
b906aaa5 467in the Windows environment; you should check the information at
71c89d21 468L<https://www.cpantesters.org/> before investing too much effort into
9baed986
LC
469porting modules that don't readily build.
470
471Most extensions (whether they require a C compiler or not) can
472be built, tested and installed with the standard mantra:
473
474 perl Makefile.PL
475 $MAKE
476 $MAKE test
477 $MAKE install
478
479where $MAKE is whatever 'make' program you have configured perl to
480use. Use "perl -V:make" to find out what this is. Some extensions
481may not provide a testsuite (so "$MAKE test" may not do anything or
482fail), but most serious ones do.
483
484It is important that you use a supported 'make' program, and
76b7a975 485ensure Config.pm knows about it.
9baed986
LC
486
487Note that MakeMaker actually emits makefiles with different syntax
488depending on what 'make' it thinks you are using. Therefore, it is
489important that one of the following values appears in Config.pm:
490
491 make='nmake' # MakeMaker emits nmake syntax
9baed986
LC
492 any other value # MakeMaker emits generic make syntax
493 (e.g GNU make, or Perl make)
494
495If the value doesn't match the 'make' program you want to use,
496edit Config.pm to fix it.
497
498If a module implements XSUBs, you will need one of the supported
499C compilers. You must make sure you have set up the environment for
8f5839a9
DD
500the compiler for command-line compilation before running C<perl Makefile.PL>
501or any invocation of make.
9baed986
LC
502
503If a module does not build for some reason, look carefully for
504why it failed, and report problems to the module author. If
505it looks like the extension building support is at fault, report
8166b4e0
DB
506that with full details of how the build failed using the GitHub
507issue tracker at L<https://github.com/Perl/perl5/issues>.
9baed986
LC
508
509=item Command-line Wildcard Expansion
510
511The default command shells on DOS descendant operating systems (such
512as they are) usually do not expand wildcard arguments supplied to
513programs. They consider it the application's job to handle that.
514This is commonly achieved by linking the application (in our case,
515perl) with startup code that the C runtime libraries usually provide.
516However, doing that results in incompatible perl versions (since the
517behavior of the argv expansion code differs depending on the
518compiler, and it is even buggy on some compilers). Besides, it may
519be a source of frustration if you use such a perl binary with an
520alternate shell that *does* expand wildcards.
521
522Instead, the following solution works rather well. The nice things
dbd54a9f 523about it are 1) you can start using it right away; 2) it is more
9baed986
LC
524powerful, because it will do the right thing with a pattern like
525*/*/*.c; 3) you can decide whether you do/don't want to use it; and
dbd54a9f 5264) you can extend the method to add any customizations (or even
9baed986
LC
527entirely different kinds of wildcard expansion).
528
f185f654
KW
529 C:\> copy con c:\perl\lib\Wild.pm
530 # Wild.pm - emulate shell @ARGV expansion on shells that don't
531 use File::DosGlob;
532 @ARGV = map {
533 my @g = File::DosGlob::glob($_) if /[*?]/;
534 @g ? @g : $_;
535 } @ARGV;
536 1;
537 ^Z
538 C:\> set PERL5OPT=-MWild
539 C:\> perl -le "for (@ARGV) { print }" */*/perl*.c
540 p4view/perl/perl.c
541 p4view/perl/perlio.c
542 p4view/perl/perly.c
543 perl5.005/win32/perlglob.c
544 perl5.005/win32/perllib.c
545 perl5.005/win32/perlglob.c
546 perl5.005/win32/perllib.c
547 perl5.005/win32/perlglob.c
548 perl5.005/win32/perllib.c
9baed986
LC
549
550Note there are two distinct steps there: 1) You'll have to create
551Wild.pm and put it in your perl lib directory. 2) You'll need to
552set the PERL5OPT environment variable. If you want argv expansion
553to be the default, just set PERL5OPT in your default startup
554environment.
555
556If you are using the Visual C compiler, you can get the C runtime's
557command line wildcard expansion built into perl binary. The resulting
558binary will always expand unquoted command lines, which may not be
559what you want if you use a shell that does that for you. The expansion
560done is also somewhat less powerful than the approach suggested above.
561
9baed986
LC
562=item Notes on 64-bit Windows
563
564Windows .NET Server supports the LLP64 data model on the Intel Itanium
565architecture.
566
567The LLP64 data model is different from the LP64 data model that is the
568norm on 64-bit Unix platforms. In the former, C<int> and C<long> are
569both 32-bit data types, while pointers are 64 bits wide. In addition,
570there is a separate 64-bit wide integral type, C<__int64>. In contrast,
571the LP64 data model that is pervasive on Unix platforms provides C<int>
572as the 32-bit type, while both the C<long> type and pointers are of
57364-bit precision. Note that both models provide for 64-bits of
574addressability.
575
57664-bit Windows running on Itanium is capable of running 32-bit x86
577binaries transparently. This means that you could use a 32-bit build
578of Perl on a 64-bit system. Given this, why would one want to build
579a 64-bit build of Perl? Here are some reasons why you would bother:
580
00808b83
SH
581=over
582
9baed986
LC
583=item *
584
585A 64-bit native application will run much more efficiently on
586Itanium hardware.
587
588=item *
589
590There is no 2GB limit on process size.
591
592=item *
593
594Perl automatically provides large file support when built under
59564-bit Windows.
596
597=item *
598
599Embedding Perl inside a 64-bit application.
600
601=back
602
00808b83
SH
603=back
604
9baed986
LC
605=head2 Running Perl Scripts
606
607Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to
608indicate to the OS that it should execute the file using perl.
b906aaa5 609Windows has no comparable means to indicate arbitrary files are
9baed986
LC
610executables.
611
612Instead, all available methods to execute plain text files on
b906aaa5 613Windows rely on the file "extension". There are three methods
9baed986
LC
614to use this to execute perl scripts:
615
616=over 8
617
618=item 1
619
8cbe99e5
JD
620There is a facility called "file extension associations". This can be
621manipulated via the two commands "assoc" and "ftype" that come
622standard with Windows. Type "ftype /?" for a complete example of how
623to set this up for perl scripts (Say what? You thought Windows
624wasn't perl-ready? :).
9baed986
LC
625
626=item 2
627
628Since file associations don't work everywhere, and there are
629reportedly bugs with file associations where it does work, the
630old method of wrapping the perl script to make it look like a
631regular batch file to the OS, may be used. The install process
632makes available the "pl2bat.bat" script which can be used to wrap
633perl scripts into batch files. For example:
634
635 pl2bat foo.pl
636
637will create the file "FOO.BAT". Note "pl2bat" strips any
638.pl suffix and adds a .bat suffix to the generated file.
639
640If you use the 4DOS/NT or similar command shell, note that
641"pl2bat" uses the "%*" variable in the generated batch file to
642refer to all the command line arguments, so you may need to make
643sure that construct works in batch files. As of this writing,
6444DOS/NT users will need a "ParameterChar = *" statement in their
6454NT.INI file or will need to execute "setdos /p*" in the 4DOS/NT
646startup file to enable this to work.
647
648=item 3
649
650Using "pl2bat" has a few problems: the file name gets changed,
651so scripts that rely on C<$0> to find what they must do may not
652run properly; running "pl2bat" replicates the contents of the
653original script, and so this process can be maintenance intensive
654if the originals get updated often. A different approach that
655avoids both problems is possible.
656
657A script called "runperl.bat" is available that can be copied
658to any filename (along with the .bat suffix). For example,
659if you call it "foo.bat", it will run the file "foo" when it is
b906aaa5 660executed. Since you can run batch files on Windows platforms simply
9baed986
LC
661by typing the name (without the extension), this effectively
662runs the file "foo", when you type either "foo" or "foo.bat".
663With this method, "foo.bat" can even be in a different location
664than the file "foo", as long as "foo" is available somewhere on
665the PATH. If your scripts are on a filesystem that allows symbolic
666links, you can even avoid copying "runperl.bat".
667
668Here's a diversion: copy "runperl.bat" to "runperl", and type
669"runperl". Explain the observed behavior, or lack thereof. :)
670Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH
671
00808b83
SH
672=back
673
674=head2 Miscellaneous Things
9baed986
LC
675
676A full set of HTML documentation is installed, so you should be
677able to use it if you have a web browser installed on your
678system.
679
680C<perldoc> is also a useful tool for browsing information contained
681in the documentation, especially in conjunction with a pager
b906aaa5 682like C<less> (recent versions of which have Windows support). You may
9baed986
LC
683have to set the PAGER environment variable to use a specific pager.
684"perldoc -f foo" will print information about the perl operator
685"foo".
686
13ee867e
BD
687One common mistake when using this port with a GUI library like C<Tk>
688is assuming that Perl's normal behavior of opening a command-line
689window will go away. This isn't the case. If you want to start a copy
690of C<perl> without opening a command-line window, use the C<wperl>
691executable built during the installation process. Usage is exactly
b906aaa5 692the same as normal C<perl> on Windows, except that options like C<-h>
13ee867e
BD
693don't work (since they need a command-line window to print to).
694
8166b4e0
DB
695If you find bugs in perl, you can report them to
696L<https://github.com/Perl/perl5/issues>.
9baed986 697
9baed986
LC
698=head1 BUGS AND CAVEATS
699
dbd54a9f
VK
700Norton AntiVirus interferes with the build process, particularly if
701set to "AutoProtect, All Files, when Opened". Unlike large applications
702the perl build process opens and modifies a lot of files. Having the
a3815e44 703AntiVirus scan each and every one slows build the process significantly.
9baed986 704Worse, with PERLIO=stdio the build process fails with peculiar messages
dbd54a9f 705as the virus checker interacts badly with miniperl.exe writing configure
9baed986
LC
706files (it seems to either catch file part written and treat it as suspicious,
707or virus checker may have it "locked" in a way which inhibits miniperl
dbd54a9f 708updating it). The build does complete with
9baed986
LC
709
710 set PERLIO=perlio
711
712but that may be just luck. Other AntiVirus software may have similar issues.
713
8f5839a9
DD
714A git GUI shell extension for Windows such as TortoiseGit will cause the build
715and later C<make test> to run much slower since every file is checked for its
716git status as soon as it is created and/or modified. TortoiseGit doesn't cause
717any test failures or build problems unlike the antivirus software described
718above, but it does cause similar slowness. It is suggested to use Task Manager
719to look for background processes which use high CPU amounts during the building
720process.
721
9baed986
LC
722Some of the built-in functions do not act exactly as documented in
723L<perlfunc>, and a few are not implemented at all. To avoid
724surprises, particularly if you have had prior exposure to Perl
725in other operating environments or if you intend to write code
00808b83 726that will be portable to other environments, see L<perlport>
9baed986
LC
727for a reasonably definitive list of these differences.
728
729Not all extensions available from CPAN may build or work properly
b906aaa5 730in the Windows environment. See L</"Building Extensions">.
9baed986
LC
731
732Most C<socket()> related calls are supported, but they may not
733behave as on Unix platforms. See L<perlport> for the full list.
734
735Signal handling may not behave as on Unix platforms (where it
736doesn't exactly "behave", either :). For instance, calling C<die()>
737or C<exit()> from signal handlers will cause an exception, since most
b906aaa5 738implementations of C<signal()> on Windows are severely crippled.
9baed986
LC
739Thus, signals may work only for simple things like setting a flag
740variable in the handler. Using signals under this port should
741currently be considered unsupported.
742
35e21c5b
DR
743Please report detailed descriptions of any problems and solutions that
744you may find at E<lt>L<https://github.com/Perl/perl5/issues>E<gt>,
8166b4e0 745along with the output produced by C<perl -V>.
9baed986 746
e84ac4e2
SH
747=head1 ACKNOWLEDGEMENTS
748
749The use of a camel with the topic of Perl is a trademark
750of O'Reilly and Associates, Inc. Used with permission.
751
9baed986
LC
752=head1 AUTHORS
753
754=over 4
755
756=item Gary Ng E<lt>71564.1743@CompuServe.COME<gt>
757
758=item Gurusamy Sarathy E<lt>gsar@activestate.comE<gt>
759
760=item Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt>
761
2bfd3252
SH
762=item Jan Dubois E<lt>jand@activestate.comE<gt>
763
2a46176f 764=item Steve Hay E<lt>steve.m.hay@googlemail.comE<gt>
2bfd3252 765
9baed986
LC
766=back
767
2bfd3252 768This document is maintained by Jan Dubois.
9baed986
LC
769
770=head1 SEE ALSO
771
772L<perl>
773
774=head1 HISTORY
775
776This port was originally contributed by Gary Ng around 5.003_24,
777and borrowed from the Hip Communications port that was available
778at the time. Various people have made numerous and sundry hacks
779since then.
780
9baed986
LC
781GCC/mingw32 support was added in 5.005 (Nick Ing-Simmons).
782
783Support for PERL_OBJECT was added in 5.005 (ActiveState Tool Corp).
784
785Support for fork() emulation was added in 5.6 (ActiveState Tool Corp).
786
787Win9x support was added in 5.6 (Benjamin Stuhl).
788
789Support for 64-bit Windows added in 5.8 (ActiveState Corp).
790
4695dc7a 791Last updated: 06 October 2021
9baed986
LC
792
793=cut