This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make *ISA assignment slightly faster
[perl5.git] / README.win32
1 If you read this file _as_is_, just ignore the funny characters you
2 see. It is written in the POD format (see pod/perlpod.pod) which is
3 specially designed to be readable as is.
4
5 =head1 NAME
6
7 perlwin32 - Perl under Windows
8
9 =head1 SYNOPSIS
10
11 These are instructions for building Perl under Windows 2000 and later.
12
13 =head1 DESCRIPTION
14
15 Before you start, you should glance through the README file
16 found in the top-level directory to which the Perl distribution
17 was extracted.  Make sure you read and understand the terms under
18 which this software is being distributed.
19
20 Also make sure you read L<BUGS AND CAVEATS> below for the
21 known limitations of this port.
22
23 The INSTALL file in the perl top-level has much information that is
24 only relevant to people building Perl on Unix-like systems.  In
25 particular, you can safely ignore any information that talks about
26 "Configure".
27
28 You may also want to look at one other option for building a perl that
29 will work on Windows: the README.cygwin file, which give a different
30 set of rules to build a perl for Windows.  This method will probably
31 enable you to build a more Unix-compatible perl, but you will also
32 need to download and use various other build-time and run-time support
33 software described in that file.
34
35 This set of instructions is meant to describe a so-called "native"
36 port of Perl to the Windows platform.  This includes both 32-bit and
37 64-bit Windows operating systems.  The resulting Perl requires no
38 additional software to run (other than what came with your operating
39 system).  Currently, this port is capable of using one of the
40 following compilers on the Intel x86 architecture:
41
42       Borland C++             version 5.02 or later
43       Microsoft Visual C++    version 6.0 or later (*)
44       Gcc by mingw.org        gcc version 3.2 or later
45       Gcc by mingw-w64.sf.net gcc version 4.4.3 or later
46
47 (*) NOTE: Support for Visual C++ 2010 is not yet complete. This latest
48 version of VC++ introduces some new C<errno.h> constants which conflict
49 with Perl's current setting of them to match the corresponding WSAE*
50 constants' values. Until this issue is resolved you will see several test
51 failures (in F<cpan/autodie/t/flock.t>, F<dist/IO/t/io_multihomed.t >,
52 F<dist/Net-Ping/t/450_service.t> and F<dist/Net-Ping/t/510_ping_udp.t>)
53 and experience other problems in code involving sockets.
54
55 Note that the last two of these are actually competing projects both
56 delivering complete gcc toolchain for MS Windows:
57
58 - http://mingw.org - delivers gcc toolchain targeting 32-bit Windows
59   platform.
60
61 - http://mingw-w64.sf.net - delivers gcc toolchain targeting both 64-bit
62   Windows and 32-bit Windows platforms (despite the project name "mingw-w64"
63   they are not only 64-bit oriented). They deliver the native gcc compilers
64   and cross-compilers that are also supported by perl's makefile.
65
66 The Borland C++ and Microsoft Visual C++ compilers are also now being given
67 away free.  The Borland compiler is available as "Borland C++ Compiler Free
68 Command Line Tools" and is the same compiler that ships with the full
69 "Borland C++ Builder" product.  The Microsoft compiler is available as
70 "Visual C++ Toolkit 2003" or "Visual C++ 2005/2008/2010 Express Edition" (and
71 also as part of the ".NET Framework SDK") and is the same compiler that ships
72 with "Visual C++ .NET 2003 Professional" or "Visual C++ 2005/2008/2010
73 Professional" respectively.
74
75 This port can also be built on IA64/AMD64 using:
76
77       Microsoft Platform SDK    Nov 2001 (64-bit compiler and tools)
78       MinGW64 compiler (gcc version 4.4.3 or later)
79
80 The Windows SDK can be downloaded from http://www.microsoft.com/.
81 The MinGW64 compiler is available at http://sourceforge.net/projects/mingw-w64.
82 The latter is actually a cross-compiler targeting Win64. There's also a trimmed
83 down compiler (no java, or gfortran) suitable for building perl available at:
84 http://strawberryperl.com/package/kmx/64_gcctoolchain/mingw64-w64-20100123-kmx-v2.zip
85
86 NOTE: If you're using a 32-bit compiler to build perl on a 64-bit Windows
87 operating system, then you should set the WIN64 environment variable to "undef".
88 Also, the trimmed down compiler only passes tests when USE_ITHREADS *= define
89 (as opposed to undef) and when the CFG *= Debug line is commented out.
90
91 This port fully supports MakeMaker (the set of modules that
92 is used to build extensions to perl).  Therefore, you should be
93 able to build and install most extensions found in the CPAN sites.
94 See L<Usage Hints for Perl on Windows> below for general hints about this.
95
96 =head2 Setting Up Perl on Windows
97
98 =over 4
99
100 =item Make
101
102 You need a "make" program to build the sources.  If you are using
103 Visual C++ or the Windows SDK tools, nmake will work.  Builds using
104 the Borland compiler or gcc need dmake.
105
106 dmake is a freely available make that has very nice macro features
107 and parallelability.
108
109 A port of dmake for Windows is available from:
110
111     http://search.cpan.org/dist/dmake/
112
113 Fetch and install dmake somewhere on your path.
114
115 There exists a minor coexistence problem with dmake and Borland C++
116 compilers.  Namely, if a distribution has C files named with mixed
117 case letters, they will be compiled into appropriate .obj-files named
118 with all lowercase letters, and every time dmake is invoked
119 to bring files up to date, it will try to recompile such files again.
120 For example, Tk distribution has a lot of such files, resulting in
121 needless recompiles every time dmake is invoked.  To avoid this, you
122 may use the script "sync_ext.pl" after a successful build.  It is
123 available in the win32 subdirectory of the Perl source distribution.
124
125 =item Command Shell
126
127 Use the default "cmd" shell that comes with NT.  Some versions of the
128 popular 4DOS/NT shell have incompatibilities that may cause you trouble.
129 If the build fails under that shell, try building again with the cmd
130 shell.
131
132 Make sure the path to the build directory does not contain spaces.  The
133 build usually works in this circumstance, but some tests will fail.
134
135 =item Borland C++
136
137 If you are using the Borland compiler, you will need dmake.
138 (The make that Borland supplies is seriously crippled and will not
139 work for MakeMaker builds.)
140
141 See L</"Make"> above.
142
143 =item Microsoft Visual C++
144
145 The nmake that comes with Visual C++ will suffice for building.
146 You will need to run the VCVARS32.BAT file, usually found somewhere
147 like C:\Program Files\Microsoft Visual Studio\VC98\Bin.
148 This will set your build environment.
149
150 You can also use dmake to build using Visual C++; provided, however,
151 you set OSRELEASE to "microsft" (or whatever the directory name
152 under which the Visual C dmake configuration lives) in your environment
153 and edit win32/config.vc to change "make=nmake" into "make=dmake".  The
154 latter step is only essential if you want to use dmake as your default
155 make for building extensions using MakeMaker.
156
157 =item Microsoft Visual C++ 2008/2010 Express Edition
158
159 These free versions of Visual C++ 2008/2010 Professional contain the same
160 compilers and linkers that ship with the full versions, and also contain
161 everything necessary to build Perl, rather than requiring a separate download
162 of the Windows SDK like previous versions did.
163
164 These packages can be downloaded by searching in the Download Center at
165 http://www.microsoft.com/downloads/search.aspx?displaylang=en.  (Providing exact
166 links to these packages has proven a pointless task because the links keep on
167 changing so often.)
168
169 Install Visual C++ 2008/2010 Express, then setup your environment using, e.g.
170
171         C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat
172
173 (assuming the default installation location was chosen).
174
175 Perl should now build using the win32/Makefile.  You will need to edit that
176 file to set CCTYPE to MSVC90FREE or MSVC100FREE first.
177
178 =item Microsoft Visual C++ 2005 Express Edition
179
180 This free version of Visual C++ 2005 Professional contains the same compiler
181 and linker that ship with the full version, but doesn't contain everything
182 necessary to build Perl.
183
184 You will also need to download the "Windows SDK" (the "Core SDK" and "MDAC
185 SDK" components are required) for more header files and libraries.
186
187 These packages can both be downloaded by searching in the Download Center at
188 http://www.microsoft.com/downloads/search.aspx?displaylang=en.  (Providing exact
189 links to these packages has proven a pointless task because the links keep on
190 changing so often.)
191
192 Try to obtain the latest version of the Windows SDK.  Sometimes these packages
193 contain a particular Windows OS version in their name, but actually work on
194 other OS versions too.  For example, the "Windows Server 2003 R2 Platform SDK"
195 also runs on Windows XP SP2 and Windows 2000.
196
197 Install Visual C++ 2005 first, then the Platform SDK.  Setup your environment
198 as follows (assuming default installation locations were chosen):
199
200         SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK
201
202         SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PlatformSDKDir%\Bin
203
204         SET INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%PlatformSDKDir%\include
205
206         SET LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%PlatformSDKDir%\lib
207
208         SET LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
209
210 (The PlatformSDKDir might need to be set differently depending on which version
211 you are using. Earlier versions installed into "C:\Program Files\Microsoft SDK",
212 while the latest versions install into version-specific locations such as
213 "C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2".)
214
215 Perl should now build using the win32/Makefile.  You will need to edit that
216 file to set
217
218         CCTYPE = MSVC80FREE
219
220 and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above.
221
222 =item Microsoft Visual C++ Toolkit 2003
223
224 This free toolkit contains the same compiler and linker that ship with
225 Visual C++ .NET 2003 Professional, but doesn't contain everything
226 necessary to build Perl.
227
228 You will also need to download the "Platform SDK" (the "Core SDK" and "MDAC
229 SDK" components are required) for header files, libraries and rc.exe, and
230 ".NET Framework SDK" for more libraries and nmake.exe.  Note that the latter
231 (which also includes the free compiler and linker) requires the ".NET
232 Framework Redistributable" to be installed first.  This can be downloaded and
233 installed separately, but is included in the "Visual C++ Toolkit 2003" anyway.
234
235 These packages can all be downloaded by searching in the Download Center at
236 http://www.microsoft.com/downloads/search.aspx?displaylang=en.  (Providing exact
237 links to these packages has proven a pointless task because the links keep on
238 changing so often.)
239
240 Try to obtain the latest version of the Windows SDK.  Sometimes these packages
241 contain a particular Windows OS version in their name, but actually work on
242 other OS versions too.  For example, the "Windows Server 2003 R2 Platform SDK"
243 also runs on Windows XP SP2 and Windows 2000.
244
245 Install the Toolkit first, then the Platform SDK, then the .NET Framework SDK.
246 Setup your environment as follows (assuming default installation locations
247 were chosen):
248
249         SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK
250
251         SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin;%PlatformSDKDir%\Bin;C:\Program Files\Microsoft.NET\SDK\v1.1\Bin
252
253         SET INCLUDE=C:\Program Files\Microsoft Visual C++ Toolkit 2003\include;%PlatformSDKDir%\include;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
254
255         SET LIB=C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;%PlatformSDKDir%\lib;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib
256
257 (The PlatformSDKDir might need to be set differently depending on which version
258 you are using. Earlier versions installed into "C:\Program Files\Microsoft SDK",
259 while the latest versions install into version-specific locations such as
260 "C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2".)
261
262 Several required files will still be missing:
263
264 =over 4
265
266 =item *
267
268 cvtres.exe is required by link.exe when using a .res file.  It is actually
269 installed by the .NET Framework SDK, but into a location such as the
270 following:
271
272         C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
273
274 Copy it from there to %PlatformSDKDir%\Bin
275
276 =item *
277
278 lib.exe is normally used to build libraries, but link.exe with the /lib
279 option also works, so change win32/config.vc to use it instead:
280
281 Change the line reading:
282
283         ar='lib'
284
285 to:
286
287         ar='link /lib'
288
289 It may also be useful to create a batch file called lib.bat in
290 C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin containing:
291
292         @echo off
293         link /lib %*
294
295 for the benefit of any naughty C extension modules that you might want to build
296 later which explicitly reference "lib" rather than taking their value from
297 $Config{ar}.
298
299 =item *
300
301 setargv.obj is required to build perlglob.exe (and perl.exe if the USE_SETARGV
302 option is enabled).  The Platform SDK supplies this object file in source form
303 in %PlatformSDKDir%\src\crt.  Copy setargv.c, cruntime.h and
304 internal.h from there to some temporary location and build setargv.obj using
305
306         cl.exe /c /I. /D_CRTBLD setargv.c
307
308 Then copy setargv.obj to %PlatformSDKDir%\lib
309
310 Alternatively, if you don't need perlglob.exe and don't need to enable the
311 USE_SETARGV option then you can safely just remove all mention of $(GLOBEXE)
312 from win32/Makefile and setargv.obj won't be required anyway.
313
314 =back
315
316 Perl should now build using the win32/Makefile.  You will need to edit that
317 file to set
318
319         CCTYPE = MSVC70FREE
320
321 and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above.
322
323 =item Microsoft Platform SDK 64-bit Compiler
324
325 The nmake that comes with the Platform SDK will suffice for building
326 Perl.  Make sure you are building within one of the "Build Environment"
327 shells available after you install the Platform SDK from the Start Menu.
328
329 =item MinGW release 3 with gcc
330
331 Perl can be compiled with gcc from MinGW release 3 and later (using gcc 3.2.x
332 and later).  It can be downloaded here:
333
334     http://www.mingw.org/
335
336 You also need dmake.  See L</"Make"> above on how to get it.
337
338 =back
339
340 =head2 Building
341
342 =over 4
343
344 =item *
345
346 Make sure you are in the "win32" subdirectory under the perl toplevel.
347 This directory contains a "Makefile" that will work with
348 versions of nmake that come with Visual C++ or the Windows SDK, and
349 a dmake "makefile.mk" that will work for all supported compilers.  The
350 defaults in the dmake makefile are setup to build using MinGW/gcc.
351
352 =item *
353
354 Edit the makefile.mk (or Makefile, if you're using nmake) and change
355 the values of INST_DRV and INST_TOP.   You can also enable various
356 build flags.  These are explained in the makefiles.
357
358 Note that it is generally not a good idea to try to build a perl with
359 INST_DRV and INST_TOP set to a path that already exists from a previous
360 build.  In particular, this may cause problems with the
361 lib/ExtUtils/t/Embed.t test, which attempts to build a test program and
362 may end up building against the installed perl's lib/CORE directory rather
363 than the one being tested.
364
365 You will have to make sure that CCTYPE is set correctly and that
366 CCHOME points to wherever you installed your compiler. If building with
367 gcc-4.x.x, you'll also need to uncomment the assignment to GCC_4XX and
368 uncomment the assignment to the appropriate GCCHELPERDLL in the makefile.mk.
369
370 If building with the cross-compiler provided by
371 mingw-w64.sourceforge.net you'll need to uncomment the line that sets
372 GCCCROSS in the makefile.mk. Do this only if it's the cross-compiler - ie
373 only if the bin folder doesn't contain a gcc.exe. (The cross-compiler
374 does not provide a gcc.exe, g++.exe, ar.exe, etc. Instead, all of these
375 executables are prefixed with 'x86_64-w64-mingw32-'.)
376
377 The default value for CCHOME in the makefiles for Visual C++
378 may not be correct for some versions.  Make sure the default exists
379 and is valid.
380
381 You may also need to comment out the C<DELAYLOAD = ...> line in the
382 Makefile if you're using VC++ 6.0 without the latest service pack and
383 the linker reports an internal error.
384
385 If you have either the source or a library that contains des_fcrypt(),
386 enable the appropriate option in the makefile.  A ready-to-use version
387 of fcrypt.c, based on the version originally written by Eric Young at
388 ftp://ftp.funet.fi/pub/crypt/mirrors/dsi/libdes/, is bundled with the
389 distribution and CRYPT_SRC is set to use it.
390 Alternatively, if you have built a library that contains des_fcrypt(),
391 you can set CRYPT_LIB to point to the library name.
392 Perl will also build without des_fcrypt(), but the crypt() builtin will
393 fail at run time.
394
395 If you want build some core extensions statically into perl's dll, specify
396 them in the STATIC_EXT macro.
397
398 Be sure to read the instructions near the top of the makefiles carefully.
399
400 =item *
401
402 Type "dmake" (or "nmake" if you are using that make).
403
404 This should build everything.  Specifically, it will create perl.exe,
405 perl513.dll at the perl toplevel, and various other extension dll's
406 under the lib\auto directory.  If the build fails for any reason, make
407 sure you have done the previous steps correctly.
408
409 =back
410
411 =head2 Testing Perl on Windows
412
413 Type "dmake test" (or "nmake test").  This will run most of the tests from
414 the testsuite (many tests will be skipped).
415
416 There should be no test failures.
417
418 (If you're using VC++ 2010 then you will currently see several test failures,
419 as noted in the list of supported compilers above.)
420
421 Some test failures may occur if you use a command shell other than the
422 native "cmd.exe", or if you are building from a path that contains
423 spaces.  So don't do that.
424
425 If you are running the tests from a emacs shell window, you may see
426 failures in op/stat.t.  Run "dmake test-notty" in that case.
427
428 If you're using the Borland compiler, you may see a failure in op/taint.t
429 arising from the inability to find the Borland Runtime DLLs on the system
430 default path.  You will need to copy the DLLs reported by the messages
431 from where Borland chose to install it, into the Windows system directory
432 (usually somewhere like C:\WINNT\SYSTEM32) and rerun the test.
433
434 If you're using Borland compiler versions 5.2 and below, you may run into
435 problems finding the correct header files when building extensions.  For
436 example, building the "Tk" extension may fail because both perl and Tk
437 contain a header file called "patchlevel.h".  The latest Borland compiler
438 (v5.5) is free of this misbehaviour, and it even supports an
439 option -VI- for backward (bugward) compatibility for using the old Borland
440 search algorithm  to locate header files.
441
442 If you run the tests on a FAT partition, you may see some failures for
443 C<link()> related tests (I<op/write.t>, I<op/stat.t> ...). Testing on
444 NTFS avoids these errors.
445
446 Furthermore, you should make sure that during C<make test> you do not
447 have any GNU tool packages in your path: some toolkits like Unixutils
448 include some tools (C<type> for instance) which override the Windows
449 ones and makes tests fail. Remove them from your path while testing to
450 avoid these errors.
451
452 Please report any other failures as described under L<BUGS AND CAVEATS>.
453
454 =head2 Installation of Perl on Windows
455
456 Type "dmake install" (or "nmake install").  This will put the newly
457 built perl and the libraries under whatever C<INST_TOP> points to in the
458 Makefile.  It will also install the pod documentation under
459 C<$INST_TOP\$INST_VER\lib\pod> and HTML versions of the same under
460 C<$INST_TOP\$INST_VER\lib\pod\html>.
461
462 To use the Perl you just installed you will need to add a new entry to
463 your PATH environment variable: C<$INST_TOP\bin>, e.g.
464
465     set PATH=c:\perl\bin;%PATH%
466
467 If you opted to uncomment C<INST_VER> and C<INST_ARCH> in the makefile
468 then the installation structure is a little more complicated and you will
469 need to add two new PATH components instead: C<$INST_TOP\$INST_VER\bin> and
470 C<$INST_TOP\$INST_VER\bin\$ARCHNAME>, e.g.
471
472     set PATH=c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH%
473
474 =head2 Usage Hints for Perl on Windows
475
476 =over 4
477
478 =item Environment Variables
479
480 The installation paths that you set during the build get compiled
481 into perl, so you don't have to do anything additional to start
482 using that perl (except add its location to your PATH variable).
483
484 If you put extensions in unusual places, you can set PERL5LIB
485 to a list of paths separated by semicolons where you want perl
486 to look for libraries.  Look for descriptions of other environment
487 variables you can set in L<perlrun>.
488
489 You can also control the shell that perl uses to run system() and
490 backtick commands via PERL5SHELL.  See L<perlrun>.
491
492 Perl does not depend on the registry, but it can look up certain default
493 values if you choose to put them there.  Perl attempts to read entries from
494 C<HKEY_CURRENT_USER\Software\Perl> and C<HKEY_LOCAL_MACHINE\Software\Perl>.
495 Entries in the former override entries in the latter.  One or more of the
496 following entries (of type REG_SZ or REG_EXPAND_SZ) may be set:
497
498     lib-$]              version-specific standard library path to add to @INC
499     lib                 standard library path to add to @INC
500     sitelib-$]          version-specific site library path to add to @INC
501     sitelib             site library path to add to @INC
502     vendorlib-$]        version-specific vendor library path to add to @INC
503     vendorlib           vendor library path to add to @INC
504     PERL*               fallback for all %ENV lookups that begin with "PERL"
505
506 Note the C<$]> in the above is not literal.  Substitute whatever version
507 of perl you want to honor that entry, e.g. C<5.6.0>.  Paths must be
508 separated with semicolons, as usual on Windows.
509
510 =item File Globbing
511
512 By default, perl handles file globbing using the File::Glob extension,
513 which provides portable globbing.
514
515 If you want perl to use globbing that emulates the quirks of DOS
516 filename conventions, you might want to consider using File::DosGlob
517 to override the internal glob() implementation.  See L<File::DosGlob> for
518 details.
519
520 =item Using perl from the command line
521
522 If you are accustomed to using perl from various command-line
523 shells found in UNIX environments, you will be less than pleased
524 with what Windows offers by way of a command shell.
525
526 The crucial thing to understand about the Windows environment is that
527 the command line you type in is processed twice before Perl sees it.
528 First, your command shell (usually CMD.EXE on Windows NT, and
529 COMMAND.COM on Windows 9x) preprocesses the command line, to handle
530 redirection, environment variable expansion, and location of the
531 executable to run. Then, the perl executable splits the remaining
532 command line into individual arguments, using the C runtime library
533 upon which Perl was built.
534
535 It is particularly important to note that neither the shell nor the C
536 runtime do any wildcard expansions of command-line arguments (so
537 wildcards need not be quoted).  Also, the quoting behaviours of the
538 shell and the C runtime are rudimentary at best (and may, if you are
539 using a non-standard shell, be inconsistent).  The only (useful) quote
540 character is the double quote (").  It can be used to protect spaces
541 and other special characters in arguments.
542
543 The Windows NT documentation has almost no description of how the
544 quoting rules are implemented, but here are some general observations
545 based on experiments: The C runtime breaks arguments at spaces and
546 passes them to programs in argc/argv.  Double quotes can be used to
547 prevent arguments with spaces in them from being split up.  You can
548 put a double quote in an argument by escaping it with a backslash and
549 enclosing the whole argument within double quotes.  The backslash and
550 the pair of double quotes surrounding the argument will be stripped by
551 the C runtime.
552
553 The file redirection characters "E<lt>", "E<gt>", and "|" can be quoted by
554 double quotes (although there are suggestions that this may not always
555 be true).  Single quotes are not treated as quotes by the shell or
556 the C runtime, they don't get stripped by the shell (just to make
557 this type of quoting completely useless).  The caret "^" has also
558 been observed to behave as a quoting character, but this appears
559 to be a shell feature, and the caret is not stripped from the command
560 line, so Perl still sees it (and the C runtime phase does not treat
561 the caret as a quote character).
562
563 Here are some examples of usage of the "cmd" shell:
564
565 This prints two doublequotes:
566
567     perl -e "print '\"\"' "
568
569 This does the same:
570
571     perl -e "print \"\\\"\\\"\" "
572
573 This prints "bar" and writes "foo" to the file "blurch":
574
575     perl -e "print 'foo'; print STDERR 'bar'" > blurch
576
577 This prints "foo" ("bar" disappears into nowhereland):
578
579     perl -e "print 'foo'; print STDERR 'bar'" 2> nul
580
581 This prints "bar" and writes "foo" into the file "blurch":
582
583     perl -e "print 'foo'; print STDERR 'bar'" 1> blurch
584
585 This pipes "foo" to the "less" pager and prints "bar" on the console:
586
587     perl -e "print 'foo'; print STDERR 'bar'" | less
588
589 This pipes "foo\nbar\n" to the less pager:
590
591     perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less
592
593 This pipes "foo" to the pager and writes "bar" in the file "blurch":
594
595     perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less
596
597
598 Discovering the usefulness of the "command.com" shell on Windows 9x
599 is left as an exercise to the reader :)
600
601 One particularly pernicious problem with the 4NT command shell for
602 Windows NT is that it (nearly) always treats a % character as indicating
603 that environment variable expansion is needed.  Under this shell, it is
604 therefore important to always double any % characters which you want
605 Perl to see (for example, for hash variables), even when they are
606 quoted.
607
608 =item Building Extensions
609
610 The Comprehensive Perl Archive Network (CPAN) offers a wealth
611 of extensions, some of which require a C compiler to build.
612 Look in http://www.cpan.org/ for more information on CPAN.
613
614 Note that not all of the extensions available from CPAN may work
615 in the Windows environment; you should check the information at
616 http://testers.cpan.org/ before investing too much effort into
617 porting modules that don't readily build.
618
619 Most extensions (whether they require a C compiler or not) can
620 be built, tested and installed with the standard mantra:
621
622     perl Makefile.PL
623     $MAKE
624     $MAKE test
625     $MAKE install
626
627 where $MAKE is whatever 'make' program you have configured perl to
628 use.  Use "perl -V:make" to find out what this is.  Some extensions
629 may not provide a testsuite (so "$MAKE test" may not do anything or
630 fail), but most serious ones do.
631
632 It is important that you use a supported 'make' program, and
633 ensure Config.pm knows about it.  If you don't have nmake, you can
634 either get dmake from the location mentioned earlier or get an
635 old version of nmake reportedly available from:
636
637  http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe
638
639 Another option is to use the make written in Perl, available from
640 CPAN.
641
642     http://www.cpan.org/modules/by-module/Make/
643
644 You may also use dmake.  See L</"Make"> above on how to get it.
645
646 Note that MakeMaker actually emits makefiles with different syntax
647 depending on what 'make' it thinks you are using.  Therefore, it is
648 important that one of the following values appears in Config.pm:
649
650     make='nmake'        # MakeMaker emits nmake syntax
651     make='dmake'        # MakeMaker emits dmake syntax
652     any other value     # MakeMaker emits generic make syntax
653                             (e.g GNU make, or Perl make)
654
655 If the value doesn't match the 'make' program you want to use,
656 edit Config.pm to fix it.
657
658 If a module implements XSUBs, you will need one of the supported
659 C compilers.  You must make sure you have set up the environment for
660 the compiler for command-line compilation.
661
662 If a module does not build for some reason, look carefully for
663 why it failed, and report problems to the module author.  If
664 it looks like the extension building support is at fault, report
665 that with full details of how the build failed using the perlbug
666 utility.
667
668 =item Command-line Wildcard Expansion
669
670 The default command shells on DOS descendant operating systems (such
671 as they are) usually do not expand wildcard arguments supplied to
672 programs.  They consider it the application's job to handle that.
673 This is commonly achieved by linking the application (in our case,
674 perl) with startup code that the C runtime libraries usually provide.
675 However, doing that results in incompatible perl versions (since the
676 behavior of the argv expansion code differs depending on the
677 compiler, and it is even buggy on some compilers).  Besides, it may
678 be a source of frustration if you use such a perl binary with an
679 alternate shell that *does* expand wildcards.
680
681 Instead, the following solution works rather well. The nice things
682 about it are 1) you can start using it right away; 2) it is more
683 powerful, because it will do the right thing with a pattern like
684 */*/*.c; 3) you can decide whether you do/don't want to use it; and
685 4) you can extend the method to add any customizations (or even
686 entirely different kinds of wildcard expansion).
687
688         C:\> copy con c:\perl\lib\Wild.pm
689         # Wild.pm - emulate shell @ARGV expansion on shells that don't
690         use File::DosGlob;
691         @ARGV = map {
692                       my @g = File::DosGlob::glob($_) if /[*?]/;
693                       @g ? @g : $_;
694                     } @ARGV;
695         1;
696         ^Z
697         C:\> set PERL5OPT=-MWild
698         C:\> perl -le "for (@ARGV) { print }" */*/perl*.c
699         p4view/perl/perl.c
700         p4view/perl/perlio.c
701         p4view/perl/perly.c
702         perl5.005/win32/perlglob.c
703         perl5.005/win32/perllib.c
704         perl5.005/win32/perlglob.c
705         perl5.005/win32/perllib.c
706         perl5.005/win32/perlglob.c
707         perl5.005/win32/perllib.c
708
709 Note there are two distinct steps there: 1) You'll have to create
710 Wild.pm and put it in your perl lib directory. 2) You'll need to
711 set the PERL5OPT environment variable.  If you want argv expansion
712 to be the default, just set PERL5OPT in your default startup
713 environment.
714
715 If you are using the Visual C compiler, you can get the C runtime's
716 command line wildcard expansion built into perl binary.  The resulting
717 binary will always expand unquoted command lines, which may not be
718 what you want if you use a shell that does that for you.  The expansion
719 done is also somewhat less powerful than the approach suggested above.
720
721 =item Notes on 64-bit Windows
722
723 Windows .NET Server supports the LLP64 data model on the Intel Itanium
724 architecture.
725
726 The LLP64 data model is different from the LP64 data model that is the
727 norm on 64-bit Unix platforms.  In the former, C<int> and C<long> are
728 both 32-bit data types, while pointers are 64 bits wide.  In addition,
729 there is a separate 64-bit wide integral type, C<__int64>.  In contrast,
730 the LP64 data model that is pervasive on Unix platforms provides C<int>
731 as the 32-bit type, while both the C<long> type and pointers are of
732 64-bit precision.  Note that both models provide for 64-bits of
733 addressability.
734
735 64-bit Windows running on Itanium is capable of running 32-bit x86
736 binaries transparently.  This means that you could use a 32-bit build
737 of Perl on a 64-bit system.  Given this, why would one want to build
738 a 64-bit build of Perl?  Here are some reasons why you would bother:
739
740 =over
741
742 =item *
743
744 A 64-bit native application will run much more efficiently on
745 Itanium hardware.
746
747 =item *
748
749 There is no 2GB limit on process size.
750
751 =item *
752
753 Perl automatically provides large file support when built under
754 64-bit Windows.
755
756 =item *
757
758 Embedding Perl inside a 64-bit application.
759
760 =back
761
762 =back
763
764 =head2 Running Perl Scripts
765
766 Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to
767 indicate to the OS that it should execute the file using perl.
768 Windows has no comparable means to indicate arbitrary files are
769 executables.
770
771 Instead, all available methods to execute plain text files on
772 Windows rely on the file "extension".  There are three methods
773 to use this to execute perl scripts:
774
775 =over 8
776
777 =item 1
778
779 There is a facility called "file extension associations" that will
780 work in Windows NT 4.0.  This can be manipulated via the two
781 commands "assoc" and "ftype" that come standard with Windows NT
782 4.0.  Type "ftype /?" for a complete example of how to set this
783 up for perl scripts (Say what?  You thought Windows NT wasn't
784 perl-ready? :).
785
786 =item 2
787
788 Since file associations don't work everywhere, and there are
789 reportedly bugs with file associations where it does work, the
790 old method of wrapping the perl script to make it look like a
791 regular batch file to the OS, may be used.  The install process
792 makes available the "pl2bat.bat" script which can be used to wrap
793 perl scripts into batch files.  For example:
794
795         pl2bat foo.pl
796
797 will create the file "FOO.BAT".  Note "pl2bat" strips any
798 .pl suffix and adds a .bat suffix to the generated file.
799
800 If you use the 4DOS/NT or similar command shell, note that
801 "pl2bat" uses the "%*" variable in the generated batch file to
802 refer to all the command line arguments, so you may need to make
803 sure that construct works in batch files.  As of this writing,
804 4DOS/NT users will need a "ParameterChar = *" statement in their
805 4NT.INI file or will need to execute "setdos /p*" in the 4DOS/NT
806 startup file to enable this to work.
807
808 =item 3
809
810 Using "pl2bat" has a few problems:  the file name gets changed,
811 so scripts that rely on C<$0> to find what they must do may not
812 run properly; running "pl2bat" replicates the contents of the
813 original script, and so this process can be maintenance intensive
814 if the originals get updated often.  A different approach that
815 avoids both problems is possible.
816
817 A script called "runperl.bat" is available that can be copied
818 to any filename (along with the .bat suffix).  For example,
819 if you call it "foo.bat", it will run the file "foo" when it is
820 executed.  Since you can run batch files on Windows platforms simply
821 by typing the name (without the extension), this effectively
822 runs the file "foo", when you type either "foo" or "foo.bat".
823 With this method, "foo.bat" can even be in a different location
824 than the file "foo", as long as "foo" is available somewhere on
825 the PATH.  If your scripts are on a filesystem that allows symbolic
826 links, you can even avoid copying "runperl.bat".
827
828 Here's a diversion:  copy "runperl.bat" to "runperl", and type
829 "runperl".  Explain the observed behavior, or lack thereof. :)
830 Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH
831
832 =back
833
834 =head2 Miscellaneous Things
835
836 A full set of HTML documentation is installed, so you should be
837 able to use it if you have a web browser installed on your
838 system.
839
840 C<perldoc> is also a useful tool for browsing information contained
841 in the documentation, especially in conjunction with a pager
842 like C<less> (recent versions of which have Windows support).  You may
843 have to set the PAGER environment variable to use a specific pager.
844 "perldoc -f foo" will print information about the perl operator
845 "foo".
846
847 One common mistake when using this port with a GUI library like C<Tk>
848 is assuming that Perl's normal behavior of opening a command-line
849 window will go away.  This isn't the case.  If you want to start a copy
850 of C<perl> without opening a command-line window, use the C<wperl>
851 executable built during the installation process.  Usage is exactly
852 the same as normal C<perl> on Windows, except that options like C<-h>
853 don't work (since they need a command-line window to print to).
854
855 If you find bugs in perl, you can run C<perlbug> to create a
856 bug report (you may have to send it manually if C<perlbug> cannot
857 find a mailer on your system).
858
859 =head1 BUGS AND CAVEATS
860
861 Norton AntiVirus interferes with the build process, particularly if
862 set to "AutoProtect, All Files, when Opened". Unlike large applications
863 the perl build process opens and modifies a lot of files. Having the
864 the AntiVirus scan each and every one slows build the process significantly.
865 Worse, with PERLIO=stdio the build process fails with peculiar messages
866 as the virus checker interacts badly with miniperl.exe writing configure
867 files (it seems to either catch file part written and treat it as suspicious,
868 or virus checker may have it "locked" in a way which inhibits miniperl
869 updating it). The build does complete with
870
871    set PERLIO=perlio
872
873 but that may be just luck. Other AntiVirus software may have similar issues.
874
875 Some of the built-in functions do not act exactly as documented in
876 L<perlfunc>, and a few are not implemented at all.  To avoid
877 surprises, particularly if you have had prior exposure to Perl
878 in other operating environments or if you intend to write code
879 that will be portable to other environments, see L<perlport>
880 for a reasonably definitive list of these differences.
881
882 Not all extensions available from CPAN may build or work properly
883 in the Windows environment.  See L</"Building Extensions">.
884
885 Most C<socket()> related calls are supported, but they may not
886 behave as on Unix platforms.  See L<perlport> for the full list.
887 Perl requires Winsock2 to be installed on the system. If you're
888 running Win95, you can download Winsock upgrade from here:
889
890 http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp
891
892 Later OS versions already include Winsock2 support.
893
894 Signal handling may not behave as on Unix platforms (where it
895 doesn't exactly "behave", either :).  For instance, calling C<die()>
896 or C<exit()> from signal handlers will cause an exception, since most
897 implementations of C<signal()> on Windows are severely crippled.
898 Thus, signals may work only for simple things like setting a flag
899 variable in the handler.  Using signals under this port should
900 currently be considered unsupported.
901
902 Please send detailed descriptions of any problems and solutions that
903 you may find to E<lt>F<perlbug@perl.org>E<gt>, along with the output
904 produced by C<perl -V>.
905
906 =head1 ACKNOWLEDGEMENTS
907
908 The use of a camel with the topic of Perl is a trademark
909 of O'Reilly and Associates, Inc. Used with permission.
910
911 =head1 AUTHORS
912
913 =over 4
914
915 =item Gary Ng E<lt>71564.1743@CompuServe.COME<gt>
916
917 =item Gurusamy Sarathy E<lt>gsar@activestate.comE<gt>
918
919 =item Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt>
920
921 =item Jan Dubois E<lt>jand@activestate.comE<gt>
922
923 =item Steve Hay E<lt>steve.m.hay@googlemail.comE<gt>
924
925 =back
926
927 This document is maintained by Jan Dubois.
928
929 =head1 SEE ALSO
930
931 L<perl>
932
933 =head1 HISTORY
934
935 This port was originally contributed by Gary Ng around 5.003_24,
936 and borrowed from the Hip Communications port that was available
937 at the time.  Various people have made numerous and sundry hacks
938 since then.
939
940 Borland support was added in 5.004_01 (Gurusamy Sarathy).
941
942 GCC/mingw32 support was added in 5.005 (Nick Ing-Simmons).
943
944 Support for PERL_OBJECT was added in 5.005 (ActiveState Tool Corp).
945
946 Support for fork() emulation was added in 5.6 (ActiveState Tool Corp).
947
948 Win9x support was added in 5.6 (Benjamin Stuhl).
949
950 Support for 64-bit Windows added in 5.8 (ActiveState Corp).
951
952 Last updated: 18 November 2010
953
954 =cut