This is the executable for Larry Wall's perl program, ported to MS-DOS. This version is based on patch level 41, but has a number of extensions beyond that. These extensions have been sent to the author, and will appear in future patches. Stay tuned to USENET comp.lang.perl. This was compiled with Microsoft C 6.0 and optimized for space: -Oegcilsza -Gs was used. It has been tested with MS-DOS 3.3 and 4.01 on a 80386 and a 80286, but it should work even on an 8088 and with DOS 2.x. (But it will be slow.) You will probably need 640K to get anything done. Perl was originally ported to MS-DOS by Diomidis Spinellis in March, 1990. That code came out at patch level 18 and has undergone only minor changes through patch level 41. Perl, complete with manuals and all source code, can be obtained by anonymous ftp from jpl-devvax.jpl.nasa.gov (128.149.1.143). -- Len Reed gatech!holos0!lbr November 19, 1990 ------------------- Enhancements in this code that are not in patch level 41. 1) Perl.exe will swap itself to disk (ideally a RAM disk in extended memory) when running subprocesses. This applies to the -P subprocess and to pipe subprocesses and "system" subprocesses. This recovers all but about two K-bytes of the over 300K that perl.exe uses. See README.env for how to control swapping. 2) MKS (Mortice Kern Systems) toolkit compatibility. Perl will accept the extended argument list (8 K-byte or more of pre-globbed arugments) from the MKS Korn shell, and can pass extended argument lists to subprocesses. This is upwardly compatible from the normal 128 byte DOS conventions, and can be disabled. Refer to README.env. 3) Subprocesses now return the proper Unix-like exit status as documented for the system and close (a pipe) commands. 4) As in Unix, subprocesses inherit only handles 0, 1, and 2. (DOS 2.x subprocesses inherit all handles.) 5) -P now works, at least with Microsoft C 6.0. Perl runs a perl subprocess with script doscpp.pl. Editing this script may allow it to work for other compilers. 6) The chdir command has been enhanced (by Tom Dinger) to allow changing the current drive and/or the current directory. Examples: chdir "/abc"; # change to /abc on current drive chdir "a:"; # change default drive to A: chdir "a:/xyz"; # change default drive to A:, then chdir to /xyz chdir "a:qrs"; # change default drive to A:, then chdir to # subdirectory QRS of the current A: directory MKS Korn shell users should note that the semantics of the Korn shell chdir are a little different. Changing drives in perl does not, as in the ksh, return you to the root of the new drive. 7) The -i (edit in place) option now uses the renaming techniques in os2/suffix.c 8) Globbing of incoming arguments now uses the Microsoft setargv code. Globbing is MS-DOS, not Unix, style, so that *.* matches everything. Only double, not single, quotes are supported, but you can put a quote inside quotes by escaping it: perl -e "print \"hello, world\n\";" (MKS Korn shell users use the full Unix-like syntax, of course.) 9) Control of temporary files and scripts is under environmental control so that the executable can be moved from system to system without recompiling. See README.env. 10) Signal handling and temporary file manipulation are married so that the temporary files are deleted whenever perl exits. 11) The Korn shell is used to expand expressions like <*.c> if it is present. If it is not present, perlglob.exe is used as in patch level 18. (But note the name change from earlier versions where it was glob.exe.) 12) Various bug fixes and minor enhancements: -w now works, opendir will now fail when it should, random numbers now work, etc. Acute Problems --------------- 1) The perl exec command (not system, but exec) needs work. It is not MKS compatible and may not work at all under some systems. It may leave temporary files stranded. 2) Perl.exe uses 300 K-bytes before it even calls malloc. It probably should be made to use overlays and certainly has to be made smaller. Desirable Enhancements ---------------------- 1) Using gdbm. 2) Use of the 64-K high memory area. 3) User-controllable use of extended memory. 4) Porting to Turbo C and Unix-dos cross compilers. (This version works only with Microsoft C 5.x and 6.0.) Anyone interested in working on perl.exe or with ideas for DOS perl should write Len Reed at gatech!holos0!lbr.