Perl 5.8.4 for OpenVMS VAX 7.3 -- binary kits v3, 30-SEP-2026 ============================================================== Douglas P. Fields, Jr. (symbolics@lisp.engineer) Perl 5.8.4 (2004) built for OpenVMS VAX V7.3 with Compaq C V6.4, as a BACKUP saveset with a DCL installer and a DCL uninstaller. The target machine needs no compiler, no MMS and no Perl. Core Perl with all its standard extensions (POSIX, Socket, Storable, Encode with every table, Time::HiRes, VMS::DCLsym, VMS::Stdio, ...). No CPAN modules. Perl is distributed under the Artistic License or the GNU General Public License, at your choice. The source kit holds the original source, every patch, and both licence texts. 1. FILES PERL584_VAX_20260930.BCK The default kit: Perl without DEBUGGING. 32,578,560 bytes, 1652 files, 55,818 blocks installed. PERL584_VAX_DEBUG_20260930.BCK The same built with DEBUGGING, for "perl -D". 32,772,096 bytes, 1652 files, 56,109 blocks installed. About 9% more CPU (measured on a simulator). PERL584_INSTALL.COM Installer. PERL584_UNINSTALL.COM Uninstaller. PERL584_VAX_20260930_LIST.LIS, PERL584_VAX_DEBUG_20260930_LIST.LIS BACKUP/LIST of each saveset: every file, with size and date. perl-5.8.4-openvms-vax-source-kit-20260930.zip Original source, patches, licences, configure answers, build, test and kit scripts. perl-5.8.4-openvms-vax-examples-20260930.zip Example programs and tests, with their expected output. SHA256SUMS.TXT SHA-256 of every file above. README.TXT This file. You need one saveset (normally the default one) and the two procedures. Both kits are D_FLOAT builds and both carry the VAX floating point patch described in section 6. 2. REQUIREMENTS * OpenVMS VAX V7.3. (Tested on nothing else.) * SYSTEM, or another account with SYSPRV, to install or uninstall. * The system disk: the kit installs to SYS$COMMON:[SYSLIB.PERL584...] and nowhere else. It cannot be relocated. * Free blocks on SYS$SYSDEVICE: about 122,000 (the installer checks: twice the kit's size plus 10,000). An install uses about 66,200 blocks; the saveset itself is about 63,600. Nothing system-wide is changed: no startup file, SYLOGIN, DCLTABLES, system logical name, installed image, UAF record or quota. 3. INSTALLING 1. Copy the saveset and both .COM files into one directory on the system disk of the VAX. TRANSFER MODES MATTER. Send the .BCK saveset in BINARY. Send the .COM files as TEXT (FTP "ascii"). A procedure sent in binary arrives as 512-byte fixed records and DCL refuses it (%RMS-W-RTB). 2. A binary transfer loses the saveset's record attributes (FTP leaves it as fixed 512-byte records, RCP as Stream_LF). Put them back: $ SET FILE/ATTRIBUTE=(RFM:FIX,LRL:32256,MRS:32256,RAT:NONE) - PERL584_VAX_20260930.BCK The installer refuses the kit, and prints this command, until it is done. 3. As SYSTEM, in that directory: $ @PERL584_INSTALL or, over an existing Perl 5.8.4 from an earlier kit: $ @PERL584_INSTALL "" REPLACE For the DEBUGGING kit instead: $ @PERL584_INSTALL PERL584_VAX_DEBUG_20260930.BCK $ @PERL584_INSTALL PERL584_VAX_DEBUG_20260930.BCK REPLACE REPLACE also switches between the two kits. Only one can be installed at a time. The installer checks privilege, the saveset and the free space, restores the tree, writes a manifest of every file it installed (PERL584_MANIFEST.LIS, in the top directory of the tree) and runs a smoke test, which ends like this: PERL584_INSTALL: smoke test: perl 5.008004 runs from ...perl.exe;1 PERL584_INSTALL: smoke test: DEBUGGING N, D_FLOAT It takes about 35 seconds on a simulated MicroVAX 3900, 3 minutes on a VAXstation 4000/96 and 6 minutes on a VAXstation 4000/60. It refuses, changing nothing, without SYSPRV, without enough space, for a saveset it does not know, or if the tree already exists and REPLACE was not given. 4. Each user, at the prompt or in LOGIN.COM: $ @SYS$COMMON:[SYSLIB.PERL584]PERL_SETUP.COM $ PERL -v This defines PERL_ROOT and PERLSHR as process logical names and the PERL command (and perldoc, pod2text, h2xs, ...) as symbols, for that process only. Which kit is installed: PERL "-V" (with the quotes, or DCL makes it -v) lists DEBUGGING under "Compile-time options" for the DEBUGGING kit and nothing for the default kit. The manifest says so too, in its VARIANT line. 4. UNINSTALLING As SYSTEM, in the directory holding PERL584_UNINSTALL.COM: $ @PERL584_UNINSTALL CHECK ! report only, changes nothing $ @PERL584_UNINSTALL ! remove Perl It deletes only the files the manifest lists, and only if each still has the version, size and revision date it was installed with; then the directories left empty. Anything else in the tree is kept and listed in PERL584_UNINSTALL_REPORT.LIS: files you changed, modules you added, other versions. It refuses, changing nothing, if the manifest is missing or damaged. Run it when nobody is using Perl. The uninstaller was tested many times on simulators, and once on a VAXstation 4000/96: CHECK found all 1487 files unchanged; the uninstall took 4 minutes 13 seconds, deleted 1487 files and 165 directories and removed SYS$COMMON:[SYSLIB.PERL584]; directory listings of SYS$COMMON:[SYSLIB], SYS$MANAGER and SYS$STARTUP before and after showed no other change; a fresh install afterwards took 3 minutes 5 seconds. 5. CHECKING THE INSTALLATION The examples archive has small test sets for an ordinary user, each with its expected output: RUN_TEST.COM (22 basic checks), EXTENSIONS.PL (eight compiled extensions load and work), RUN_EXAMPLES.COM (three VMS-specific programs) and RUN_OVERFLOW.COM (section 6). Key installed files (SHA-256, read back in binary from an installed tree; PERL_SETUP.COM read as text): default kit 9c2e75156ef4c7ca1bcc6fa12e102e0937849f091cc2667b84d90fbd6e73709c PERL.EXE 3fb9e57dd4a2283fb19a8ce308cc8b030e44a92531116d3f319569f7de3b18de PERLSHR.EXE 0ae8d6420868bc0bdcd51ba0f4742d01105eb6e97102819111f60cd14315862f PERL_SETUP.COM DEBUGGING kit 809f28d4e63b287481960c4e36e410ff7b517fe0bf2fe40369a90d19cfb6a5bd PERL.EXE 5f4d43d5920df327707121a4ded273ef29649d9e1f05e252b0cae5086db63eda PERLSHR.EXE 0799c516fa2d701b548bdf344b1a1b6c6d2974865a05352795e0d550ec1922f8 PERL_SETUP.COM MD5 of the savesets, which an installed Perl can compute on the VAX itself with Digest::MD5: a286de7afb526d8165861e69efcff6e3 PERL584_VAX_20260930.BCK a4cadf8864181e23decbe595400a2abc PERL584_VAX_DEBUG_20260930.BCK 6. WHAT IS DIFFERENT FROM PERL 5.8.4 AS RELEASED One patch set, VAXFP_OVERFLOW.DIFF in the source kit, which changes eight source files and only takes effect on VMS without IEEE floating point. VAX D_FLOAT numbers stop at about 1.7e38 and there is no infinity. In Perl 5.8.4 as released, a number or a result beyond that raised a hardware fault and killed Perl: $ PERL -e "print 1.7e38" %SYSTEM-F-FLTOVF_F, arithmetic fault, floating overflow at PC=... With the patch: * A literal or string too large to represent becomes the largest number, 1.70141183460469e+38 (negative: its negative). * + - * / ** (and += and so on), hex() and oct() of very long digit strings, and List::Util::sum give the largest number instead of faulting. Under "use warnings" or -w they warn: Floating point overflow in multiplication (*), result set to 1.70141e+38 at ... * Any other floating fault (in an XS extension, or from a reserved operand made with unpack "d") becomes an ordinary Perl error that eval can catch: "Floating point overflow in ...", "Illegal division by zero in ...", "Reserved floating point operand in ...". One generated file is also changed: PERL_SETUP.COM names the install directory as SYS$SYSDEVICE:[VMS$COMMON.SYSLIB.PERL584.] (the line Configure writes does not work: see the source kit). 7. KNOWN LIMITS * Results that need a number larger than 1.7e38 are wrong, not fatal. The answer is the largest number, which is not the true answer. Example: Math::BigRat's bsqrt of some 40-digit fractions. * $SIG{FPE} is never called. A floating fault becomes a Perl error first; catch it with eval. * Time::HiRes: a sub-second alarm does not interrupt select(). * Assigning to %ENV creates a process logical name, which stays after Perl exits. * "perl -P" (run the C preprocessor) can fail with %DCL-W-TKNOVF when the path of the Perl image is long. Not tried from the installed tree. * perlivp reports 5 of 7 (measured on the earlier, unpatched build): its last two checks (the packlist name, and *.ph headers, which the VMS build never makes) do not fit VMS. * localtime uses the C library's time zone rules, which on VMS 7.3 are the pre-2007 US daylight saving rules, so it is an hour off for some weeks in March and November. * D_FLOAT only. A G_FLOAT build (range to about 9e307) was not made. pack "d" and Storable data are in the build's own floating format. * Terminal and batch only; no CPAN modules; no threads. 8. HOW IT WAS BUILT AND TESTED Both kits were built on a simulated MicroVAX 3900 (SIMH) running OpenVMS VAX V7.3, with Compaq C V6.4-005 and MMS V3.7, from the Perl 5.8.4 release as packed in Craig A. Berry's perlbuild584.zip (2004). Perl's whole test suite ran on each build: 871 test files, 767 passed, 96 skipped (not applicable to VMS), 8 failed, each failure explained in the source kit's README. An earlier, unpatched build was made on a VAXstation 4000/60. The kits were installed and tested on a VAXstation 4000/60 and a VAXstation 4000/96 (the default kit on both, the DEBUGGING kit on the 4000/96, and one uninstall and fresh reinstall on the 4000/96), and on the simulator, where install, switching kits and uninstall were each run several times.