This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Documentation added.
[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 9x/NT/2000/XP
12 on the Intel x86 and Itanium architectures.
13
14 =head1 DESCRIPTION
15
16 Before you start, you should glance through the README file
17 found in the top-level directory to which the Perl distribution
18 was extracted.  Make sure you read and understand the terms under
19 which this software is being distributed.
20
21 Also make sure you read L<BUGS AND CAVEATS> below for the
22 known limitations of this port.
23
24 The INSTALL file in the perl top-level has much information that is
25 only relevant to people building Perl on Unix-like systems.  In
26 particular, you can safely ignore any information that talks about
27 "Configure".
28
29 You may also want to look at two other options for building
30 a perl that will work on Windows NT:  the README.cygwin and
31 README.os2 files, each of which give a different set of rules to
32 build a Perl that will work on Win32 platforms.  Those two methods
33 will probably enable you to build a more Unix-compatible perl, but
34 you will also need to download and use various other build-time and
35 run-time support software described in those files.
36
37 This set of instructions is meant to describe a so-called "native"
38 port of Perl to Win32 platforms.  This includes both 32-bit and
39 64-bit Windows operating systems.  The resulting Perl requires no
40 additional software to run (other than what came with your operating
41 system).  Currently, this port is capable of using one of the
42 following compilers on the Intel x86 architecture:
43
44       Borland C++               version 5.02 or later
45       Microsoft Visual C++      version 4.2 or later
46       Mingw32 with GCC          version 2.95.2 or better
47
48 The last of these is a high quality freeware compiler.  Support
49 for it is still experimental.  (Older versions of GCC are known
50 not to work.)
51
52 This port can also be built on the Intel IA64 using:
53
54       Microsoft Platform SDK    Nov 2001 (64-bit compiler and tools)
55
56 The MS Platform SDK can be downloaded from http://www.microsoft.com/.
57
58 This port fully supports MakeMaker (the set of modules that
59 is used to build extensions to perl).  Therefore, you should be
60 able to build and install most extensions found in the CPAN sites.
61 See L<Usage Hints for Perl on Win32> below for general hints about this.
62
63 =head2 Setting Up Perl on Win32
64
65 =over 4
66
67 =item Make
68
69 You need a "make" program to build the sources.  If you are using
70 Visual C++ or the Platform SDK tools under Windows NT/2000/XP, nmake
71 will work.  All other builds need dmake.
72
73 dmake is a freely available make that has very nice macro features
74 and parallelability.
75
76 A port of dmake for Windows is available from:
77
78     http://www.cpan.org/authors/id/GSAR/dmake-4.1pl1-win32.zip
79
80 (This is a fixed version of the original dmake sources obtained from
81 http://www.wticorp.com/  As of version 4.1PL1, the original
82 sources did not build as shipped and had various other problems.
83 A patch is included in the above fixed version.)
84
85 Fetch and install dmake somewhere on your path (follow the instructions
86 in the README.NOW file).
87
88 There exists a minor coexistence problem with dmake and Borland C++
89 compilers.  Namely, if a distribution has C files named with mixed
90 case letters, they will be compiled into appropriate .obj-files named
91 with all lowercase letters, and every time dmake is invoked
92 to bring files up to date, it will try to recompile such files again.
93 For example, Tk distribution has a lot of such files, resulting in
94 needless recompiles every time dmake is invoked.  To avoid this, you
95 may use the script "sync_ext.pl" after a successful build.  It is
96 available in the win32 subdirectory of the Perl source distribution.
97
98 =item Command Shell
99
100 Use the default "cmd" shell that comes with NT.  Some versions of the
101 popular 4DOS/NT shell have incompatibilities that may cause you trouble.
102 If the build fails under that shell, try building again with the cmd
103 shell.
104
105 The nmake Makefile also has known incompatibilities with the
106 "command.com" shell that comes with Windows 9x.  You will need to
107 use dmake and makefile.mk to build under Windows 9x.
108
109 The surest way to build it is on Windows NT/2000/XP, using the cmd shell.
110
111 Make sure the path to the build directory does not contain spaces.  The
112 build usually works in this circumstance, but some tests will fail.
113
114 =item Borland C++
115
116 If you are using the Borland compiler, you will need dmake.
117 (The make that Borland supplies is seriously crippled and will not
118 work for MakeMaker builds.)
119
120 See L</"Make"> above.
121
122 =item Microsoft Visual C++
123
124 The nmake that comes with Visual C++ will suffice for building.
125 You will need to run the VCVARS32.BAT file, usually found somewhere
126 like C:\MSDEV4.2\BIN.  This will set your build environment.
127
128 You can also use dmake to build using Visual C++; provided, however,
129 you set OSRELEASE to "microsft" (or whatever the directory name
130 under which the Visual C dmake configuration lives) in your environment
131 and edit win32/config.vc to change "make=nmake" into "make=dmake".  The
132 latter step is only essential if you want to use dmake as your default
133 make for building extensions using MakeMaker.
134
135 =item Microsoft Platform SDK 64-bit Compiler
136
137 The nmake that comes with the Platform SDK will suffice for building
138 Perl.  Make sure you are building within one of the "Build Environment"
139 shells available after you install the Platform SDK from the Start Menu.
140
141 =item Mingw32 with GCC
142
143 GCC-2.95.2 binaries can be downloaded from:
144
145     ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/
146
147 You also need dmake.  See L</"Make"> above on how to get it.
148
149 The GCC-2.95.2 bundle comes with Mingw32 libraries and headers.
150
151 Make sure you install the binaries that work with MSVCRT.DLL as indicated
152 in the README for the GCC bundle.  You may need to set up a few environment
153 variables (usually ran from a batch file).
154
155 There are a couple of problems with the version of gcc-2.95.2-msvcrt.exe
156 released 7 November 1999:
157
158 =over
159
160 =item *
161
162 It left out a fix for certain command line quotes.  To fix this, be sure
163 to download and install the file fixes/quote-fix-msvcrt.exe from the above
164 ftp location.
165
166 =item *
167
168 The definition of the fpos_t type in stdio.h may be wrong.  If your
169 stdio.h has this problem, you will see an exception when running the
170 test t/lib/io_xs.t.  To fix this, change the typedef for fpos_t from
171 "long" to "long long" in the file i386-mingw32msvc/include/stdio.h,
172 and rebuild.
173
174 =back
175
176 A potentially simpler to install (but probably soon-to-be-outdated) bundle
177 of the above package with the mentioned fixes already applied is available
178 here:
179
180     http://downloads.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip
181     ftp://ftp.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip
182
183 =back
184
185 =head2 Building
186
187 =over 4
188
189 =item *
190
191 Make sure you are in the "win32" subdirectory under the perl toplevel.
192 This directory contains a "Makefile" that will work with
193 versions of nmake that come with Visual C++ or the Platform SDK, and
194 a dmake "makefile.mk" that will work for all supported compilers.  The
195 defaults in the dmake makefile are setup to build using the GCC compiler.
196
197 =item *
198
199 Edit the makefile.mk (or Makefile, if you're using nmake) and change 
200 the values of INST_DRV and INST_TOP.   You can also enable various
201 build flags.  These are explained in the makefiles.
202
203 You will have to make sure that CCTYPE is set correctly and that 
204 CCHOME points to wherever you installed your compiler.
205
206 The default value for CCHOME in the makefiles for Visual C++
207 may not be correct for some versions.  Make sure the default exists
208 and is valid.
209
210 If you have either the source or a library that contains des_fcrypt(),
211 enable the appropriate option in the makefile.  des_fcrypt() is not
212 bundled with the distribution due to US Government restrictions
213 on the export of cryptographic software.  Nevertheless, this routine
214 is part of the "libdes" library (written by Eric Young) which is widely
215 available worldwide, usually along with SSLeay ( for example, 
216 ftp://ftp.funet.fi/pub/crypt/mirrors/dsi/libdes/ ).  Set CRYPT_SRC to the
217 name of the file that implements des_fcrypt().  Alternatively, if
218 you have built a library that contains des_fcrypt(), you can set
219 CRYPT_LIB to point to the library name.  The location above contains
220 many versions of the "libdes" library, all with slightly different
221 implementations of des_fcrypt().  Older versions have a single,
222 self-contained file (fcrypt.c) that implements crypt(), so they may be
223 easier to use.  A patch against the fcrypt.c found in libdes-3.06 is
224 in des_fcrypt.patch.
225
226 An easier alternative may be to get the pre-patched and ready-to-use
227 fcrypt.c that can be found here:
228
229     http://downloads.ActiveState.com/pub/staff/gsar/fcrypt.c
230     ftp://ftp.ActiveState.com/pub/staff/gsar/fcrypt.c
231
232 Perl will also build without des_fcrypt(), but the crypt() builtin will
233 fail at run time.
234
235 Be sure to read the instructions near the top of the makefiles carefully.
236
237 =item *
238
239 Type "dmake" (or "nmake" if you are using that make).
240
241 This should build everything.  Specifically, it will create perl.exe,
242 perl58.dll at the perl toplevel, and various other extension dll's
243 under the lib\auto directory.  If the build fails for any reason, make
244 sure you have done the previous steps correctly.
245
246 =back
247
248 =head2 Testing Perl on Win32
249
250 Type "dmake test" (or "nmake test").  This will run most of the tests from
251 the testsuite (many tests will be skipped).
252
253 There should be no test failures when running under Windows NT/2000/XP.
254 Many tests I<will> fail under Windows 9x due to the inferior command shell.
255
256 Some test failures may occur if you use a command shell other than the
257 native "cmd.exe", or if you are building from a path that contains
258 spaces.  So don't do that.
259
260 If you are running the tests from a emacs shell window, you may see
261 failures in op/stat.t.  Run "dmake test-notty" in that case.
262
263 If you're using the Borland compiler, you may see a failure in op/taint.t
264 arising from the inability to find the Borland Runtime DLLs on the system
265 default path.  You will need to copy the DLLs reported by the messages
266 from where Borland chose to install it, into the Windows system directory
267 (usually somewhere like C:\WINNT\SYSTEM32) and rerun the test.
268
269 If you're using Borland compiler versions 5.2 and below, you may run into
270 problems finding the correct header files when building extensions.  For
271 example, building the "Tk" extension may fail because both perl and Tk
272 contain a header file called "patchlevel.h".  The latest Borland compiler
273 (v5.5) is free of this misbehaviour, and it even supports an
274 option -VI- for backward (bugward) compatibility for using the old Borland
275 search algorithm  to locate header files.
276
277 Please report any other failures as described under L<BUGS AND CAVEATS>.
278
279 =head2 Installation of Perl on Win32
280
281 Type "dmake install" (or "nmake install").  This will put the newly
282 built perl and the libraries under whatever C<INST_TOP> points to in the
283 Makefile.  It will also install the pod documentation under
284 C<$INST_TOP\$VERSION\lib\pod> and HTML versions of the same under
285 C<$INST_TOP\$VERSION\lib\pod\html>.  To use the Perl you just installed,
286 you will need to add two components to your PATH environment variable,
287 C<$INST_TOP\$VERSION\bin> and C<$INST_TOP\$VERSION\bin\$ARCHNAME>.
288 For example:
289
290     set PATH c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH%
291
292 If you opt to comment out INST_VER and INST_ARCH in the makefiles, the
293 installation structure is much simpler.  In that case, it will be
294 sufficient to add a single entry to the path, for instance:
295
296     set PATH c:\perl\bin;%PATH%
297
298 =head2 Usage Hints for Perl on Win32
299
300 =over 4
301
302 =item Environment Variables
303
304 The installation paths that you set during the build get compiled
305 into perl, so you don't have to do anything additional to start
306 using that perl (except add its location to your PATH variable).
307
308 If you put extensions in unusual places, you can set PERL5LIB
309 to a list of paths separated by semicolons where you want perl
310 to look for libraries.  Look for descriptions of other environment
311 variables you can set in L<perlrun>.
312
313 You can also control the shell that perl uses to run system() and
314 backtick commands via PERL5SHELL.  See L<perlrun>.
315
316 Perl does not depend on the registry, but it can look up certain default
317 values if you choose to put them there.  Perl attempts to read entries from
318 C<HKEY_CURRENT_USER\Software\Perl> and C<HKEY_LOCAL_MACHINE\Software\Perl>.
319 Entries in the former override entries in the latter.  One or more of the
320 following entries (of type REG_SZ or REG_EXPAND_SZ) may be set:
321
322     lib-$]              version-specific standard library path to add to @INC
323     lib                 standard library path to add to @INC
324     sitelib-$]          version-specific site library path to add to @INC
325     sitelib             site library path to add to @INC
326     vendorlib-$]        version-specific vendor library path to add to @INC
327     vendorlib           vendor library path to add to @INC
328     PERL*               fallback for all %ENV lookups that begin with "PERL"
329
330 Note the C<$]> in the above is not literal.  Substitute whatever version
331 of perl you want to honor that entry, e.g. C<5.6.0>.  Paths must be
332 separated with semicolons, as usual on win32.
333
334 =item File Globbing
335
336 By default, perl handles file globbing using the File::Glob extension,
337 which provides portable globbing.
338
339 If you want perl to use globbing that emulates the quirks of DOS
340 filename conventions, you might want to consider using File::DosGlob
341 to override the internal glob() implementation.  See L<File::DosGlob> for
342 details.
343
344 =item Using perl from the command line
345
346 If you are accustomed to using perl from various command-line
347 shells found in UNIX environments, you will be less than pleased
348 with what Windows offers by way of a command shell.
349
350 The crucial thing to understand about the Windows environment is that
351 the command line you type in is processed twice before Perl sees it.
352 First, your command shell (usually CMD.EXE on Windows NT, and
353 COMMAND.COM on Windows 9x) preprocesses the command line, to handle
354 redirection, environment variable expansion, and location of the
355 executable to run. Then, the perl executable splits the remaining
356 command line into individual arguments, using the C runtime library
357 upon which Perl was built.
358
359 It is particularly important to note that neither the shell nor the C
360 runtime do any wildcard expansions of command-line arguments (so
361 wildcards need not be quoted).  Also, the quoting behaviours of the
362 shell and the C runtime are rudimentary at best (and may, if you are
363 using a non-standard shell, be inconsistent).  The only (useful) quote
364 character is the double quote (").  It can be used to protect spaces
365 and other special characters in arguments.
366
367 The Windows NT documentation has almost no description of how the
368 quoting rules are implemented, but here are some general observations
369 based on experiments: The C runtime breaks arguments at spaces and
370 passes them to programs in argc/argv.  Double quotes can be used to
371 prevent arguments with spaces in them from being split up.  You can
372 put a double quote in an argument by escaping it with a backslash and
373 enclosing the whole argument within double quotes.  The backslash and
374 the pair of double quotes surrounding the argument will be stripped by
375 the C runtime.
376
377 The file redirection characters "<", ">", and "|" can be quoted by
378 double quotes (although there are suggestions that this may not always
379 be true).  Single quotes are not treated as quotes by the shell or
380 the C runtime, they don't get stripped by the shell (just to make
381 this type of quoting completely useless).  The caret "^" has also
382 been observed to behave as a quoting character, but this appears
383 to be a shell feature, and the caret is not stripped from the command
384 line, so Perl still sees it (and the C runtime phase does not treat
385 the caret as a quote character).
386
387 Here are some examples of usage of the "cmd" shell:
388
389 This prints two doublequotes:
390
391     perl -e "print '\"\"' "
392
393 This does the same:
394
395     perl -e "print \"\\\"\\\"\" "
396
397 This prints "bar" and writes "foo" to the file "blurch":
398
399     perl -e "print 'foo'; print STDERR 'bar'" > blurch
400
401 This prints "foo" ("bar" disappears into nowhereland):
402
403     perl -e "print 'foo'; print STDERR 'bar'" 2> nul
404
405 This prints "bar" and writes "foo" into the file "blurch":
406
407     perl -e "print 'foo'; print STDERR 'bar'" 1> blurch
408
409 This pipes "foo" to the "less" pager and prints "bar" on the console:
410
411     perl -e "print 'foo'; print STDERR 'bar'" | less
412
413 This pipes "foo\nbar\n" to the less pager:
414
415     perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less
416
417 This pipes "foo" to the pager and writes "bar" in the file "blurch":
418
419     perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less
420
421
422 Discovering the usefulness of the "command.com" shell on Windows 9x
423 is left as an exercise to the reader :)
424
425 One particularly pernicious problem with the 4NT command shell for
426 Windows NT is that it (nearly) always treats a % character as indicating
427 that environment variable expansion is needed.  Under this shell, it is
428 therefore important to always double any % characters which you want
429 Perl to see (for example, for hash variables), even when they are
430 quoted.
431
432 =item Building Extensions
433
434 The Comprehensive Perl Archive Network (CPAN) offers a wealth
435 of extensions, some of which require a C compiler to build.
436 Look in http://www.cpan.org/ for more information on CPAN.
437
438 Note that not all of the extensions available from CPAN may work
439 in the Win32 environment; you should check the information at
440 http://testers.cpan.org/ before investing too much effort into
441 porting modules that don't readily build.
442
443 Most extensions (whether they require a C compiler or not) can
444 be built, tested and installed with the standard mantra:
445
446     perl Makefile.PL
447     $MAKE
448     $MAKE test
449     $MAKE install
450
451 where $MAKE is whatever 'make' program you have configured perl to
452 use.  Use "perl -V:make" to find out what this is.  Some extensions
453 may not provide a testsuite (so "$MAKE test" may not do anything or
454 fail), but most serious ones do.
455
456 It is important that you use a supported 'make' program, and
457 ensure Config.pm knows about it.  If you don't have nmake, you can
458 either get dmake from the location mentioned earlier or get an
459 old version of nmake reportedly available from:
460
461     ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe
462
463 Another option is to use the make written in Perl, available from
464 CPAN.
465
466     http://www.cpan.org/modules/by-module/Make/
467
468 You may also use dmake.  See L</"Make"> above on how to get it.
469
470 Note that MakeMaker actually emits makefiles with different syntax
471 depending on what 'make' it thinks you are using.  Therefore, it is
472 important that one of the following values appears in Config.pm:
473
474     make='nmake'        # MakeMaker emits nmake syntax
475     make='dmake'        # MakeMaker emits dmake syntax
476     any other value     # MakeMaker emits generic make syntax
477                             (e.g GNU make, or Perl make)
478
479 If the value doesn't match the 'make' program you want to use,
480 edit Config.pm to fix it.
481
482 If a module implements XSUBs, you will need one of the supported
483 C compilers.  You must make sure you have set up the environment for
484 the compiler for command-line compilation.
485
486 If a module does not build for some reason, look carefully for
487 why it failed, and report problems to the module author.  If
488 it looks like the extension building support is at fault, report
489 that with full details of how the build failed using the perlbug
490 utility.
491
492 =item Command-line Wildcard Expansion
493
494 The default command shells on DOS descendant operating systems (such
495 as they are) usually do not expand wildcard arguments supplied to
496 programs.  They consider it the application's job to handle that.
497 This is commonly achieved by linking the application (in our case,
498 perl) with startup code that the C runtime libraries usually provide.
499 However, doing that results in incompatible perl versions (since the
500 behavior of the argv expansion code differs depending on the
501 compiler, and it is even buggy on some compilers).  Besides, it may
502 be a source of frustration if you use such a perl binary with an
503 alternate shell that *does* expand wildcards.
504
505 Instead, the following solution works rather well. The nice things
506 about it are 1) you can start using it right away; 2) it is more 
507 powerful, because it will do the right thing with a pattern like
508 */*/*.c; 3) you can decide whether you do/don't want to use it; and
509 4) you can extend the method to add any customizations (or even 
510 entirely different kinds of wildcard expansion).
511
512         C:\> copy con c:\perl\lib\Wild.pm
513         # Wild.pm - emulate shell @ARGV expansion on shells that don't
514         use File::DosGlob;
515         @ARGV = map {
516                       my @g = File::DosGlob::glob($_) if /[*?]/;
517                       @g ? @g : $_;
518                     } @ARGV;
519         1;
520         ^Z
521         C:\> set PERL5OPT=-MWild
522         C:\> perl -le "for (@ARGV) { print }" */*/perl*.c
523         p4view/perl/perl.c
524         p4view/perl/perlio.c
525         p4view/perl/perly.c
526         perl5.005/win32/perlglob.c
527         perl5.005/win32/perllib.c
528         perl5.005/win32/perlglob.c
529         perl5.005/win32/perllib.c
530         perl5.005/win32/perlglob.c
531         perl5.005/win32/perllib.c
532
533 Note there are two distinct steps there: 1) You'll have to create
534 Wild.pm and put it in your perl lib directory. 2) You'll need to
535 set the PERL5OPT environment variable.  If you want argv expansion
536 to be the default, just set PERL5OPT in your default startup
537 environment.
538
539 If you are using the Visual C compiler, you can get the C runtime's
540 command line wildcard expansion built into perl binary.  The resulting
541 binary will always expand unquoted command lines, which may not be
542 what you want if you use a shell that does that for you.  The expansion
543 done is also somewhat less powerful than the approach suggested above.
544
545 =item Win32 Specific Extensions
546
547 A number of extensions specific to the Win32 platform are available
548 from CPAN.  You may find that many of these extensions are meant to
549 be used under the Activeware port of Perl, which used to be the only
550 native port for the Win32 platform.  Since the Activeware port does not
551 have adequate support for Perl's extension building tools, these
552 extensions typically do not support those tools either and, therefore,
553 cannot be built using the generic steps shown in the previous section.
554
555 To ensure smooth transitioning of existing code that uses the
556 ActiveState port, there is a bundle of Win32 extensions that contains
557 all of the ActiveState extensions and most other Win32 extensions from
558 CPAN in source form, along with many added bugfixes, and with MakeMaker
559 support.  This bundle is available at:
560
561    http://www.cpan.org/authors/id/GSAR/libwin32-0.18.zip
562
563 See the README in that distribution for building and installation
564 instructions.  Look for later versions that may be available at the
565 same location.
566
567 =item Notes on 64-bit Windows
568
569 Windows .NET Server supports the LLP64 data model on the Intel Itanium
570 architecture.
571
572 The LLP64 data model is different from the LP64 data model that is the
573 norm on 64-bit Unix platforms.  In the former, C<int> and C<long> are
574 both 32-bit data types, while pointers are 64 bits wide.  In addition,
575 there is a separate 64-bit wide integral type, C<__int64>.  In contrast,
576 the LP64 data model that is pervasive on Unix platforms provides C<int>
577 as the 32-bit type, while both the C<long> type and pointers are of
578 64-bit precision.  Note that both models provide for 64-bits of
579 addressability.
580
581 64-bit Windows running on Itanium is capable of running 32-bit x86
582 binaries transparently.  This means that you could use a 32-bit build
583 of Perl on a 64-bit system.  Given this, why would one want to build
584 a 64-bit build of Perl?  Here are some reasons why you would bother:
585
586 =item *
587
588 A 64-bit native application will run much more efficiently on
589 Itanium hardware.
590
591 =item *
592
593 There is no 2GB limit on process size.
594
595 =item *
596
597 Perl automatically provides large file support when built under
598 64-bit Windows.
599
600 =item *
601
602 Embedding Perl inside a 64-bit application.
603
604 =back
605
606 =item Running Perl Scripts
607
608 Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to
609 indicate to the OS that it should execute the file using perl.
610 Win32 has no comparable means to indicate arbitrary files are
611 executables.
612
613 Instead, all available methods to execute plain text files on
614 Win32 rely on the file "extension".  There are three methods
615 to use this to execute perl scripts:
616
617 =over 8
618
619 =item 1
620
621 There is a facility called "file extension associations" that will
622 work in Windows NT 4.0.  This can be manipulated via the two
623 commands "assoc" and "ftype" that come standard with Windows NT
624 4.0.  Type "ftype /?" for a complete example of how to set this
625 up for perl scripts (Say what?  You thought Windows NT wasn't
626 perl-ready? :).
627
628 =item 2
629
630 Since file associations don't work everywhere, and there are
631 reportedly bugs with file associations where it does work, the
632 old method of wrapping the perl script to make it look like a
633 regular batch file to the OS, may be used.  The install process
634 makes available the "pl2bat.bat" script which can be used to wrap
635 perl scripts into batch files.  For example:
636
637         pl2bat foo.pl
638
639 will create the file "FOO.BAT".  Note "pl2bat" strips any
640 .pl suffix and adds a .bat suffix to the generated file.
641
642 If you use the 4DOS/NT or similar command shell, note that
643 "pl2bat" uses the "%*" variable in the generated batch file to
644 refer to all the command line arguments, so you may need to make
645 sure that construct works in batch files.  As of this writing,
646 4DOS/NT users will need a "ParameterChar = *" statement in their
647 4NT.INI file or will need to execute "setdos /p*" in the 4DOS/NT
648 startup file to enable this to work.
649
650 =item 3
651
652 Using "pl2bat" has a few problems:  the file name gets changed,
653 so scripts that rely on C<$0> to find what they must do may not
654 run properly; running "pl2bat" replicates the contents of the
655 original script, and so this process can be maintenance intensive
656 if the originals get updated often.  A different approach that
657 avoids both problems is possible.
658
659 A script called "runperl.bat" is available that can be copied
660 to any filename (along with the .bat suffix).  For example,
661 if you call it "foo.bat", it will run the file "foo" when it is
662 executed.  Since you can run batch files on Win32 platforms simply
663 by typing the name (without the extension), this effectively
664 runs the file "foo", when you type either "foo" or "foo.bat".
665 With this method, "foo.bat" can even be in a different location
666 than the file "foo", as long as "foo" is available somewhere on
667 the PATH.  If your scripts are on a filesystem that allows symbolic
668 links, you can even avoid copying "runperl.bat".
669
670 Here's a diversion:  copy "runperl.bat" to "runperl", and type
671 "runperl".  Explain the observed behavior, or lack thereof. :)
672 Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH
673
674 =item Miscellaneous Things
675
676 A full set of HTML documentation is installed, so you should be
677 able to use it if you have a web browser installed on your
678 system.
679
680 C<perldoc> is also a useful tool for browsing information contained
681 in the documentation, especially in conjunction with a pager
682 like C<less> (recent versions of which have Win32 support).  You may
683 have 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
687 If you find bugs in perl, you can run C<perlbug> to create a
688 bug report (you may have to send it manually if C<perlbug> cannot
689 find a mailer on your system).
690
691 =back
692
693 =head1 BUGS AND CAVEATS
694
695 Norton AntiVirus interferes with the build process, particularly if 
696 set to "AutoProtect, All Files, when Opened". Unlike large applications 
697 the perl build process opens and modifies a lot of files. Having the  
698 the AntiVirus scan each and every one slows build the process significantly.
699 Worse, with PERLIO=stdio the build process fails with peculiar messages
700 as the virus checker interacts badly with miniperl.exe writing configure 
701 files (it seems to either catch file part written and treat it as suspicious,
702 or virus checker may have it "locked" in a way which inhibits miniperl
703 updating it). The build does complete with 
704
705    set PERLIO=perlio
706
707 but that may be just luck. Other AntiVirus software may have similar issues.
708
709 Some of the built-in functions do not act exactly as documented in
710 L<perlfunc>, and a few are not implemented at all.  To avoid
711 surprises, particularly if you have had prior exposure to Perl
712 in other operating environments or if you intend to write code
713 that will be portable to other environments.  See L<perlport>
714 for a reasonably definitive list of these differences.
715
716 Not all extensions available from CPAN may build or work properly
717 in the Win32 environment.  See L</"Building Extensions">.
718
719 Most C<socket()> related calls are supported, but they may not
720 behave as on Unix platforms.  See L<perlport> for the full list.
721
722 Signal handling may not behave as on Unix platforms (where it
723 doesn't exactly "behave", either :).  For instance, calling C<die()>
724 or C<exit()> from signal handlers will cause an exception, since most
725 implementations of C<signal()> on Win32 are severely crippled.
726 Thus, signals may work only for simple things like setting a flag
727 variable in the handler.  Using signals under this port should
728 currently be considered unsupported.
729
730 Please send detailed descriptions of any problems and solutions that 
731 you may find to <F<perlbug@perl.com>>, along with the output produced
732 by C<perl -V>.
733
734 =head1 AUTHORS
735
736 =over 4
737
738 =item Gary Ng E<lt>71564.1743@CompuServe.COME<gt>
739
740 =item Gurusamy Sarathy E<lt>gsar@activestate.comE<gt>
741
742 =item Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt>
743
744 =back
745
746 This document is maintained by Gurusamy Sarathy.
747
748 =head1 SEE ALSO
749
750 L<perl>
751
752 =head1 HISTORY
753
754 This port was originally contributed by Gary Ng around 5.003_24,
755 and borrowed from the Hip Communications port that was available
756 at the time.  Various people have made numerous and sundry hacks
757 since then.
758
759 Borland support was added in 5.004_01 (Gurusamy Sarathy).
760
761 GCC/mingw32 support was added in 5.005 (Nick Ing-Simmons).
762
763 Support for PERL_OBJECT was added in 5.005 (ActiveState Tool Corp).
764
765 Support for fork() emulation was added in 5.6 (ActiveState Tool Corp).
766
767 Win9x support was added in 5.6 (Benjamin Stuhl).
768
769 Support for 64-bit Windows added in 5.8 (ActiveState Corp).
770
771 Last updated: 20 April 2002
772
773 =cut