     Here is a list of changes made to this 32-bit version of MSDOS perl:

***** Changes to make Perl 5.000:

* NOTE: with Perl 5, the following trick to encapsulate Perl inside .BAT
  files no longer work:

	@rem = '
	@echo off
	perl -S %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 
	goto endofperl
	';
	# Insert your perl script here.  Your perl script goes here, and only
	# here.
	__END__
	:endofperl

  Perl complains about "@echo" needing to be quoted.  Use the following
  form instead:

	@echo off
	perl -x -S %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 
	goto endofperl
	#! /usr/bin/perl
	# The previous comment is REQUIRED!  This comment, and the following
	# ones, can be deleted.
	# Insert your perl script here.  Your perl script goes here, and only
	# here.
	__END__
	:endofperl

  Note that the above DEPENDS on having a line that begins with "#!" and
  contains "perl".

* The a2p and s2p programs have been ported.  Check out the "x2p"
  subdirectory.  The "s2p" program is really "s2p.bat"; however, in
  order for this to work, perl.exe, dos4gw.exe, and perlcpp.exe must
  have been properly installed (be somewhere in %PATH).  Both a2p.exe
  and s2p.bat produce MSDOS batch file syntax; the output can be
  placed directly into a .BAT file and immediately executed as such.
  This means that the output will have to be edited if you want to use
  it on some other platform, like Unix.  Doing this is simple: a few
  lines at the beginning and end of the .BAT file need to be deleted.

* Note that the output of s2p.bat is completely unindented.  This is a
  side-effect of the simple C preprocessor used ("perlcpp.exe"), which
  is based upon the very ancient DECUS C preprocessor, and which deletes
  leading whitespace on a line.  If you don't like this, edit the code
  using Emacs' perl-mode, and use the indent-region feature.

* While a perlcpp.exe exists, perl's -P option has not (yet?) been
  implemented.

* MSDOS Perl now verifies that "TMP", "TEMP", or "TEMPDIR" contains a
  valid directory before using it.  However, no check is made to verify
  that files can actually be created in the directory (e.g., the
  directory may be on a read-only network drive).  If none of these
  variables are set, or none contain a valid/existing directory name,
  the root directory of the current drive will be used (actually, the
  current drive *WHEN* the first temp file is created will be used --
  this is an important distinction for those programs that switch
  between drives).  Once a directory is chosen, that directory will
  continue to be used until perl terminates.

* When executing files via system() or pipes opened via open(), any
  forward slashes ("/") in the executable program name are changed to
  backslashes.  You can now use statements like:

	open(IN, "./perl /a/b/fooscr |");

  This gets changed internally to:

	open(IN, ".\perl /a/b/fooscr |");

  Before, this would not work because MSDOS tried to execute the command
  "." with the option "/perl".

* Extra periods (".") in a filename are changed to underscores ("_"), to
  make it slightly easier to port Unix perl scripts (however, this can
  cause other problems).  This allows the use of filenames such as
  "a.b.c.d", which gets translated into "a_b_c.d".  However, note that
  this translation is done ONLY to files accessed directly by perl (via
  stat() or open()); NOTHING is done to filenames used in, for example:

	open(IN, "cat a.b.c.d|");
	system("type a.b.c.d");
	system("mycmd > a.b.c.d");

  Also, the translation is done only for the actual BASE filename.  Any
  directory specification up to the base file name is NOT translated.
  Repeat: directory names are *NOT* translated.  For example, the
  following names get properly translated:

	    This name			    Becomes
	-----------------		-----------------
	/a/b/c/d/e.f.g.h		/a/b/c/d/e_f_g.h
	/a/b/c.d/e.f.g.h		/a/b/c.d/e_f_g.h
	/a/b/c.d/.e.f			/a/b/c.d/_e.f

  But these do not:

	    This name			    Becomes (illegal)
	-----------------		-------------------------
	/a.b/.c.d/.e.f			/a.b/.c.d/_e.f
	/a.b.c.d/e.f.g			/a.b.c.d/e_f.g

* The filename "/dev/null" is now auto-translated into "nul", the MSDOS
  equivalent of the null device.

* Berkeley db now works properly.  A bug in lseek() was found, reported,
  and worked around.  Berkeley db 1.85 is now being used.  GDBM has been
  drop-kicked.

* The perlglob.exe program is now compiled using the 16-bit WATCOM
  compiler.  Borland compilers are now superfluous.  The compact memory
  model (64K code, >64K data) is still being used, to handle large
  directories.

