integrate cfgperl changes into mainline
[p5sagit/p5-mst-13.2.git] / README.win32
CommitLineData
68dc0745 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
5aabfad6 7perlwin32 - Perl under Win32
68dc0745 8
9=head1 SYNOPSIS
10
7bac28a0 11These are instructions for building Perl under Windows NT (versions
9036c72f 123.51 or 4.0). Currently, this port is reported to build
26618a56 13under Windows95 using the 4DOS shell--the default shell that infests
14Windows95 will not work (see below). Note this caveat is only about
3e3baf6d 15B<building> perl. Once built, you should be able to B<use> it on
16either Win32 platform (modulo the problems arising from the inferior
17command shell).
68dc0745 18
19=head1 DESCRIPTION
20
3fe9a6f1 21Before you start, you should glance through the README file
68dc0745 22found in the top-level directory where the Perl distribution
23was extracted. Make sure you read and understand the terms under
24which this software is being distributed.
25
f7c603cb 26Also make sure you read L<BUGS AND CAVEATS> below for the
68dc0745 27known limitations of this port.
28
29The INSTALL file in the perl top-level has much information that is
30only relevant to people building Perl on Unix-like systems. In
31particular, you can safely ignore any information that talks about
32"Configure".
33
7bac28a0 34You may also want to look at two other options for building
35a perl that will work on Windows NT: the README.cygwin32 and
3e3baf6d 36README.os2 files, which each give a different set of rules to build
37a Perl that will work on Win32 platforms. Those two methods will
7bac28a0 38probably enable you to build a more Unix-compatible perl, but you
39will also need to download and use various other build-time and
40run-time support software described in those files.
68dc0745 41
42This set of instructions is meant to describe a so-called "native"
43port of Perl to Win32 platforms. The resulting Perl requires no
44additional software to run (other than what came with your operating
9036c72f 45system). Currently, this port is capable of using one of the
46following compilers:
47
48 Borland C++ version 5.02 or later
49 Microsoft Visual C++ version 4.2 or later
9a40db4d 50 Mingw32 with EGCS versions 1.0.2, 1.1
9036c72f 51 Mingw32 with GCC version 2.8.1
52
a29d2910 53The last two of these are high quality freeware compilers. Support
54for them is still experimental.
5aabfad6 55
56This port currently supports MakeMaker (the set of modules that
57is used to build extensions to perl). Therefore, you should be
58able to build and install most extensions found in the CPAN sites.
c90c0ff4 59See L<Usage Hints> below for general hints about this.
68dc0745 60
61=head2 Setting Up
62
63=over 4
64
3e3baf6d 65=item Command Shell
68dc0745 66
26618a56 67Use the default "cmd" shell that comes with NT. Some versions of the
68popular 4DOS/NT shell have incompatibilities that may cause you trouble.
69If the build fails under that shell, try building again with the cmd
70shell. The Makefile also has known incompatibilites with the "command.com"
71shell that comes with Windows95, so building under Windows95 should
72be considered "unsupported". However, there have been reports of successful
b8957cf1 73build attempts using 4DOS/NT version 6.01 under Windows95, using dmake, but
26618a56 74your mileage may vary.
75
76The surest way to build it is on WindowsNT, using the cmd shell.
68dc0745 77
a8deba26 78Make sure the path to the build directory does not contain spaces. The
79build usually works in this circumstance, but some tests will fail.
80
3e3baf6d 81=item Borland C++
82
83If you are using the Borland compiler, you will need dmake, a freely
84available make that has very nice macro features and parallelability.
85(The make that Borland supplies is seriously crippled, and will not
26618a56 86work for MakeMaker builds.)
87
88A port of dmake for win32 platforms is available from:
3e3baf6d 89
26618a56 90 http://www-personal.umich.edu/~gsar/dmake-4.1-win32.zip
91
92Fetch and install dmake somewhere on your path (follow the instructions
93in the README.NOW file).
3e3baf6d 94
95=item Microsoft Visual C++
68dc0745 96
3e3baf6d 97The NMAKE that comes with Visual C++ will suffice for building.
9036c72f 98You will need to run the VCVARS32.BAT file usually found somewhere
99like C:\MSDEV4.2\BIN. This will set your build environment.
68dc0745 100
26618a56 101You can also use dmake to build using Visual C++, provided:
102you set OSRELEASE to "microsft" (or whatever the directory name
103under which the Visual C dmake configuration lives) in your environment,
104and edit win32/config.vc to change "make=nmake" into "make=dmake". The
105latter step is only essential if you want to use dmake as your default
106make for building extensions using MakeMaker.
3e3baf6d 107
9036c72f 108=item Mingw32 with EGCS or GCC
109
110ECGS-1.0.2 binaries can be downloaded from:
111
112 ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/
68dc0745 113
9036c72f 114GCC-2.8.1 binaries are available from:
68dc0745 115
9036c72f 116 http://agnes.dida.physik.uni-essen.de/~janjaap/mingw32/
68dc0745 117
9036c72f 118You only need either one of those, not both. Both bundles come with
119Mingw32 libraries and headers. While both of them work to build perl,
120the EGCS binaries are currently favored by the maintainers, since they
121come with more up-to-date Mingw32 libraries.
122
123Make sure you install the binaries as indicated in the web sites
124above. You will need to set up a few environment variables (usually
125run from a batch file).
68dc0745 126
ee4d903c 127You also need dmake. See L</"Borland C++"> above on how to get it.
128
68dc0745 129=back
130
137443ea 131=head2 Building
68dc0745 132
133=over 4
134
135=item *
136
68dc0745 137Make sure you are in the "win32" subdirectory under the perl toplevel.
137443ea 138This directory contains a "Makefile" that will work with
9036c72f 139versions of NMAKE that come with Visual C++, and a dmake "makefile.mk"
140that will work for all supported compilers. The defaults in the dmake
141makefile are setup to build using the Borland compiler.
68dc0745 142
143=item *
144
9036c72f 145Edit the makefile.mk (or Makefile, if using nmake) and change the values
146of INST_DRV and INST_TOP. You can also enable various build
26618a56 147flags.
148
9036c72f 149Beginning with version 5.005, there is experimental support for building
150a perl interpreter that supports the Perl Object abstraction (courtesy
151ActiveState Tool Corp.) PERL_OBJECT uses C++, and the binaries are
152therefore incompatible with the regular C build. However, the
153PERL_OBJECT build does provide something called the C-API, for linking
a29d2910 154it with extensions that won't compile under PERL_OBJECT. PERL_OBJECT
9cde0e7f 155is not yet supported under GCC or EGCS. WARNING: Binaries built with
156PERL_OBJECT enabled are B<not> compatible with binaries built without.
157Perl installs PERL_OBJECT binaries under a distinct architecture name,
158so they B<can> coexist, though.
9036c72f 159
160Beginning with version 5.005, there is experimental support for building
161a perl interpreter that is capable of native threading. Binaries built
162with thread support enabled are also incompatible with the vanilla C
9cde0e7f 163build. WARNING: Binaries built with threads enabled are B<not> compatible
164with binaries built without. Perl installs threads enabled binaries under
165a distinct architecture name, so they B<can> coexist, though.
9036c72f 166
167At the present time, you cannot enable both threading and PERL_OBJECT.
168You can get only one of them in a Perl interpreter.
169
26618a56 170If you have either the source or a library that contains des_fcrypt(),
171enable the appropriate option in the makefile. des_fcrypt() is not
172bundled with the distribution due to US Government restrictions
173on the export of cryptographic software. Nevertheless, this routine
174is part of the "libdes" library (written by Ed Young) which is widely
175available worldwide, usually along with SSLeay (for example:
176"ftp://fractal.mta.ca/pub/crypto/SSLeay/DES/"). Set CRYPT_SRC to the
177name of the file that implements des_fcrypt(). Alternatively, if
178you have built a library that contains des_fcrypt(), you can set
2d77217b 179CRYPT_LIB to point to the library name. The location above contains
180many versions of the "libdes" library, all with slightly different
181implementations of des_fcrypt(). Older versions have a single,
182self-contained file (fcrypt.c) that implements crypt(), so they may be
183easier to use. A patch against the fcrypt.c found in libdes-3.06 is
184in des_fcrypt.patch.
26618a56 185
186Perl will also build without des_fcrypt(), but the crypt() builtin will
187fail at run time.
c90c0ff4 188
3e3baf6d 189You will also have to make sure CCHOME points to wherever you installed
a8deba26 190your compiler. Make sure this path has no spaces in it. If you
191insist on spaces in your path names, there is no telling what else
192will fail, but you can try putting the path in double quotes. Some
193parts of perl try to accomodate that, but not all pieces do.
194
195The default value for CCHOME in the makefiles for Visual C++
ee4d903c 196may not be correct for some versions. Make sure the default exists
197and is valid.
c90c0ff4 198
9036c72f 199Other options are explained in the makefiles. Be sure to read the
200instructions carefully.
201
68dc0745 202=item *
203
9036c72f 204Type "dmake" (or "nmake" if you are using that make).
68dc0745 205
137443ea 206This should build everything. Specifically, it will create perl.exe,
9036c72f 207perl.dll (or perlcore.dll), and perlglob.exe at the perl toplevel, and
208various other extension dll's under the lib\auto directory. If the build
209fails for any reason, make sure you have done the previous steps correctly.
68dc0745 210
156a3eb7 211The build process may produce "harmless" compiler warnings (more or
212less copiously, depending on how picky your compiler gets). The
213maintainers are aware of these warnings, thankyouverymuch. :)
214
3e3baf6d 215When building using Visual C++, a perl95.exe will also get built. This
216executable is only needed on Windows95, and should be used instead of
217perl.exe, and then only if you want sockets to work properly on Windows95.
218This is necessitated by a bug in the Microsoft C Runtime that cannot be
26618a56 219worked around in the "normal" perl.exe. perl95.exe gets built with its
220own private copy of the C Runtime that is not accessible to extensions
221(which see the DLL version of the CRT). Be aware, therefore, that this
222perl95.exe will have esoteric problems with extensions like perl/Tk that
223themselves use the C Runtime heavily, or want to free() pointers
224malloc()-ed by perl.
3e3baf6d 225
af06e6b3 226You can avoid the perl95.exe problems completely if you either enable
227USE_PERLCRT with Visual C++, or use Borland C++ for building perl. In
228those cases, perl95.exe is not needed and will not be built.
3e3baf6d 229
68dc0745 230=back
231
232=head2 Testing
233
9036c72f 234Type "dmake test" (or "nmake test"). This will run most of the tests from
3e3baf6d 235the testsuite (many tests will be skipped, and but no test should fail).
68dc0745 236
8b88ae92 237If some tests do fail, it may be because you are using a different command
a8deba26 238shell than the native "cmd.exe", or because you are building from a path
239that contains spaces. So don't do that.
68dc0745 240
a8deba26 241If you're using the Borland compiler, you may see a failure in op/taint.t
3e3baf6d 242arising from the inability to find the Borland Runtime DLLs on the system
243default path. You will need to copy the DLLs reported by the messages
244from where Borland chose to install it, into the Windows system directory
245(usually somewhere like C:\WINNT\SYSTEM32), and rerun the test.
246
9036c72f 247The Visual C runtime apparently has a bug that causes posix.t to fail
9a40db4d 248test#2. This usually happens only if you extracted the files in text
249mode. Enable the USE_PERLCRT option in the Makefile to fix this bug.
9036c72f 250
3e3baf6d 251Please report any other failures as described under L<BUGS AND CAVEATS>.
68dc0745 252
137443ea 253=head2 Installation
254
9036c72f 255Type "dmake install" (or "nmake install"). This will put the newly
26618a56 256built perl and the libraries under whatever C<INST_TOP> points to in the
257Makefile. It will also install the pod documentation under
9036c72f 258C<$INST_TOP\$VERSION\lib\pod> and HTML versions of the same under
259C<$INST_TOP\$VERSION\lib\pod\html>. To use the Perl you just installed,
260you will need to add two components to your PATH environment variable,
261C<$INST_TOP\$VERSION\bin>, and C<$INST_TOP\$VERSION\bin\$ARCHNAME>.
262For example:
263
264 set PATH c:\perl\5.005\bin;c:\perl\5.005\bin\MSWin32-x6;%PATH%
265
137443ea 266
7bac28a0 267=head2 Usage Hints
268
269=over 4
270
271=item Environment Variables
272
273The installation paths that you set during the build get compiled
274into perl, so you don't have to do anything additional to start
275using that perl (except add its location to your PATH variable).
276
277If you put extensions in unusual places, you can set PERL5LIB
278to a list of paths separated by semicolons where you want perl
279to look for libraries. Look for descriptions of other environment
26618a56 280variables you can set in L<perlrun>.
281
282You can also control the shell that perl uses to run system() and
283backtick commands via PERL5SHELL. See L<perlrun>.
7bac28a0 284
9a40db4d 285Perl does not depend on the registry, but it can look up certain default
286values if you choose to put them there. Perl attempts to read entries from
287C<HKEY_CURRENT_USER\Software\Perl> and C<HKEY_LOCAL_MACHINE\Software\Perl>.
288Entries in the former override entries in the latter. One or more of the
289following entries (of type REG_SZ or REG_EXPAND_SZ) may be set:
290
291 lib-$] version-specific path to add to @INC
292 lib path to add to @INC
293 sitelib-$] version-specific path to add to @INC
294 sitelib path to add to @INC
295 PERL* fallback for all %ENV lookups that begin with "PERL"
296
297Note the C<$]> in the above is not literal. Substitute whatever version
298of perl you want to honor that entry, e.g. C<5.00502>. Paths must be
299separated with semicolons, as usual on win32.
7bac28a0 300
3e3baf6d 301=item File Globbing
302
303By default, perl spawns an external program to do file globbing.
304The install process installs both a perlglob.exe and a perlglob.bat
305that perl can use for this purpose. Note that with the default
306installation, perlglob.exe will be found by the system before
307perlglob.bat.
308
309perlglob.exe relies on the argv expansion done by the C Runtime of
310the particular compiler you used, and therefore behaves very
311differently depending on the Runtime used to build it. To preserve
dfb634a9 312compatiblity, perlglob.bat (a perl script that can be used portably)
313is installed. Besides being portable, perlglob.bat also offers
314enhanced globbing functionality.
3e3baf6d 315
316If you want perl to use perlglob.bat instead of perlglob.exe, just
317delete perlglob.exe from the install location (or move it somewhere
dfb634a9 318perl cannot find). Using File::DosGlob.pm (which implements the core
319functionality of perlglob.bat) to override the internal CORE::glob()
320works about 10 times faster than spawing perlglob.exe, and you should
321take this approach when writing new modules. See File::DosGlob for
322details.
3e3baf6d 323
7bac28a0 324=item Using perl from the command line
325
326If you are accustomed to using perl from various command-line
327shells found in UNIX environments, you will be less than pleased
328with what Windows NT offers by way of a command shell.
329
330The crucial thing to understand about the "cmd" shell (which is
331the default on Windows NT) is that it does not do any wildcard
332expansions of command-line arguments (so wildcards need not be
333quoted). It also provides only rudimentary quoting. The only
334(useful) quote character is the double quote ("). It can be used to
335protect spaces in arguments and other special characters. The
336Windows NT documentation has almost no description of how the
337quoting rules are implemented, but here are some general observations
338based on experiments: The shell breaks arguments at spaces and
339passes them to programs in argc/argv. Doublequotes can be used
340to prevent arguments with spaces in them from being split up.
341You can put a double quote in an argument by escaping it with
342a backslash and enclosing the whole argument within double quotes.
343The backslash and the pair of double quotes surrounding the
344argument will be stripped by the shell.
345
346The file redirection characters "<", ">", and "|" cannot be quoted
347by double quotes (there are probably more such). Single quotes
348will protect those three file redirection characters, but the
349single quotes don't get stripped by the shell (just to make this
350type of quoting completely useless). The caret "^" has also
351been observed to behave as a quoting character (and doesn't get
352stripped by the shell also).
353
354Here are some examples of usage of the "cmd" shell:
355
356This prints two doublequotes:
357
358 perl -e "print '\"\"' "
359
360This does the same:
361
362 perl -e "print \"\\\"\\\"\" "
363
364This prints "bar" and writes "foo" to the file "blurch":
365
366 perl -e "print 'foo'; print STDERR 'bar'" > blurch
367
368This prints "foo" ("bar" disappears into nowhereland):
369
370 perl -e "print 'foo'; print STDERR 'bar'" 2> nul
371
372This prints "bar" and writes "foo" into the file "blurch":
373
374 perl -e "print 'foo'; print STDERR 'bar'" 1> blurch
375
7bac28a0 376This pipes "foo" to the "less" pager and prints "bar" on the console:
377
378 perl -e "print 'foo'; print STDERR 'bar'" | less
379
380This pipes "foo\nbar\n" to the less pager:
381
7bac28a0 382 perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less
383
384This pipes "foo" to the pager and writes "bar" in the file "blurch":
385
386 perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less
387
388
84902520 389Discovering the usefulness of the "command.com" shell on Windows95
7bac28a0 390is left as an exercise to the reader :)
391
392=item Building Extensions
393
394The Comprehensive Perl Archive Network (CPAN) offers a wealth
395of extensions, some of which require a C compiler to build.
396Look in http://www.perl.com/ for more information on CPAN.
397
398Most extensions (whether they require a C compiler or not) can
399be built, tested and installed with the standard mantra:
400
401 perl Makefile.PL
3e3baf6d 402 $MAKE
403 $MAKE test
404 $MAKE install
7bac28a0 405
ee4d903c 406where $MAKE is whatever 'make' program you have configured perl to
407use. Use "perl -V:make" to find out what this is. Some extensions
408may not provide a testsuite (so "$MAKE test" may not do anything, or
409fail), but most serious ones do.
410
411It is important that you use a supported 'make' program, and
412ensure Config.pm knows about it. If you don't have nmake, you can
413either get dmake from the location mentioned earlier, or get an
414old version of nmake reportedly available from:
415
416 ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe
417
418Another option is to use the make written in Perl, available from
419CPAN:
420
421 http://www.perl.com/CPAN/authors/id/NI-S/Make-0.03.tar.gz
422
423Note that MakeMaker actually emits makefiles with different syntax
424depending on what 'make' it thinks you are using. Therefore, it is
425important that one of the following values appears in Config.pm:
426
427 make='nmake' # MakeMaker emits nmake syntax
428 make='dmake' # MakeMaker emits dmake syntax
429 any other value # MakeMaker emits generic make syntax
430 (e.g GNU make, or Perl make)
431
432If the value doesn't match the 'make' program you want to use,
433edit Config.pm to fix it.
7bac28a0 434
3e3baf6d 435If a module implements XSUBs, you will need one of the supported
436C compilers. You must make sure you have set up the environment for
437the compiler for command-line compilation.
7bac28a0 438
3e3baf6d 439If a module does not build for some reason, look carefully for
7bac28a0 440why it failed, and report problems to the module author. If
441it looks like the extension building support is at fault, report
442that with full details of how the build failed using the perlbug
443utility.
444
9cde0e7f 445=item Command-line Wildcard Expansion
446
447The default command shells on DOS descendant operating systems (such
448as they are) usually do not expand wildcard arguments supplied to
449programs. They consider it the application's job to handle that.
450This is commonly achieved by linking the application (in our case,
451perl) with startup code that the C runtime libraries usually provide.
452However, doing that results in incompatible perl versions (since the
453behavior of the argv expansion code differs depending on the
454compiler, and it is even buggy on some compilers). Besides, it may
455be a source of frustration if you use such a perl binary with an
456alternate shell that *does* expand wildcards.
457
458Instead, the following solution works rather well. The nice things
459about it: 1) you can start using it right away 2) it is more powerful,
460because it will do the right thing with a pattern like */*/*.c
4613) you can decide whether you do/don't want to use it 4) you can
462extend the method to add any customizations (or even entirely
463different kinds of wildcard expansion).
464
465 C:\> copy con c:\perl\lib\Wild.pm
466 # Wild.pm - emulate shell @ARGV expansion on shells that don't
467 use File::DosGlob;
468 @ARGV = map {
469 my @g = File::DosGlob::glob($_) if /[*?]/;
470 @g ? @g : $_;
471 } @ARGV;
472 1;
473 ^Z
474 C:\> set PERL5OPT=-MWild
475 C:\> perl -le "for (@ARGV) { print }" */*/perl*.c
476 p4view/perl/perl.c
477 p4view/perl/perlio.c
478 p4view/perl/perly.c
479 perl5.005/win32/perlglob.c
480 perl5.005/win32/perllib.c
481 perl5.005/win32/perlglob.c
482 perl5.005/win32/perllib.c
483 perl5.005/win32/perlglob.c
484 perl5.005/win32/perllib.c
485
486Note there are two distinct steps there: 1) You'll have to create
487Wild.pm and put it in your perl lib directory. 2) You'll need to
488set the PERL5OPT environment variable. If you want argv expansion
489to be the default, just set PERL5OPT in your default startup
490environment.
491
492If you are using the Visual C compiler, you can get the C runtime's
493command line wildcard expansion built into perl binary. The resulting
494binary will always expand unquoted command lines, which may not be
495what you want if you use a shell that does that for you. The expansion
496done is also somewhat less powerful than the approach suggested above.
497
c90c0ff4 498=item Win32 Specific Extensions
499
500A number of extensions specific to the Win32 platform are available
501from CPAN. You may find that many of these extensions are meant to
502be used under the Activeware port of Perl, which used to be the only
503native port for the Win32 platform. Since the Activeware port does not
504have adequate support for Perl's extension building tools, these
505extensions typically do not support those tools either, and therefore
506cannot be built using the generic steps shown in the previous section.
507
508To ensure smooth transitioning of existing code that uses the
9036c72f 509ActiveState port, there is a bundle of Win32 extensions that contains
510all of the ActiveState extensions and most other Win32 extensions from
c90c0ff4 511CPAN in source form, along with many added bugfixes, and with MakeMaker
512support. This bundle is available at:
513
a8deba26 514 http://www.perl.com/CPAN/authors/id/GSAR/libwin32-0.14.zip
c90c0ff4 515
516See the README in that distribution for building and installation
517instructions. Look for later versions that may be available at the
518same location.
519
156a3eb7 520=item Running Perl Scripts
521
522Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to
523indicate to the OS that it should execute the file using perl.
524Win32 has no comparable means to indicate arbitrary files are
525executables.
526
527Instead, all available methods to execute plain text files on
528Win32 rely on the file "extension". There are three methods
529to use this to execute perl scripts:
530
531=over 8
532
533=item 1
534
535There is a facility called "file extension associations" that will
536work in Windows NT 4.0. This can be manipulated via the two
537commands "assoc" and "ftype" that come standard with Windows NT
5384.0. Type "ftype /?" for a complete example of how to set this
539up for perl scripts (Say what? You thought Windows NT wasn't
540perl-ready? :).
541
542=item 2
543
544Since file associations don't work everywhere, and there are
545reportedly bugs with file associations where it does work, the
546old method of wrapping the perl script to make it look like a
547regular batch file to the OS, may be used. The install process
548makes available the "pl2bat.bat" script which can be used to wrap
549perl scripts into batch files. For example:
550
551 pl2bat foo.pl
552
553will create the file "FOO.BAT". Note "pl2bat" strips any
554.pl suffix and adds a .bat suffix to the generated file.
555
556If you use the 4DOS/NT or similar command shell, note that
557"pl2bat" uses the "%*" variable in the generated batch file to
558refer to all the command line arguments, so you may need to make
559sure that construct works in batch files. As of this writing,
5604DOS/NT users will need a "ParameterChar = *" statement in their
5614NT.INI file, or will need to execute "setdos /p*" in the 4DOS/NT
562startup file to enable this to work.
563
564=item 3
565
566Using "pl2bat" has a few problems: the file name gets changed,
567so scripts that rely on C<$0> to find what they must do may not
568run properly; running "pl2bat" replicates the contents of the
569original script, and so this process can be maintenance intensive
570if the originals get updated often. A different approach that
571avoids both problems is possible.
572
573A script called "runperl.bat" is available that can be copied
574to any filename (along with the .bat suffix). For example,
575if you call it "foo.bat", it will run the file "foo" when it is
576executed. Since you can run batch files on Win32 platforms simply
577by typing the name (without the extension), this effectively
578runs the file "foo", when you type either "foo" or "foo.bat".
579With this method, "foo.bat" can even be in a different location
580than the file "foo", as long as "foo" is available somewhere on
581the PATH. If your scripts are on a filesystem that allows symbolic
582links, you can even avoid copying "runperl.bat".
583
584Here's a diversion: copy "runperl.bat" to "runperl", and type
585"runperl". Explain the observed behavior, or lack thereof. :)
586Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH
587
588=back
589
7bac28a0 590=item Miscellaneous Things
591
592A full set of HTML documentation is installed, so you should be
593able to use it if you have a web browser installed on your
594system.
595
596C<perldoc> is also a useful tool for browsing information contained
597in the documentation, especially in conjunction with a pager
598like C<less> (recent versions of which have Win32 support). You may
599have to set the PAGER environment variable to use a specific pager.
600"perldoc -f foo" will print information about the perl operator
601"foo".
602
603If you find bugs in perl, you can run C<perlbug> to create a
604bug report (you may have to send it manually if C<perlbug> cannot
605find a mailer on your system).
606
607=back
608
68dc0745 609=head1 BUGS AND CAVEATS
610
f7c603cb 611An effort has been made to ensure that the DLLs produced by the two
612supported compilers are compatible with each other (despite the
613best efforts of the compiler vendors). Extension binaries produced
614by one compiler should also coexist with a perl binary built by
615a different compiler. In order to accomplish this, PERL.DLL provides
616a layer of runtime code that uses the C Runtime that perl was compiled
617with. Extensions which include "perl.h" will transparently access
618the functions in this layer, thereby ensuring that both perl and
619extensions use the same runtime functions.
68dc0745 620
8b88ae92 621If you have had prior exposure to Perl on Unix platforms, you will notice
622this port exhibits behavior different from what is documented. Most of the
7bac28a0 623differences fall under one of these categories. We do not consider
624any of them to be serious limitations (especially when compared to the
625limited nature of some of the Win32 OSes themselves :)
68dc0745 626
627=over 8
628
629=item *
630
631C<stat()> and C<lstat()> functions may not behave as documented. They
632may return values that bear no resemblance to those reported on Unix
7bac28a0 633platforms, and some fields (like the the one for inode) may be completely
634bogus.
68dc0745 635
636=item *
637
6890e559 638The following functions are currently unavailable: C<fork()>,
5aabfad6 639C<dump()>, C<chown()>, C<link()>, C<symlink()>, C<chroot()>,
26618a56 640C<setpgrp()> and related security functions, C<setpriority()>,
641C<getpriority()>, C<syscall()>, C<fcntl()>, C<getpw*()>,
2d7a9237 642C<msg*()>, C<shm*()>, C<sem*()>, C<alarm()>, C<socketpair()>,
643C<*netent()>, C<*protoent()>, C<*servent()>, C<*hostent()>,
644C<getnetby*()>.
26618a56 645This list is possibly incomplete.
6890e559 646
647=item *
648
68dc0745 649Various C<socket()> related calls are supported, but they may not
650behave as on Unix platforms.
651
652=item *
653
654The four-argument C<select()> call is only supported on sockets.
655
656=item *
657
f998180f 658The C<ioctl()> call is only supported on sockets (where it provides the
659functionality of ioctlsocket() in the Winsock API).
660
661=item *
662
2d7a9237 663Failure to spawn() a subprocess is indicated by setting $? to "255 << 8".
664C<$?> is set in a way compatible with Unix (i.e. the exitstatus of the
665subprocess is obtained by "$? >> 8", as described in the documentation).
68dc0745 666
667=item *
668
26618a56 669You can expect problems building modules available on CPAN if you
670build perl itself with -DUSE_THREADS. These problems should be resolved
671as we get closer to 5.005.
68dc0745 672
673=item *
674
675C<utime()>, C<times()> and process-related functions may not
676behave as described in the documentation, and some of the
677returned values or effects may be bogus.
678
679=item *
680
3e3baf6d 681Signal handling may not behave as on Unix platforms (where it
f7c603cb 682doesn't exactly "behave", either :). For instance, calling C<die()>
683or C<exit()> from signal handlers will cause an exception, since most
684implementations of C<signal()> on Win32 are severely crippled.
685Thus, signals may work only for simple things like setting a flag
686variable in the handler. Using signals under this port should
687currently be considered unsupported.
68dc0745 688
689=item *
690
1a159553 691C<kill()> is implemented, but doesn't have the semantics of
692C<raise()>, i.e. it doesn't send a signal to the identified process
693like it does on Unix platforms. Instead it immediately calls
694C<TerminateProcess(process,signal)>. Thus the signal argument is
695used to set the exit-status of the terminated process. This behavior
696may change in future.
697
698=item *
699
7bac28a0 700File globbing may not behave as on Unix platforms. In particular,
3e3baf6d 701if you don't use perlglob.bat for globbing, it will understand
702wildcards only in the filename component (and not in the pathname).
703In other words, something like "print <*/*.pl>" will not print all the
704perl scripts in all the subdirectories one level under the current one
705(like it does on UNIX platforms). perlglob.exe is also dependent on
706the particular implementation of wildcard expansion in the vendor
707libraries used to build it (which varies wildly at the present time).
708Using perlglob.bat (or File::DosGlob) avoids these limitations, but
709still only provides DOS semantics (read "warts") for globbing.
68dc0745 710
711=back
712
713Please send detailed descriptions of any problems and solutions that
714you may find to <F<perlbug@perl.com>>, along with the output produced
715by C<perl -V>.
716
717=head1 AUTHORS
718
719=over 4
720
3e3baf6d 721Gary Ng E<lt>71564.1743@CompuServe.COME<gt>
68dc0745 722
3e3baf6d 723Gurusamy Sarathy E<lt>gsar@umich.eduE<gt>
68dc0745 724
3e3baf6d 725Nick Ing-Simmons E<lt>nick@ni-s.u-net.comE<gt>
68dc0745 726
727=back
728
f7c603cb 729This document is maintained by Gurusamy Sarathy.
730
68dc0745 731=head1 SEE ALSO
732
733L<perl>
734
735=head1 HISTORY
736
737This port was originally contributed by Gary Ng around 5.003_24,
738and borrowed from the Hip Communications port that was available
739at the time.
740
741Nick Ing-Simmons and Gurusamy Sarathy have made numerous and
742sundry hacks since then.
743
3e3baf6d 744Borland support was added in 5.004_01 (Gurusamy Sarathy).
745
9a40db4d 746GCC/mingw32 support was added in 5.005 (Nick Ing-Simmons).
747
a8deba26 748Last updated: 29 November 1998
68dc0745 749
750=cut
3e3baf6d 751