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