* The default location for the perl library support files is
  "c:\perl5\lib".  This can be changed through the use of the PERLLIB
  environment variable, or by recompiling perl.

* Locations of MSDOS files were shuffled around in possible anticipation
  of possible multi-platform compiles (e.g., MSDOS, Windows, Windows NT,
  etc.).

* The perl documentation can be found as "pod" ("plain old
  documentation") files in the "pod" subdirectory.

* Fixed bug where pipes in subroutines didn't work.  For example, this
  failed:

	open(PIPE, "| myprog");

* An old version of the DOS/4GW extender is being used, because of
  suspected bugs in newer versions of the extender.

* The "makeperl.bat" batch file is no longer needed to compile Perl.
  All flags are now set by the Makefile.


***** Changes made to produce Perl 4.0M3b patchlevel 36:

* Recompiled to again use GDBM.


***** Changes made to produce Perl 4.0M3a patchlevel 36:

* seek() and tell() were still broken in 4.0M3.  The "fixes" were backed
  out and the WATCOM C/C++ 10.0 compiler was used.  This *appears* to
  fix the problem.  [ No, this is not a bug in WATCOM C/C++ 9.5.  It
  appears that Perl 4.0 relies upon certain library calls to act in a
  certain way, when, in fact, ANSI C allows these calls to act in an
  undefined manner under certain circumstances.  The WATCOM 10.0
  compiler appears to have a library that has "undefined actions" that
  act more "Unix-like", and so the problem appears to have gone away.
  Only time will tell. ]


***** Changes made to produce Perl 4.0M3 patchlevel 36:

* Fixed bug that could cause perl to crash (there was an uninitialized
  variable in the command-line processing routines that could cause Perl
  to randomly crash at startup).

* Switched from gdbm to Berkeley db.  DBM associative array performance
  has been significantly increased, at the expense of database size.
  The db databases are, roughly, 1.5 times larger than gdbm databases.
  Note that db databases are incompatible with gdbm databases, and that
  no provision has been made for translating from gdbm to db databases.

  While the sources to gdbm are still included, they are no longer used.
  They are included only because someone might need them.

* Now uses Rational System's DOS/4GW Professional DOS extender for
  quicker startup and access to more memory, at the expense of a larger
  binary executable.

* Fixed to work with in-place editing when SHARE.EXE is loaded.
  However, if SHARE.EXE is loaded, the resulting edited file will have
  only normal file permissions (for example, if the original file was
  hidden, the resulting file will not be hidden).  I have not tested
  this with the new Windows 3.11 vshare.sys driver, but I assume (hope ;-)
  that it works.

* Fixed seek() to work "properly" with sysread() & syswrite(); perl's
  seek() was really fseek(), which played games with stdio-style
  buffering, and so bigperl has to play more games to get this right.
  However, I'm not sure that everything is really working correctly, due
  to the unbelievable machinations involved.

* When using -S to search for a perl script embedded into a .bat file,
  perl was modified to treat an extension of ".bat.bat" as ".bat".  This
  allows the .bat perl script to be specified with or without the .bat
  extension (for those scripts that specify "perl -S %0.bat").

* "Fixed" system() to properly set $?.  Unfortunately, in order for this
  to work in all cases, a DOS shell that returns the exit code is
  needed; DOS 6.2's COMMAND.COM does *NOT* return the exit code, and
  cannot be used if the exit code is desired ("0" is always returned).
  I've verified that 4DOS does return the exit code, and can be used.
  The COMSPEC environment variable must be set to the shell to use.
  Note that "$?" returns the exit code * 256, just like Unix.

* Performing a stat() of a pathname that contains only a drive
  specification (e.g., "C:") no longer returns undef; a "." is appended
  to the drive specification before the stat() is done.  For example,
  this makes the expression:

	-d "C:"

  return true (this is the same as doing `-d "C:."').  With older
  versions of bigperl, undef would be returned.  A pathname that
  consists of only a drive letter and colon is now considered to be a
  directory.

* stat() now works properly with "." and root directories.  Before (for
  example), stat("e:.") would fail if the current directory on drive E:
  was the root directory ("." does not exist in root directories).  This
  now works properly.

* The "pwd" command is now faked internally (and there is no way to
  suppress this).  This is intended to aid in making it easier to port
  Unix programs to msdos.

* Fixed the "pwd.pl" library package to properly work with MSDOS.

* Ported "find.pl" to work with MSDOS.  However, the ported "find.pl" is
  no longer compatible with Unix, and so a copy of the old, unix-
  compatible "find.pl" has been stored in "findunix.pl".

* This version was compiled using Pentium optimizations.  The WATCOM
  C/C++^32 compiler was told to generate optimized code for a Pentium
  CPU.


***** Changes made to produce Perl 4.0M2 patchlevel 36:

* Added better file extension handling for editing files in place.  This
  should have been done for the first release, but it wasn't.  For
  in-place editing, you must now specify a file extension that will
  replace any existing extension, instead of appending to an existing
  extension (which doesn't work with DOS filenames).  However, you must
  specify a file extension; there is no default extension, and this
  version of perl will not blindly obliterate (overwrite) a file when
  doing in-place editing, without making a backup copy.

* Fixed bug where batch files were not recognized as being executable.
  Not only did this affect the "-x" operator, but it prevented batch
  files from being executed via the "-S" command-line option.  You can
  now use batch files to start perl scripts, if you have lines like the
  following in your batch file:

	@rem = '
	@echo off
	perl -S %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 
	goto endofperl
	';
	# Insert your perl script here.  Your perl script goes here, and only
	# here.
	__END__
	:endofperl

* "Better" command-line filename expansion was added.  This wildcard
  expansion routine expands filenames just like the Unix wildcard
  globber, and you can even specify wildcards for the drive letter.
  Unfortunately, you cannot quote wildcards to prevent the wildcard
  expansion routines from expanding wildcards.  If you want something
  like this, you'll have to turn off the wildcard expansion routines and
  expand wildcards in your perl script.

  In perl, the wildcard expansion routines can be turned off by setting
  the "NOWILDEXPAND" environment variable.  You can set this variable to
  any value; all that matters is that it be set.  Note that this works
  only with the perl.exe program; the perlglob.exe program will always
  do unix-like filename globbing.

  Note that unix-like globbing is quite different from MSDOS wildcards.
  For example, with this version of Perl 4.0M2, "*" returns a list of
  *ALL* normal, read-only, and directory files.  The pattern "*.*" will
  return ONLY those files or directories with an extension; files and
  directories without an extension are not returned.  This is quite
  different from regular MSDOS wildcard expansion, where "*.*" will
  return a list of *ALL* files, and not just files with an extension.

* The Borland C++ 3.1 version of perlglob.exe is now compiled using the
  compact memory model (64K code, >64K data), so that it can handle
  large directories.

* The default is now to compile the Borland C++ version of perlglob.exe.

* Included the "wemu387.386" Windows driver in this distribution.  This
  driver was missing from the previous distribution, and it is needed to
  get perl working inside Windows on those PCs without a numeric
  coprocessor.  If you have a numeric coprocessor, you do not need this
  file.

* Added a "-M" option to print out memory statistics at the end of a
  perl run.  Note that the statistics are printed to stderr, which,
  unfortunately, cannot be redirected to a file with many MSDOS shells
  (command.com included).  The most useful statistic is the last line,
  "Estimated incremental memory usage"; this is an estimate of the
  amount of memory malloc()'d by perl during its execution.  Outside of
  Windows, this amount of memory very likely includes the memory
  allocated for the runtime stack (default: 192KB).  However, inside a
  Windows DOS box, the amount probably doesn't include the stack memory.

  However, there are many things that can cause the estimated
  incremental memory usage statistic to be grossly incorrect inside
  Windows.  In particular, running other programs *BEFORE* or while perl
  is running can cause a wildly incorrect statistic.  For this
  statistic, perl just displays the difference between the first block
  of memory allocated and the last block allocated.  Within Windows,
  programs can coexist within the same 32-bit address space.  While a
  given memory block can only belong to a single program, adjacent
  blocks can be owned by different programs, and this fact can greatly
  distort the statistic.

  Also note that most of the statistics may not always make sense when
  perl is run within a Windows DOS box.  For some reason, Windows 3.1
  likes to tell perl that more memory can be allocated than is
  available.

  Further note that this option is subject to change; if a newer version
  of perl should use the "-M" switch for some purpose, this option will
  be moved to some other location.

* Fixed problem where a statically-allocated array was being passed to
  free().  Added tempnam.c to fix this.

* Temporary files (ones created via the MSDOS popen()) are created in
  the root directory of the current drive.  The directory that is used
  can be overridden by setting any of the following enviroment
  variables: "TMP", "TEMP", or "TMPDIR".  The first variable found, in
  the order listed, is the one that is used.

* Got perl's malloc() working with WATCOM C.

* Changed stacksize from 128KB to 192KB.


***** Perl 4.0M1 patchlevel 36 was the first released version (March 15, 1993).
