perl5.002beta3
authorPerl 5 Porters <perl5-porters@africa.nicoh.com>
Sat, 3 Feb 1996 02:52:27 +0000 (18:52 -0800)
committerLarry Wall <lwall@sems.com>
Sat, 3 Feb 1996 02:52:27 +0000 (18:52 -0800)
[editor's note: no patch file was found for this release, so no
fine-grained changes]

I can't find the password for our ftp server, so I had to drop it into
ftp://ftp.sems.com/pub/incoming/perl5.002b3.tar.gz, which is a drop
directory you can't ls.

The current plan is that Andy is gonna whack on this a little more, and
then release a gamma in a few days when he's happy with it.  So don't get
carried away.  This is now *late* beta.

In other words, have less than the appropriate amount of fun.  :-)

Larry

165 files changed:
Changes.Conf
Configure
INSTALL
MANIFEST
Makefile.SH
README
README.vms
av.c
config_h.SH
cop.h
doio.c
doop.c
dosish.h
dump.c
emacs/cperl-mode.el
embed.h
ext/DB_File/DB_File.pm
ext/DB_File/Makefile.PL
ext/DynaLoader/DynaLoader.pm
ext/DynaLoader/Makefile.PL
ext/Fcntl/Fcntl.pm
ext/Fcntl/Makefile.PL
ext/FileHandle/FileHandle.pm [new file with mode: 0644]
ext/FileHandle/FileHandle.xs [new file with mode: 0644]
ext/FileHandle/Makefile.PL [new file with mode: 0644]
ext/GDBM_File/GDBM_File.pm
ext/GDBM_File/GDBM_File.xs
ext/GDBM_File/Makefile.PL
ext/NDBM_File/Makefile.PL
ext/NDBM_File/NDBM_File.pm
ext/ODBM_File/Makefile.PL
ext/ODBM_File/ODBM_File.pm
ext/ODBM_File/hints/dec_osf.pl [new file with mode: 0644]
ext/POSIX/Makefile.PL
ext/POSIX/POSIX.pm
ext/POSIX/POSIX.pod
ext/POSIX/POSIX.xs
ext/SDBM_File/Makefile.PL
ext/SDBM_File/SDBM_File.pm
ext/Safe/Makefile.PL
ext/Safe/Safe.pm
ext/Safe/Safe.xs
ext/Socket/Makefile.PL
ext/Socket/Socket.pm
global.sym
gv.c
hints/aix.sh
hints/dgux.sh
hints/dynix.sh
hints/irix_5.sh
hints/linux.sh
hints/machten.sh
hints/powerux.sh [moved from hints/powerunix.sh with 92% similarity]
hv.c
installman
installperl
interp.sym
keywords.h
keywords.pl
lib/Carp.pm
lib/DirHandle.pm [new file with mode: 0644]
lib/Exporter.pm
lib/ExtUtils/Liblist.pm
lib/ExtUtils/MM_VMS.pm
lib/ExtUtils/MakeMaker.pm
lib/ExtUtils/Mksymlists.pm [new file with mode: 0644]
lib/ExtUtils/typemap
lib/ExtUtils/xsubpp
lib/FileCache.pm [new file with mode: 0644]
lib/FileHandle.pm
lib/Getopt/Long.pm
lib/IPC/Open2.pm
lib/IPC/Open3.pm
lib/SelectSaver.pm [new file with mode: 0644]
lib/Symbol.pm [new file with mode: 0644]
lib/Term/Cap.pm
lib/Term/ReadLine.pm
lib/Test/Harness.pm
lib/complete.pl
lib/diagnostics.pm
lib/perl5db.pl
lib/subs.pm
lib/vars.pm [new file with mode: 0644]
malloc.c
mg.c
miniperlmain.c
op.c
op.c.orig [deleted file]
op.h
opcode.h
opcode.pl
os2/os2ish.h
perl.c
perl.h
perly.c
perly.c.diff
perly.y
pod/Makefile
pod/buildtoc
pod/perl.pod
pod/perlcall.pod
pod/perldata.pod
pod/perldiag.pod
pod/perldsc.pod
pod/perlembed.pod
pod/perlform.pod
pod/perlfunc.pod
pod/perlipc.pod
pod/perlmod.pod
pod/perlop.pod
pod/perlre.pod
pod/perlrun.pod
pod/perlstyle.pod
pod/perlsub.pod
pod/perlsyn.pod
pod/perltie.pod
pod/perltoc.pod
pod/perltrap.pod
pod/perlxs.pod
pod/perlxstut.pod
pod/pod2text.PL
pod/splitpod [changed mode: 0644->0755]
pp.c
pp_ctl.c
pp_hot.c
pp_sys.c
proto.h
scope.c
sv.c
sv.h
t/README
t/io/pipe.t
t/lib/dirhand.t [new file with mode: 0755]
t/lib/filehand.t [new file with mode: 0755]
t/lib/posix.t
t/lib/safe.t [changed mode: 0644->0755]
t/lib/socket.t [changed mode: 0644->0755]
t/op/overload.t [changed mode: 0644->0755]
t/op/time.t
toke.c
unixish.h
util.c
utils/c2ph.PL
utils/h2ph.PL
utils/h2xs.PL
utils/perlbug.PL
utils/pl2pm.PL [changed mode: 0755->0644]
vms/Makefile
vms/config.vms
vms/descrip.mms
vms/ext/stdio/Makefile.PL [moved from vms/ext/VMS/stdio/Makefile.PL with 100% similarity]
vms/ext/stdio/stdio.pm [moved from vms/ext/VMS/stdio/stdio.pm with 100% similarity]
vms/ext/stdio/stdio.xs [moved from vms/ext/VMS/stdio/stdio.xs with 98% similarity]
vms/gen_shrfls.pl
vms/genconfig.pl
vms/make_command.com [new file with mode: 0644]
vms/mms2make.pl
vms/myconfig.com [new file with mode: 0644]
vms/perlvms.pod
vms/perly_c.vms
vms/perly_h.vms
vms/sockadapt.c
vms/vms.c
vms/vms_yfix.pl
vms/vmsish.h

index a19185f..a956fd7 100644 (file)
@@ -50,6 +50,1815 @@ in the following:
 
 This, and much more, is described in the new INSTALL file.
 
+Here are the detailed changes from 5.002beta1 to 5.002b2 in
+reverse chronolgical order:
+
+=item 5.002beta2
+
+This is patch.2b2 to perl5.002beta1.  
+This takes you from 5.002beta1h to 5.002beta2.
+
+Renaming this as beta2 reflects _my_ feeling that it's time to
+wrap up things for the release of 5.002.
+
+Index: Changes.Conf
+
+    Include changes from patches 2b1a .. 2b1h, as well as this
+    patch.
+
+Index: Configure
+
+    Use nm -D on Linux with shared libraries, if the system
+    supports nm -D.
+
+Prereq:  3.0.1.8 
+*** perl5.002b1h/Configure     Thu Jan  4 11:14:37 1996
+--- perl5.002b2/Configure      Thu Jan 11 17:09:13 1996
+
+Index: MANIFEST
+
+    Include Stub Readline library as part of new debugger.
+    
+    Include hints file dec_osf for ODBM_File extension.
+
+*** perl5.002b1h/MANIFEST      Wed Jan  3 14:37:54 1996
+--- perl5.002b2/MANIFEST       Sat Jan 13 16:30:43 1996
+
+Index: configpm
+
+    Updates from Tim's  -m/-M/-V patch.
+
+*** perl5.002b1h/configpm      Tue Oct 31 11:51:52 1995
+--- perl5.002b2/configpm       Fri Jan 12 10:53:34 1996
+
+Index: doop.c
+
+    Chip's patch to use STDCHAR and U8 nearly everywhere instead of
+    assuming 8-bit chars or ~(char) 0 == 0xff.
+
+*** perl5.002b1h/doop.c        Wed Nov 15 15:08:01 1995
+--- perl5.002b2/doop.c Fri Jan 12 15:05:04 1996
+
+Index: embed.h
+
+    Updates from Tim's  -m/-M/-V patch.
+
+*** perl5.002b1h/embed.h       Thu Jan  4 13:28:08 1996
+--- perl5.002b2/embed.h        Fri Jan 12 15:09:11 1996
+
+Index: ext/DB_File/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/DB_File/Makefile.PL       Tue Nov 14 14:14:17 1995
+--- perl5.002b2/ext/DB_File/Makefile.PL        Tue Jan  9 16:54:17 1996
+
+*** perl5.002b1h/ext/DB_File/Makefile.PL       Tue Nov 14 14:14:17 1995
+--- perl5.002b2/ext/DB_File/Makefile.PL        Sat Jan 13 17:07:11 1996
+
+Index: ext/DynaLoader/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/DynaLoader/Makefile.PL    Tue Jun  6 12:24:37 1995
+--- perl5.002b2/ext/DynaLoader/Makefile.PL     Sat Jan 13 17:16:34 1996
+
+Index: ext/Fcntl/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/Fcntl/Makefile.PL Thu Jan 19 18:58:52 1995
+--- perl5.002b2/ext/Fcntl/Makefile.PL  Sat Jan 13 17:16:38 1996
+
+Index: ext/GDBM_File/GDBM_File.pm
+
+    Make the NAME section a legal paragraph.
+
+*** perl5.002b1h/ext/GDBM_File/GDBM_File.pm    Mon Nov 20 10:22:26 1995
+--- perl5.002b2/ext/GDBM_File/GDBM_File.pm     Fri Jan 12 16:11:38 1996
+
+Index: ext/GDBM_File/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/GDBM_File/Makefile.PL     Wed Feb 22 14:36:36 1995
+--- perl5.002b2/ext/GDBM_File/Makefile.PL      Sat Jan 13 17:08:02 1996
+
+Index: ext/NDBM_File/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/NDBM_File/Makefile.PL     Wed Feb 22 14:36:39 1995
+--- perl5.002b2/ext/NDBM_File/Makefile.PL      Sat Jan 13 17:08:13 1996
+
+Index: ext/ODBM_File/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/ODBM_File/Makefile.PL     Mon Jun  5 15:03:44 1995
+--- perl5.002b2/ext/ODBM_File/Makefile.PL      Sat Jan 13 17:08:22 1996
+
+Index: ext/ODBM_File/hints/dec_osf.pl
+
+    New file.
+
+*** /dev/null  Sat Jan 13 16:48:01 1996
+--- perl5.002b2/ext/ODBM_File/hints/dec_osf.pl Sat Jan 13 16:30:01 1996
+
+Index: ext/POSIX/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/POSIX/Makefile.PL Thu Jan 19 18:59:00 1995
+--- perl5.002b2/ext/POSIX/Makefile.PL  Sat Jan 13 17:08:27 1996
+
+Index: ext/SDBM_File/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/SDBM_File/Makefile.PL     Tue Nov 14 11:16:43 1995
+--- perl5.002b2/ext/SDBM_File/Makefile.PL      Sat Jan 13 17:16:49 1996
+
+Index: ext/SDBM_File/sdbm/sdbm.c
+
+    Give correct prototype for free.
+
+Prereq:  1.16 
+*** perl5.002b1h/ext/SDBM_File/sdbm/sdbm.c     Mon Nov 13 23:01:41 1995
+--- perl5.002b2/ext/SDBM_File/sdbm/sdbm.c      Fri Jan 12 10:33:32 1996
+
+Index: ext/Safe/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/Safe/Makefile.PL  Tue Jan  2 15:43:53 1996
+--- perl5.002b2/ext/Safe/Makefile.PL   Sat Jan 13 17:08:45 1996
+
+Index: ext/Safe/Safe.pm
+
+    Patch from Andreas.
+
+*** perl5.002b1h/ext/Safe/Safe.pm      Tue Jan  2 15:45:27 1996
+--- perl5.002b2/ext/Safe/Safe.pm       Fri Jan 12 10:52:33 1996
+
+Index: ext/Safe/Safe.xs
+
+    Patch for older compilers which had namespace confusion.
+
+*** perl5.002b1h/ext/Safe/Safe.xs      Tue Jan  2 15:45:27 1996
+--- perl5.002b2/ext/Safe/Safe.xs       Fri Jan  5 14:27:47 1996
+
+Index: ext/Socket/Makefile.PL
+
+    Disable prototypes.
+    Disable pod2man.
+
+*** perl5.002b1h/ext/Socket/Makefile.PL        Sat Dec  2 16:23:52 1995
+--- perl5.002b2/ext/Socket/Makefile.PL Sat Jan 13 17:08:52 1996
+
+Index: ext/Socket/Socket.xs
+
+    Use unsigned shorts for ports.
+
+*** perl5.002b1h/ext/Socket/Socket.xs  Sat Dec  2 15:46:20 1995
+--- perl5.002b2/ext/Socket/Socket.xs   Mon Jan  8 21:59:52 1996
+
+Index: global.sym
+
+    Updates from Tim's  -m/-M/-V patch.
+
+*** perl5.002b1h/global.sym    Wed Jan  3 12:01:59 1996
+--- perl5.002b2/global.sym     Fri Jan 12 10:53:34 1996
+
+Index: gv.c
+
+    Avoid VMS sprintf bug with buffers >1024.
+
+*** perl5.002b1h/gv.c  Fri Dec  8 10:37:22 1995
+--- perl5.002b2/gv.c   Fri Jan 12 15:27:27 1996
+
+Index: hints/aix.sh
+
+    Updated
+
+*** perl5.002b1h/hints/aix.sh  Mon Nov 13 23:03:33 1995
+--- perl5.002b2/hints/aix.sh   Fri Jan 12 12:09:48 1996
+
+Index: hints/irix_5.sh
+
+    Updated
+
+*** perl5.002b1h/hints/irix_5.sh       Tue Jan  2 14:53:52 1996
+--- perl5.002b2/hints/irix_5.sh        Tue Jan  9 16:05:11 1996
+
+Index: hints/linux.sh
+
+    Updated
+
+*** perl5.002b1h/hints/linux.sh        Fri Jun  2 10:20:55 1995
+--- perl5.002b2/hints/linux.sh Fri Jan 12 11:43:52 1996
+
+Index: hints/machten.sh
+
+    Updated
+
+*** perl5.002b1h/hints/machten.sh      Sun Mar 12 02:36:04 1995
+--- perl5.002b2/hints/machten.sh       Wed Jan 10 14:53:32 1996
+
+Index: installman
+    
+    Use File::Path::mkpath instead of our own makedir().
+    ./perl installman --man1dir=man1 could lead to infinte recursion
+    in old makedir() routine.  Use the standard library instead.
+
+*** perl5.002b1h/installman    Thu Dec 28 16:06:11 1995
+--- perl5.002b2/installman     Thu Jan 11 16:12:30 1996
+
+Index: installperl
+    
+    Use File::Path::mkpath instead of our own makedir().
+
+*** perl5.002b1h/installperl   Wed Jan  3 14:33:57 1996
+--- perl5.002b2/installperl    Thu Jan 11 16:12:16 1996
+
+Index: interp.sym
+
+    Updates from Tim's  -m/-M/-V patch.
+
+*** perl5.002b1h/interp.sym    Fri Nov 10 17:17:32 1995
+--- perl5.002b2/interp.sym     Fri Jan 12 15:05:04 1996
+
+Index: lib/AutoLoader.pm
+
+    Undo Tim's tainting patch from beta1h.
+
+*** perl5.002b1h/lib/AutoLoader.pm     Tue Jan  2 16:10:36 1996
+--- perl5.002b2/lib/AutoLoader.pm      Fri Jan  5 16:02:28 1996
+
+Index: lib/Carp.pm
+*** perl5.002b1h/lib/Carp.pm   Tue Jan  2 12:10:38 1996
+--- perl5.002b2/lib/Carp.pm    Fri Jan 12 11:23:31 1996
+
+Index: lib/ExtUtils/MM_VMS.pm
+
+    Updated to MakeMaker-5.16.
+
+*** perl5.002b1h/lib/ExtUtils/MM_VMS.pm        Tue Jan  2 14:07:10 1996
+--- perl5.002b2/lib/ExtUtils/MM_VMS.pm Thu Jan  4 21:00:46 1996
+
+Index: lib/ExtUtils/MakeMaker.pm
+
+    Updated to MakeMaker-5.16.
+
+Prereq:  1.129 
+*** perl5.002b1h/lib/ExtUtils/MakeMaker.pm     Tue Jan  2 14:07:10 1996
+--- perl5.002b2/lib/ExtUtils/MakeMaker.pm      Wed Jan 10 16:13:05 1996
+
+Index: lib/File/Find.pm
+
+    Fixed exporting of symbols to work.
+
+*** perl5.002b1h/lib/File/Find.pm      Wed Nov 15 15:20:03 1995
+--- perl5.002b2/lib/File/Find.pm       Wed Jan 10 14:46:24 1996
+
+Index: lib/I18N/Collate.pm
+
+    Updated documentation to match program.
+
+*** perl5.002b1h/lib/I18N/Collate.pm   Fri Jun  2 11:30:49 1995
+--- perl5.002b2/lib/I18N/Collate.pm    Fri Jan  5 16:05:26 1996
+
+Index: lib/Term/ReadLine.pm
+
+    Stub new file to interface to various readline packages, or
+    give stub functions if none are found.
+
+*** /dev/null  Sat Jan 13 16:48:01 1996
+--- perl5.002b2/lib/Term/ReadLine.pm   Fri Jan 12 11:23:31 1996
+
+Index: lib/dumpvar.pl
+
+    Ilya's new debugger.
+
+*** perl5.002b1h/lib/dumpvar.pl        Tue Oct 18 12:36:00 1994
+--- perl5.002b2/lib/dumpvar.pl Fri Jan 12 11:23:31 1996
+
+Index: lib/perl5db.pl
+
+    Ilya's new debugger.
+
+*** perl5.002b1h/lib/perl5db.pl        Tue Jan  2 16:30:33 1996
+--- perl5.002b2/lib/perl5db.pl Fri Jan 12 11:23:31 1996
+
+Index: lib/sigtrap.pm
+
+    Ilya's new debugger.
+
+*** perl5.002b1h/lib/sigtrap.pm        Thu May 25 11:20:13 1995
+--- perl5.002b2/lib/sigtrap.pm Fri Jan 12 11:23:31 1996
+
+Index: miniperlmain.c
+
+    More robust i18nl14n() function from jhi.
+
+*** perl5.002b1h/miniperlmain.c        Thu Jan  4 12:03:37 1996
+--- perl5.002b2/miniperlmain.c Mon Jan  8 22:00:19 1996
+
+Index: myconfig
+
+    Updates from Tim's  -m/-M/-V patch.
+
+*** perl5.002b1h/myconfig      Tue Apr  4 12:13:21 1995
+--- perl5.002b2/myconfig       Fri Jan 12 10:53:35 1996
+
+Index: op.c
+
+    Chip's U8/STDCHAR patch.
+
+*** perl5.002b1h/op.c  Wed Jan  3 14:17:01 1996
+--- perl5.002b2/op.c   Fri Jan 12 15:05:05 1996
+
+Index: perl.c
+
+    Change Copyright date to include 1996.  Hope you don't mind.
+
+    Presumptively call this beta2.
+
+*** perl5.002b1h/perl.c        Thu Jan  4 15:13:53 1996
+--- perl5.002b2/perl.c Fri Jan 12 15:05:05 1996
+
+Index: perl.h
+
+    Updates from Tim's  -m/-M/-V patch.
+
+*** perl5.002b1h/perl.h        Wed Jan  3 12:21:55 1996
+--- perl5.002b2/perl.h Fri Jan 12 15:05:04 1996
+
+Index: pod/Makefile
+
+    Use PERL=../miniperl
+
+*** perl5.002b1h/pod/Makefile  Wed Jan  3 15:06:41 1996
+--- perl5.002b2/pod/Makefile   Fri Jan  5 14:14:30 1996
+
+Index: pod/perlembed.pod
+
+    Give correct usage for the 5th arg to perl_parse (don't pass
+    env).
+
+*** perl5.002b1h/pod/perlembed.pod     Thu Dec 28 16:34:07 1995
+--- perl5.002b2/pod/perlembed.pod      Tue Jan  9 16:02:51 1996
+
+Index: pod/perlfunc.pod
+
+    Work around a pod2man complaint about the -X function.
+
+*** perl5.002b1h/pod/perlfunc.pod      Tue Jan  2 15:39:26 1996
+--- perl5.002b2/pod/perlfunc.pod       Fri Jan 12 11:04:15 1996
+
+*** perl5.002b1h/pod/perlfunc.pod      Tue Jan  2 15:39:26 1996
+--- perl5.002b2/pod/perlfunc.pod       Fri Jan 12 11:04:15 1996
+
+Index: pod/perlovl.pod
+
+    Add DESCRIPTION to head1 line.
+
+*** perl5.002b1h/pod/perlovl.pod       Thu Dec 28 16:34:13 1995
+--- perl5.002b2/pod/perlovl.pod        Thu Jan 11 17:11:16 1996
+
+Index: pod/perlrun.pod
+
+    Updates from Tim's  -m/-M/-V patch.
+
+*** perl5.002b1h/pod/perlrun.pod       Thu Dec 28 16:34:15 1995
+--- perl5.002b2/pod/perlrun.pod        Fri Jan 12 10:53:35 1996
+
+Index: pp_ctl.c
+
+    Debugger patch.
+
+*** perl5.002b1h/pp_ctl.c      Wed Jan  3 12:23:13 1996
+--- perl5.002b2/pp_ctl.c       Fri Jan 12 15:05:05 1996
+
+Index: t/lib/posix.t
+
+    Not having POSIX shouldn't result in test failing TEST harness.
+
+*** perl5.002b1h/t/lib/posix.t Mon Jan 16 22:27:33 1995
+--- perl5.002b2/t/lib/posix.t  Tue Jan  9 15:33:14 1996
+
+Index: t/lib/safe.t
+
+    Not having Safe shouldn't result in test failing TEST harness.
+
+*** perl5.002b1h/t/lib/safe.t  Tue Jan  2 15:43:53 1996
+--- perl5.002b2/t/lib/safe.t   Tue Jan  9 15:35:43 1996
+
+Index: t/lib/socket.t
+
+    Not having Socket shouldn't result in test failing TEST harness.
+
+*** perl5.002b1h/t/lib/socket.t        Fri Dec  8 11:16:01 1995
+--- perl5.002b2/t/lib/socket.t Tue Jan  9 15:35:51 1996
+
+Index: t/op/time.t
+
+   Test missed year-end wrap-around by one day.
+
+*** perl5.002b1h/t/op/time.t   Tue Oct 18 12:46:31 1994
+--- perl5.002b2/t/op/time.t    Wed Jan 10 16:04:41 1996
+
+Index: toke.c
+
+    Chip's U8/STDCHAR patch.
+
+    Tim's "add a ; after PERL5DB" patch.
+
+*** perl5.002b1h/toke.c        Wed Dec  6 13:24:19 1995
+--- perl5.002b2/toke.c Fri Jan 12 15:05:06 1996
+
+Index: utils/h2xs.PL
+
+   Updated to 1.13.  Include Changes template file.
+
+*** perl5.002b1h/utils/h2xs.PL Tue Jan  2 13:50:55 1996
+--- perl5.002b2/utils/h2xs.PL  Thu Jan 11 16:59:48 1996
+
+Index: writemain.SH
+
+    Updates from Tim's  -m/-M/-V patch.
+
+*** perl5.002b1h/writemain.SH  Sat Nov 18 15:51:55 1995
+--- perl5.002b2/writemain.SH   Fri Jan 12 10:53:35 1996
+
+=item patch.2b1h
+
+This is patch.2b1h to perl5.002beta1.  This is mainly a clean-up
+patch.  No progress is made dealing with memory leaks or
+optimizations, though I have used #define STRANGE_MALLOC to
+work around at least some problems.
+
+Index: Configure
+
+    Upgraded to metaconfig patchlevel 60.
+
+    Add in usesafe variable to include or exclude the Safe extension.
+
+    Test for sigaction().
+
+    Check for pager.  This was actually accidental since perldoc.PL
+    mentions $pager and metaconfig has a unit to check for the
+    user's pager.  In retrospect, I decided the Configure check
+    didn't do any harm and some extension writers might decide to
+    use it.
+
+    Always put man1dir under $prefix unless a command line
+    override is used.
+
+    Allow command-line overrides of $man1ext and $man3ext.
+
+
+    Allow man1dir and man3dir names like .../man.1 instead of
+    just .../man1.
+
+    Lots of rearrangements of various pieces of Configure.
+    This might be because I ran metaconfig on a different
+    architecture.
+
+    libc searching now honors $libpth.  Previously, it (almost)
+    always looked in /usr/lib before checking /lib.
+
+    Only prompt user if voidflags is not 15.  If voidflags is 15, then
+    we presume all is well.
+
+
+Prereq:  3.0.1.8 
+*** perl5.002b1g/Configure     Fri Dec  8 11:23:56 1995
+--- perl5.002b1h/Configure     Thu Jan  4 11:14:37 1996
+
+Index: INSTALL
+
+    Document how to skip various extensions.
+
+    Indicate that site_perl is typically under (not beside)
+    /usr/local/lib/perl5.
+
+    Mention how to avoid nm extraction.
+
+
+*** perl5.002b1g/INSTALL       Tue Nov 21 22:54:28 1995
+--- perl5.002b1h/INSTALL       Thu Jan  4 11:06:28 1996
+
+Index: MANIFEST
+
+    Rearrange files some.  Try to move .PL utilities to a separate
+    utils/ subdirectory.
+
+    Merge c2ph.PL and c2ph.doc.
+
+    Add the Safe extension.
+
+*** perl5.002b1g/MANIFEST      Fri Jan  5 11:41:50 1996
+--- perl5.002b1h/MANIFEST      Wed Jan  3 14:37:54 1996
+
+Index: Makefile.SH
+
+    Now builds .PL utilities in the utils/ subdirectory.
+    
+*** perl5.002b1g/Makefile.SH   Fri Dec  8 10:36:33 1995
+--- perl5.002b1h/Makefile.SH   Wed Jan  3 14:28:30 1996
+
+Index: README.vms
+
+    Updated.
+
+*** perl5.002b1g/README.vms    Wed Nov 15 14:23:10 1995
+--- perl5.002b1h/README.vms    Tue Jan  2 16:33:02 1996
+
+Index: XSUB.h
+
+    Updated to match xsubpp-1.929.
+
+*** perl5.002b1g/XSUB.h        Wed Dec  6 13:25:26 1995
+--- perl5.002b1h/XSUB.h        Tue Jan  2 11:57:57 1996
+
+Index: config_h.SH
+
+    Check for HAS_SIGACCTION
+
+    Add STARTPERL define for C code (specifically, a2p).
+
+Prereq:  3.0.1.4 
+*** perl5.002b1g/config_h.SH   Fri Dec  8 11:23:56 1995
+--- perl5.002b1h/config_h.SH   Thu Jan  4 11:14:37 1996
+
+Index: doio.c
+
+    VMS changes for kill.
+
+*** perl5.002b1g/doio.c        Wed Nov 15 14:36:12 1995
+--- perl5.002b1h/doio.c        Tue Jan  2 16:27:07 1996
+
+Index: embed.h
+
+    Auto-generated from global.sym and interp.sym.
+
+*** perl5.002b1g/embed.h       Wed Nov 15 14:48:47 1995
+--- perl5.002b1h/embed.h       Thu Jan  4 13:28:08 1996
+
+Index: ext/DynaLoader/DynaLoader.pm
+
+    VMS-specific updates.
+
+*** perl5.002b1g/ext/DynaLoader/DynaLoader.pm  Fri Nov 10 11:49:00 1995
+--- perl5.002b1h/ext/DynaLoader/DynaLoader.pm  Tue Jan  2 16:28:02 1996
+
+Index: ext/DynaLoader/dl_vms.xs
+
+    Updated to Oct 31, 1995 version.
+
+*** perl5.002b1g/ext/DynaLoader/dl_vms.xs      Tue Oct 31 11:06:06 1995
+--- perl5.002b1h/ext/DynaLoader/dl_vms.xs      Tue Jan  2 16:27:32 1996
+
+Index: global.sym
+
+    Added maxo and save_pptr items.
+
+*** perl5.002b1g/global.sym    Wed Nov 15 14:58:14 1995
+--- perl5.002b1h/global.sym    Wed Jan  3 12:01:59 1996
+
+Index: hints/README.hints
+
+    List of tested systems updated a little.
+
+*** perl5.002b1g/hints/README.hints    Fri May  5 14:12:06 1995
+--- perl5.002b1h/hints/README.hints    Tue Dec 12 20:03:36 1995
+
+Index: hints/irix_5.sh
+
+    Note SGI stdio/malloc related problem.
+
+*** perl5.002b1g/hints/irix_5.sh       Fri May  5 14:07:52 1995
+--- perl5.002b1h/hints/irix_5.sh       Tue Jan  2 14:53:52 1996
+
+Index: hints/irix_6.sh
+
+    Address change.
+    
+    Note SGI stdio/malloc related problem.
+
+*** perl5.002b1g/hints/irix_6.sh       Fri May  5 14:08:41 1995
+--- perl5.002b1h/hints/irix_6.sh       Tue Jan  2 14:54:04 1996
+
+Index: hints/irix_6_2.sh
+    
+    Address change.
+
+*** perl5.002b1g/hints/irix_6_2.sh     Mon Nov 20 11:16:55 1995
+--- perl5.002b1h/hints/irix_6_2.sh     Tue Jan  2 14:49:45 1996
+
+Index: hints/os2.sh
+
+    Updated.
+
+*** perl5.002b1g/hints/os2.sh  Tue Nov 14 11:07:33 1995
+--- perl5.002b1h/hints/os2.sh  Tue Dec 26 17:51:16 1995
+
+Index: installman
+
+    Use fork if available.
+
+*** perl5.002b1g/installman    Fri Jan  5 11:41:52 1996
+--- perl5.002b1h/installman    Thu Dec 28 16:06:11 1995
+
+Index: installperl
+
+    Use new location of utility scripts.
+
+    Eliminate double '//' and extra "".
+
+*** perl5.002b1g/installperl   Mon Nov 20 12:55:03 1995
+--- perl5.002b1h/installperl   Wed Jan  3 14:33:57 1996
+
+Index: lib/AutoLoader.pm
+
+    Avoid tainting problems.
+
+*** perl5.002b1g/lib/AutoLoader.pm     Wed Nov 15 15:04:59 1995
+--- perl5.002b1h/lib/AutoLoader.pm     Tue Jan  2 16:10:36 1996
+
+Index: lib/Carp.pm
+
+    Honor trailing \n in messages, as is done for warn().
+    
+*** perl5.002b1g/lib/Carp.pm   Thu May 25 11:16:07 1995
+--- perl5.002b1h/lib/Carp.pm   Tue Jan  2 12:10:38 1996
+
+Index: lib/Cwd.pm
+
+    VMS patches.
+
+*** perl5.002b1g/lib/Cwd.pm    Fri Jan  5 11:41:52 1996
+--- perl5.002b1h/lib/Cwd.pm    Tue Jan  2 16:28:57 1996
+
+Index: lib/Exporter.pm
+
+    Include Tim Bunce's enhanced Exporter.  I also tried to
+    resolve the two copies of documentation that I had.
+
+*** perl5.002b1g/lib/Exporter.pm       Fri Jan  5 11:41:52 1996
+--- perl5.002b1h/lib/Exporter.pm       Thu Jan  4 14:02:08 1996
+
+Index: lib/ExtUtils/MM_VMS.pm
+
+    New file.  Incorporates VMS-specific items into MakeMaker.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/lib/ExtUtils/MM_VMS.pm        Tue Jan  2 14:07:10 1996
+
+Index: lib/ExtUtils/MakeMaker.pm
+Prereq:  1.116 
+
+    Updated from 5.12 to 5.16.
+
+*** perl5.002b1g/lib/ExtUtils/MakeMaker.pm     Fri Jan  5 11:41:53 1996
+--- perl5.002b1h/lib/ExtUtils/MakeMaker.pm     Tue Jan  2 14:07:10 1996
+
+Index: lib/ExtUtils/Manifest.pm
+
+    Updated from MakeMaker 5.12 to 5.16.
+
+*** perl5.002b1g/lib/ExtUtils/Manifest.pm      Fri Jan  5 11:41:54 1996
+--- perl5.002b1h/lib/ExtUtils/Manifest.pm      Tue Jan  2 14:07:10 1996
+
+Index: lib/ExtUtils/Mkbootstrap.pm
+
+    Updated from MakeMaker 5.12 to 5.16.
+
+*** perl5.002b1g/lib/ExtUtils/Mkbootstrap.pm   Fri Jan  5 11:41:54 1996
+--- perl5.002b1h/lib/ExtUtils/Mkbootstrap.pm   Tue Jan  2 14:07:10 1996
+
+Index: lib/ExtUtils/xsubpp
+
+    Updated from xsubpp-1.924 to 1.929.
+
+*** perl5.002b1g/lib/ExtUtils/xsubpp   Sun Nov 26 16:04:50 1995
+--- perl5.002b1h/lib/ExtUtils/xsubpp   Tue Jan  2 16:29:59 1996
+
+Index: lib/File/Path.pm
+
+    VMS-specific changes.
+
+*** perl5.002b1g/lib/File/Path.pm      Wed Nov 15 15:20:31 1995
+--- perl5.002b1h/lib/File/Path.pm      Tue Jan  2 16:30:21 1996
+
+Index: lib/Pod/Text.pm
+
+    New file.  This was created by Dov (???) and enhanced
+    by Kenneth Albanowski, but all based on Tom C.'s pod2text.
+    Unfortunately, they used a version of pod2text earlier than
+    the one in patch.2b1g.  I've tried to straighten this all out.
+
+    Equally unfortunately, we've all left Tom as the AUTHOR, even
+    though we can't hold him responsible for errors he didn't
+    introduce.  Oh well.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/lib/Pod/Text.pm       Thu Jan  4 14:16:50 1996
+
+Index: lib/Sys/Hostname.pm
+
+    VMS-specific changes.
+
+*** perl5.002b1g/lib/Sys/Hostname.pm   Fri Jan  5 11:41:55 1996
+--- perl5.002b1h/lib/Sys/Hostname.pm   Tue Jan  2 16:30:49 1996
+
+Index: lib/diagnostics.pm
+
+    A patch from Tim Bunce (?)
+
+*** perl5.002b1g/lib/diagnostics.pm    Wed Dec  6 13:58:42 1995
+--- perl5.002b1h/lib/diagnostics.pm    Tue Jan  2 12:10:37 1996
+
+Index: lib/perl5db.pl
+
+    VMS-specific changes.
+
+*** perl5.002b1g/lib/perl5db.pl        Wed Nov 15 22:37:45 1995
+--- perl5.002b1h/lib/perl5db.pl        Tue Jan  2 16:30:33 1996
+
+Index: lib/splain
+
+    Fix some old typos.
+
+*** perl5.002b1g/lib/splain    Tue Nov 14 16:16:36 1995
+--- perl5.002b1h/lib/splain    Tue Jan  2 12:10:37 1996
+
+Index: makeaperl.SH
+
+    Use the 'new' startperl variable.
+
+*** perl5.002b1g/makeaperl.SH  Thu Jun  1 11:20:52 1995
+--- perl5.002b1h/makeaperl.SH  Tue Jan  2 12:11:28 1996
+
+Index: mg.c
+
+    Set up a reliable signal handler, courtesy of Kenneth Albanowski.
+    This needs to be documented still.  The idea is that even on
+    System V systems, you won't have to reset the signal handler as
+    the first action inside your signal handler.
+
+*** perl5.002b1g/mg.c  Wed Nov 15 15:44:10 1995
+--- perl5.002b1h/mg.c  Thu Jan  4 13:49:12 1996
+
+Index: minimod.pl
+
+    Give a proper NAME description.
+
+*** perl5.002b1g/minimod.pl    Sun Nov 26 16:19:55 1995
+--- perl5.002b1h/minimod.pl    Tue Jan  2 14:30:24 1996
+
+Index: miniperlmain.c
+
+    Better locale handling, courtesy of jhi.
+
+    Include a proper cast of NULL for non-prototyping compilers.
+
+*** perl5.002b1g/miniperlmain.c        Sat Nov 18 15:48:10 1995
+--- perl5.002b1h/miniperlmain.c        Thu Jan  4 12:03:37 1996
+
+Index: op.c
+
+   Turn on USE_OP_MASK by default for the Safe extension.  I'll be
+   interested in benchmark results with this on and off.
+
+*** perl5.002b1g/op.c  Wed Nov 15 22:10:36 1995
+--- perl5.002b1h/op.c  Wed Jan  3 14:17:01 1996
+
+Index: os2/Makefile.SHs
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/Makefile.SHs      Sun Dec 24 13:55:22 1995
+
+Index: os2/README
+
+    Updated.
+
+*** perl5.002b1g/os2/README    Tue Nov 14 14:42:13 1995
+--- perl5.002b1h/os2/README    Tue Dec 26 18:31:32 1995
+
+Index: os2/diff.MANIFEST
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/diff.MANIFEST     Tue Dec 26 19:54:12 1995
+
+Index: os2/diff.Makefile
+
+    Updated
+
+*** perl5.002b1g/os2/diff.Makefile     Tue Nov 14 11:09:29 1995
+--- perl5.002b1h/os2/diff.Makefile     Fri Dec  8 00:09:56 1995
+
+Index: os2/diff.c2ph
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/diff.c2ph Thu Dec  7 15:25:52 1995
+
+Index: os2/diff.configure
+
+    Updated.
+
+*** perl5.002b1g/os2/diff.configure    Sun Nov 12 01:31:34 1995
+--- perl5.002b1h/os2/diff.configure    Tue Dec 26 19:57:08 1995
+
+Index: os2/diff.db_file
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/diff.db_file      Tue Dec 19 02:14:54 1995
+
+Index: os2/diff.init
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/diff.init Sun Nov 26 15:05:48 1995
+
+Index: os2/diff.installman
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/diff.installman   Wed Nov 22 03:50:26 1995
+
+Index: os2/diff.installperl
+
+    Updated.
+
+*** perl5.002b1g/os2/diff.installperl  Tue Nov 14 11:09:28 1995
+--- perl5.002b1h/os2/diff.installperl  Wed Nov 22 02:59:58 1995
+
+Index: os2/diff.mkdep
+
+    Updated.
+
+*** perl5.002b1g/os2/diff.mkdep        Tue Nov 14 11:09:28 1995
+--- perl5.002b1h/os2/diff.mkdep        Sun Nov 26 15:00:24 1995
+
+Index: os2/diff.rest
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/diff.rest Thu Dec  7 16:03:26 1995
+
+Index: os2/diff.x2pMakefile
+
+    Updated.
+
+*** perl5.002b1g/os2/diff.x2pMakefile  Tue Nov 14 11:09:29 1995
+--- perl5.002b1h/os2/diff.x2pMakefile  Wed Nov 22 21:55:42 1995
+
+Index: os2/notes
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/notes     Tue Dec 26 19:55:30 1995
+
+Index: os2/os2.c
+
+    Updated.
+
+*** perl5.002b1g/os2/os2.c     Tue Nov 14 11:07:33 1995
+--- perl5.002b1h/os2/os2.c     Sun Dec 24 13:43:02 1995
+
+Index: os2/os2ish.h
+
+    Updated.
+
+*** perl5.002b1g/os2/os2ish.h  Tue Nov 14 11:07:33 1995
+--- perl5.002b1h/os2/os2ish.h  Mon Dec 18 16:17:38 1995
+
+Index: os2/perl2cmd.pl
+
+    New file.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/os2/perl2cmd.pl       Tue Dec 19 11:20:42 1995
+
+Index: perl.c
+
+    Updated to say beta1h.
+
+    Move VMS env code.
+
+*** perl5.002b1g/perl.c        Fri Jan  5 11:41:56 1996
+--- perl5.002b1h/perl.c        Thu Jan  4 15:13:53 1996
+
+Index: perl.h
+
+    5.002beta1 attempted some memory optimizations, but unfortunately
+    they can result in a memory leak problem.  This can be
+    avoided by #define STRANGE_MALLOC.  I do that here until
+    consensus is reached on a better strategy for handling the
+    memory optimizations.
+
+    Include maxo for the maximum number of operations (needed
+    for the Safe extension).
+
+*** perl5.002b1g/perl.h        Wed Nov 15 17:13:16 1995
+--- perl5.002b1h/perl.h        Wed Jan  3 12:21:55 1996
+
+Index: pod/Makefile
+
+    Include -I../lib so that pod2* can find the appropriate libraries.
+
+    The pod names are once again sorted.
+
+    The PERL line is wrong.  It should read 
+       PERL = ../miniperl
+    This file is automatically generated, but I happened to do it on
+    a system without miniperl avaialable, so my script fell back on
+    the perl default.
+
+*** perl5.002b1g/pod/Makefile  Fri Jan  5 11:41:56 1996
+--- perl5.002b1h/pod/Makefile  Wed Jan  3 15:06:41 1996
+
+Index: pod/perlmod.pod
+
+    Mention the Safe extension.
+
+*** perl5.002b1g/pod/perlmod.pod       Fri Jan  5 11:41:59 1996
+--- perl5.002b1h/pod/perlmod.pod       Thu Jan  4 13:52:14 1996
+
+Index: pod/perltoc.pod
+
+    Rebuilt using  pod/buildtoc and fmt.
+
+*** perl5.002b1g/pod/perltoc.pod       Fri Jan  5 11:42:00 1996
+--- perl5.002b1h/pod/perltoc.pod       Thu Jan  4 14:04:20 1996
+
+Index: pod/pod2text.PL
+*** perl5.002b1g/pod/pod2text.PL       Fri Jan  5 11:42:01 1996
+--- perl5.002b1h/pod/pod2text.PL       Tue Jan  2 14:28:24 1996
+
+Index: pp_sys.c
+
+    VMS changes ?  
+
+*** perl5.002b1g/pp_sys.c      Wed Nov 15 21:51:33 1995
+--- perl5.002b1h/pp_sys.c      Tue Jan  2 16:32:50 1996
+
+Index: t/lib/safe.t
+
+    New test.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/t/lib/safe.t  Tue Jan  2 15:43:53 1996
+
+Index: utils/Makefile
+
+    New file to build the utilities.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/utils/Makefile        Wed Jan  3 14:06:18 1996
+
+Index: utils/c2ph.PL
+
+    Ungracefully merge the old c2ph.doc in as an embedded pod.
+    
+    Delete lots of trailing spaces and tabs that have crept in.
+    
+Prereq:  1.7 
+*** perl5.002b1g/utils/c2ph.PL Mon Nov 20 12:36:17 1995
+--- perl5.002b1h/utils/c2ph.PL Wed Jan  3 14:05:41 1996
+
+Index: utils/h2ph.PL
+
+    Add patch for AIX files which sometimes have #include<foo.h>,
+    i.e., no spaces after the word 'include'.
+
+*** perl5.002b1g/utils/h2ph.PL Mon Nov 27 10:14:50 1995
+--- perl5.002b1h/utils/h2ph.PL Tue Jan  2 16:13:31 1996
+
+Index: utils/h2xs.PL
+
+    Add version stuff.
+
+    The old version didn't have a number.  This one's called 1.12.
+
+*** perl5.002b1g/utils/h2xs.PL Sun Nov 19 22:37:58 1995
+--- perl5.002b1h/utils/h2xs.PL Tue Jan  2 13:50:55 1996
+
+Index: utils/perlbug.PL
+
+    New utility.
+
+*** /dev/null  Fri Jan  5 12:48:01 1996
+--- perl5.002b1h/utils/perlbug.PL      Sat Nov 18 16:15:13 1995
+
+Index: utils/perldoc.PL
+
+    Better error handling.
+
+    Updated to use Pod::Text, if available.
+    
+    More VMS friendly.
+
+    New -u option .
+
+*** perl5.002b1g/utils/perldoc.PL      Tue Nov 14 14:57:57 1995
+--- perl5.002b1h/utils/perldoc.PL      Tue Jan  2 14:28:08 1996
+
+Index: utils/pl2pm.PL
+
+    Changed into a .PL extract file for proper setting of
+    $startperl.
+
+    Add _minimal_ pod documentation.
+
+*** perl5.002b1g/utils/pl2pm.PL        Mon Jan 16 23:45:07 1995
+--- perl5.002b1h/utils/pl2pm.PL        Wed Jan  3 14:14:57 1996
+
+Index: vms/Makefile
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/Makefile  Wed Nov 15 22:05:15 1995
+--- perl5.002b1h/vms/Makefile  Tue Jan  2 16:33:53 1996
+
+Index: vms/config.vms
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/config.vms        Wed Nov 15 22:05:26 1995
+--- perl5.002b1h/vms/config.vms        Tue Jan  2 16:33:09 1996
+
+Index: vms/descrip.mms
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/descrip.mms       Wed Nov 15 22:05:38 1995
+--- perl5.002b1h/vms/descrip.mms       Tue Jan  2 16:33:18 1996
+
+Index: vms/ext/Filespec.pm
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/ext/Filespec.pm   Sun Mar 12 03:14:26 1995
+--- perl5.002b1h/vms/ext/Filespec.pm   Tue Jan  2 16:33:25 1996
+
+Index: vms/ext/MM_VMS.pm
+
+    Updated for VMS.  This might be obsolete now that we have
+    lib/ExtUtils/MM_VMS.pm.
+
+*** perl5.002b1g/vms/ext/MM_VMS.pm     Wed Nov 15 22:05:48 1995
+--- perl5.002b1h/vms/ext/MM_VMS.pm     Tue Jan  2 16:33:32 1996
+
+Index: vms/gen_shrfls.pl
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/gen_shrfls.pl     Wed Nov 15 22:06:27 1995
+--- perl5.002b1h/vms/gen_shrfls.pl     Tue Jan  2 16:33:47 1996
+
+Index: vms/genconfig.pl
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/genconfig.pl      Sun Mar 12 03:14:36 1995
+--- perl5.002b1h/vms/genconfig.pl      Tue Jan  2 16:33:39 1996
+
+Index: vms/perlvms.pod
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/perlvms.pod       Wed Nov 15 22:06:32 1995
+--- perl5.002b1h/vms/perlvms.pod       Tue Jan  2 16:33:59 1996
+
+Index: vms/test.com
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/test.com  Wed Nov 15 22:06:59 1995
+--- perl5.002b1h/vms/test.com  Tue Jan  2 16:34:07 1996
+
+Index: vms/vms.c
+
+    Updated for VMS.
+
+Prereq:  2.2 
+*** perl5.002b1g/vms/vms.c     Wed Nov 15 22:07:10 1995
+--- perl5.002b1h/vms/vms.c     Tue Jan  2 16:34:13 1996
+
+Index: vms/vmsish.h
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/vmsish.h  Wed Nov 15 22:07:24 1995
+--- perl5.002b1h/vms/vmsish.h  Tue Jan  2 16:34:20 1996
+
+Index: vms/writemain.pl
+
+    Updated for VMS.
+
+*** perl5.002b1g/vms/writemain.pl      Mon Mar  6 20:00:18 1995
+--- perl5.002b1h/vms/writemain.pl      Tue Jan  2 16:34:26 1996
+
+Index: x2p/a2py.c
+
+    Use new config_h.SH STARTPERL #define.
+
+*** perl5.002b1g/x2p/a2py.c    Tue Mar  7 11:53:10 1995
+--- perl5.002b1h/x2p/a2py.c    Tue Jan  2 12:11:28 1996
+
+Index: x2p/find2perl.PL
+
+    Add missing "" around $Config{startperl}.
+
+*** perl5.002b1g/x2p/find2perl.PL      Sun Nov 19 23:11:58 1995
+--- perl5.002b1h/x2p/find2perl.PL      Tue Jan  2 12:11:27 1996
+
+Index: x2p/s2p.PL
+
+    Add missing "" around $Config{startperl}.
+
+*** perl5.002b1g/x2p/s2p.PL    Sun Nov 19 23:14:59 1995
+--- perl5.002b1h/x2p/s2p.PL    Tue Jan  2 12:11:27 1996
+
+
+=item patch.2b1g
+
+This is patch.2b1g to perl5.002beta1.
+
+This patch is just my packaging of Tom's documentation patches
+he released as patch.2b1g.
+
+Index: MANIFEST
+*** perl5.002b1f/MANIFEST      Fri Dec  8 13:34:53 1995
+--- perl5.002b1g/MANIFEST      Thu Dec 21 13:00:58 1995
+
+Index: ext/DB_File/DB_File.pm
+*** perl5.002b1f/ext/DB_File/DB_File.pm        Tue Nov 14 14:14:25 1995
+--- perl5.002b1g/ext/DB_File/DB_File.pm        Thu Dec 21 13:00:58 1995
+
+Index: ext/POSIX/POSIX.pm
+*** perl5.002b1f/ext/POSIX/POSIX.pm    Fri Dec  8 10:23:54 1995
+--- perl5.002b1g/ext/POSIX/POSIX.pm    Thu Dec 21 13:00:58 1995
+
+Index: ext/POSIX/POSIX.pod
+*** perl5.002b1f/ext/POSIX/POSIX.pod   Fri Dec  8 10:30:40 1995
+--- perl5.002b1g/ext/POSIX/POSIX.pod   Thu Dec 21 13:00:59 1995
+
+Index: ext/Safe/Makefile.PL
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/ext/Safe/Makefile.PL  Thu Dec 21 13:01:00 1995
+
+Index: ext/Safe/Safe.pm
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/ext/Safe/Safe.pm      Thu Dec 21 13:01:00 1995
+
+Index: ext/Safe/Safe.xs
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/ext/Safe/Safe.xs      Thu Dec 21 13:01:00 1995
+
+Index: ext/Socket/Socket.pm
+*** perl5.002b1f/ext/Socket/Socket.pm  Wed Dec  6 13:58:41 1995
+--- perl5.002b1g/ext/Socket/Socket.pm  Thu Dec 21 13:01:00 1995
+
+Index: installman
+*** perl5.002b1f/installman    Mon Nov  6 11:16:43 1995
+--- perl5.002b1g/installman    Thu Dec 21 13:01:00 1995
+
+Index: lib/AutoSplit.pm
+*** perl5.002b1f/lib/AutoSplit.pm      Wed Nov 15 15:06:19 1995
+--- perl5.002b1g/lib/AutoSplit.pm      Thu Dec 21 13:01:01 1995
+
+Index: lib/Cwd.pm
+*** perl5.002b1f/lib/Cwd.pm    Fri Dec  8 10:42:46 1995
+--- perl5.002b1g/lib/Cwd.pm    Thu Dec 21 13:01:01 1995
+
+Index: lib/Devel/SelfStubber.pm
+*** perl5.002b1f/lib/Devel/SelfStubber.pm      Sun Nov 26 16:59:51 1995
+--- perl5.002b1g/lib/Devel/SelfStubber.pm      Thu Dec 21 13:01:01 1995
+
+Index: lib/Env.pm
+*** perl5.002b1f/lib/Env.pm    Tue Oct 18 12:34:43 1994
+--- perl5.002b1g/lib/Env.pm    Thu Dec 21 13:01:01 1995
+
+Index: lib/Exporter.pm
+*** perl5.002b1f/lib/Exporter.pm       Wed Nov 15 15:19:33 1995
+--- perl5.002b1g/lib/Exporter.pm       Thu Dec 21 13:01:01 1995
+
+Index: lib/ExtUtils/Liblist.pm
+*** perl5.002b1f/lib/ExtUtils/Liblist.pm       Tue Dec  5 07:56:53 1995
+--- perl5.002b1g/lib/ExtUtils/Liblist.pm       Thu Dec 21 13:01:01 1995
+
+Index: lib/ExtUtils/MakeMaker.pm
+Prereq:  1.115 
+*** perl5.002b1f/lib/ExtUtils/MakeMaker.pm     Tue Dec  5 13:20:56 1995
+--- perl5.002b1g/lib/ExtUtils/MakeMaker.pm     Thu Dec 21 13:01:02 1995
+
+Index: lib/ExtUtils/Manifest.pm
+*** perl5.002b1f/lib/ExtUtils/Manifest.pm      Tue Dec  5 13:21:00 1995
+--- perl5.002b1g/lib/ExtUtils/Manifest.pm      Thu Dec 21 13:01:02 1995
+
+Index: lib/ExtUtils/Mkbootstrap.pm
+*** perl5.002b1f/lib/ExtUtils/Mkbootstrap.pm   Thu Oct 19 05:58:34 1995
+--- perl5.002b1g/lib/ExtUtils/Mkbootstrap.pm   Thu Dec 21 13:01:02 1995
+
+Index: lib/FileHandle.pm
+*** perl5.002b1f/lib/FileHandle.pm     Thu May 25 11:18:20 1995
+--- perl5.002b1g/lib/FileHandle.pm     Thu Dec 21 13:01:02 1995
+
+Index: lib/IPC/Open2.pm
+*** perl5.002b1f/lib/IPC/Open2.pm      Thu May 25 11:31:07 1995
+--- perl5.002b1g/lib/IPC/Open2.pm      Thu Dec 21 13:01:03 1995
+
+Index: lib/IPC/Open3.pm
+Prereq:  1.1 
+*** perl5.002b1f/lib/IPC/Open3.pm      Wed Nov 15 15:21:11 1995
+--- perl5.002b1g/lib/IPC/Open3.pm      Thu Dec 21 13:01:03 1995
+
+Index: lib/SelfLoader.pm
+*** perl5.002b1f/lib/SelfLoader.pm     Sun Nov 26 16:59:51 1995
+--- perl5.002b1g/lib/SelfLoader.pm     Thu Dec 21 13:01:03 1995
+
+Index: lib/Sys/Hostname.pm
+*** perl5.002b1f/lib/Sys/Hostname.pm   Tue Oct 18 12:38:25 1994
+--- perl5.002b1g/lib/Sys/Hostname.pm   Thu Dec 21 13:01:03 1995
+
+Index: lib/Sys/Syslog.pm
+*** perl5.002b1f/lib/Sys/Syslog.pm     Wed Dec  6 14:07:54 1995
+--- perl5.002b1g/lib/Sys/Syslog.pm     Thu Dec 21 13:01:04 1995
+
+Index: lib/Term/Cap.pm
+*** perl5.002b1f/lib/Term/Cap.pm       Sun Mar 12 00:14:42 1995
+--- perl5.002b1g/lib/Term/Cap.pm       Thu Dec 21 13:01:04 1995
+
+Index: lib/Term/Complete.pm
+*** perl5.002b1f/lib/Term/Complete.pm  Wed May 24 12:09:48 1995
+--- perl5.002b1g/lib/Term/Complete.pm  Thu Dec 21 13:01:04 1995
+
+Index: lib/Test/Harness.pm
+*** perl5.002b1f/lib/Test/Harness.pm   Mon Nov 13 23:01:40 1995
+--- perl5.002b1g/lib/Test/Harness.pm   Thu Dec 21 13:01:04 1995
+
+Index: lib/Text/Soundex.pm
+Prereq:  1.2 
+*** perl5.002b1f/lib/Text/Soundex.pm   Tue Oct 18 12:38:42 1994
+--- perl5.002b1g/lib/Text/Soundex.pm   Thu Dec 21 13:01:04 1995
+
+Index: lib/Text/Tabs.pm
+*** perl5.002b1f/lib/Text/Tabs.pm      Sat Nov 18 16:08:55 1995
+--- perl5.002b1g/lib/Text/Tabs.pm      Thu Dec 21 13:01:04 1995
+
+Index: lib/Text/Wrap.pm
+*** perl5.002b1f/lib/Text/Wrap.pm      Sat Nov 18 16:08:56 1995
+--- perl5.002b1g/lib/Text/Wrap.pm      Thu Dec 21 13:01:05 1995
+
+Index: lib/TieHash.pm
+*** perl5.002b1f/lib/TieHash.pm        Wed Nov 15 15:27:47 1995
+--- perl5.002b1g/lib/TieHash.pm        Thu Dec 21 13:01:05 1995
+
+Index: lib/Time/Local.pm
+*** perl5.002b1f/lib/Time/Local.pm     Tue Oct 18 12:38:47 1994
+--- perl5.002b1g/lib/Time/Local.pm     Thu Dec 21 13:01:05 1995
+
+Index: lib/less.pm
+*** perl5.002b1f/lib/less.pm   Thu May 25 11:19:59 1995
+--- perl5.002b1g/lib/less.pm   Thu Dec 21 13:01:05 1995
+
+Index: lib/overload.pm
+*** perl5.002b1f/lib/overload.pm       Sat Nov 18 16:03:33 1995
+--- perl5.002b1g/lib/overload.pm       Thu Dec 21 13:01:05 1995
+
+Index: lib/strict.pm
+*** perl5.002b1f/lib/strict.pm Thu May 25 11:20:27 1995
+--- perl5.002b1g/lib/strict.pm Thu Dec 21 13:01:05 1995
+
+Index: lib/syslog.pl
+*** perl5.002b1f/lib/syslog.pl Tue Oct 18 12:37:13 1994
+--- perl5.002b1g/lib/syslog.pl Thu Dec 21 13:01:05 1995
+
+Index: perl.c
+*** perl5.002b1f/perl.c        Sun Nov 19 16:11:29 1995
+--- perl5.002b1g/perl.c        Thu Dec 21 13:01:06 1995
+
+Index: pod/Makefile
+*** perl5.002b1f/pod/Makefile  Mon Nov 20 13:00:50 1995
+--- perl5.002b1g/pod/Makefile  Thu Dec 21 13:01:06 1995
+
+Index: pod/PerlDoc/Functions.pm
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/pod/PerlDoc/Functions.pm      Thu Dec 21 13:01:07 1995
+
+Index: pod/PerlDoc/Functions.pm.POSIX
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/pod/PerlDoc/Functions.pm.POSIX        Thu Dec 21 13:01:07 1995
+
+Index: pod/buildtoc
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/pod/buildtoc  Thu Dec 21 13:01:07 1995
+
+Index: pod/perl.pod
+*** perl5.002b1f/pod/perl.pod  Sat Nov 18 17:23:58 1995
+--- perl5.002b1g/pod/perl.pod  Thu Dec 21 13:01:07 1995
+
+Index: pod/perlbot.pod
+*** perl5.002b1f/pod/perlbot.pod       Fri Nov 10 17:27:33 1995
+--- perl5.002b1g/pod/perlbot.pod       Thu Dec 21 13:01:07 1995
+
+Index: pod/perldata.pod
+*** perl5.002b1f/pod/perldata.pod      Sat Nov 18 17:23:59 1995
+--- perl5.002b1g/pod/perldata.pod      Thu Dec 21 13:01:07 1995
+
+Index: pod/perldiag.pod
+*** perl5.002b1f/pod/perldiag.pod      Sun Nov 19 22:10:58 1995
+--- perl5.002b1g/pod/perldiag.pod      Thu Dec 21 13:01:08 1995
+
+Index: pod/perldsc.pod
+*** perl5.002b1f/pod/perldsc.pod       Sat Nov 18 17:24:22 1995
+--- perl5.002b1g/pod/perldsc.pod       Thu Dec 21 13:01:08 1995
+
+Index: pod/perlembed.pod
+*** perl5.002b1f/pod/perlembed.pod     Tue Oct 18 12:39:24 1994
+--- perl5.002b1g/pod/perlembed.pod     Thu Dec 21 13:01:09 1995
+
+Index: pod/perlform.pod
+*** perl5.002b1f/pod/perlform.pod      Sat Nov 18 17:23:59 1995
+--- perl5.002b1g/pod/perlform.pod      Thu Dec 21 13:01:09 1995
+
+Index: pod/perlfunc.pod
+*** perl5.002b1f/pod/perlfunc.pod      Sat Nov 18 17:24:01 1995
+--- perl5.002b1g/pod/perlfunc.pod      Thu Dec 21 13:01:09 1995
+
+Index: pod/perlguts.pod
+*** perl5.002b1f/pod/perlguts.pod      Tue Oct 31 15:38:18 1995
+--- perl5.002b1g/pod/perlguts.pod      Thu Dec 21 13:01:10 1995
+
+Index: pod/perlipc.pod
+*** perl5.002b1f/pod/perlipc.pod       Sat Nov 18 17:24:02 1995
+--- perl5.002b1g/pod/perlipc.pod       Thu Dec 21 13:01:11 1995
+
+Index: pod/perllol.pod
+*** perl5.002b1f/pod/perllol.pod       Sat Nov 18 17:24:22 1995
+--- perl5.002b1g/pod/perllol.pod       Thu Dec 21 13:01:11 1995
+
+Index: pod/perlmod.pod
+*** perl5.002b1f/pod/perlmod.pod       Sat Nov 18 17:24:03 1995
+--- perl5.002b1g/pod/perlmod.pod       Thu Dec 21 13:01:11 1995
+
+Index: pod/perlobj.pod
+*** perl5.002b1f/pod/perlobj.pod       Sun Mar 12 00:48:38 1995
+--- perl5.002b1g/pod/perlobj.pod       Thu Dec 21 13:01:11 1995
+
+Index: pod/perlop.pod
+*** perl5.002b1f/pod/perlop.pod        Sat Nov 18 17:24:03 1995
+--- perl5.002b1g/pod/perlop.pod        Thu Dec 21 13:01:12 1995
+
+Index: pod/perlovl.pod
+*** perl5.002b1f/pod/perlovl.pod       Mon Jan 23 13:25:35 1995
+--- perl5.002b1g/pod/perlovl.pod       Thu Dec 21 13:01:12 1995
+
+Index: pod/perlpod.pod
+*** perl5.002b1f/pod/perlpod.pod       Sun Nov 19 22:22:59 1995
+--- perl5.002b1g/pod/perlpod.pod       Thu Dec 21 13:01:12 1995
+
+Index: pod/perlre.pod
+*** perl5.002b1f/pod/perlre.pod        Sun Nov 26 16:57:20 1995
+--- perl5.002b1g/pod/perlre.pod        Thu Dec 21 13:01:12 1995
+
+Index: pod/perlref.pod
+*** perl5.002b1f/pod/perlref.pod       Sat Nov 18 17:24:04 1995
+--- perl5.002b1g/pod/perlref.pod       Thu Dec 21 13:01:12 1995
+
+Index: pod/perlrun.pod
+*** perl5.002b1f/pod/perlrun.pod       Wed Feb 22 18:32:59 1995
+--- perl5.002b1g/pod/perlrun.pod       Thu Dec 21 13:01:12 1995
+
+Index: pod/perlsec.pod
+*** perl5.002b1f/pod/perlsec.pod       Wed Feb 22 18:33:02 1995
+--- perl5.002b1g/pod/perlsec.pod       Thu Dec 21 13:01:12 1995
+
+Index: pod/perlstyle.pod
+*** perl5.002b1f/pod/perlstyle.pod     Tue Oct 18 12:40:13 1994
+--- perl5.002b1g/pod/perlstyle.pod     Thu Dec 21 13:01:13 1995
+
+Index: pod/perlsub.pod
+*** perl5.002b1f/pod/perlsub.pod       Sun Mar 12 22:42:58 1995
+--- perl5.002b1g/pod/perlsub.pod       Thu Dec 21 13:01:13 1995
+
+Index: pod/perlsyn.pod
+*** perl5.002b1f/pod/perlsyn.pod       Sat Nov 18 17:24:04 1995
+--- perl5.002b1g/pod/perlsyn.pod       Thu Dec 21 13:01:14 1995
+
+Index: pod/perltie.pod
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/pod/perltie.pod       Thu Dec 21 13:01:14 1995
+
+Index: pod/perltoc.pod
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/pod/perltoc.pod       Thu Dec 21 13:01:14 1995
+
+Index: pod/perltrap.pod
+*** perl5.002b1f/pod/perltrap.pod      Wed Nov 15 21:36:11 1995
+--- perl5.002b1g/pod/perltrap.pod      Thu Dec 21 13:01:14 1995
+
+Index: pod/perlvar.pod
+*** perl5.002b1f/pod/perlvar.pod       Wed Nov 15 21:36:59 1995
+--- perl5.002b1g/pod/perlvar.pod       Thu Dec 21 13:01:15 1995
+
+Index: pod/perlxs.pod
+*** perl5.002b1f/pod/perlxs.pod        Sun Nov 19 22:12:44 1995
+--- perl5.002b1g/pod/perlxs.pod        Thu Dec 21 13:01:15 1995
+
+Index: pod/perlxstut.pod
+*** perl5.002b1f/pod/perlxstut.pod     Mon Nov 20 13:02:12 1995
+--- perl5.002b1g/pod/perlxstut.pod     Thu Dec 21 13:01:15 1995
+
+Index: pod/pod2man.PL
+Prereq:  1.5 
+*** perl5.002b1f/pod/pod2man.PL        Wed Nov 15 22:32:51 1995
+--- perl5.002b1g/pod/pod2man.PL        Thu Dec 21 13:01:15 1995
+
+Index: pod/pod2text
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/pod/pod2text  Thu Dec 21 13:01:16 1995
+
+Index: pod/roffitall
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/pod/roffitall Thu Dec 21 13:01:16 1995
+
+Index: pod/splitpod
+*** /dev/null  Wed Jan  3 14:35:56 1996
+--- perl5.002b1g/pod/splitpod  Thu Dec 21 13:01:16 1995
+
+=item patch.2b1f
+
+This is patch.2b1f to perl5.002beta1.
+
+Index: Changes.Conf
+
+Include 5.001m -> 5.002beta1 changes.
+
+*** perl5.002b1e/Changes.Conf  Mon Nov 20 10:08:05 1995
+--- perl5.002b1f/Changes.Conf  Wed Dec  6 15:29:48 1995
+
+Index: Configure
+
+    Include Jeff Okamoto's patch to allow arbitrary specification
+    of $startperl.  
+
+    As requested, I have moved site_perl to be under
+    $privlib, by default.  The default will now be
+    /usr/local/lib/perl5/site_perl.  This is in accord with the way
+    emacs used to do it :-).
+    
+
+Prereq:  3.0.1.8 
+*** perl5.002b1e/Configure     Fri Dec  8 14:55:26 1995
+--- perl5.002b1f/Configure     Fri Dec  8 11:23:56 1995
+
+Index: MANIFEST
+    Add in POSIX.pod.  I didn't include Dean's mkposixman tool because
+    it seemed to confuse MakeMaker, and I didn't want to manually fix
+    the POSIX/Makefile.PL file today.
+
+    Renamed minimod.PL.  The idea is as follows:  I'd like to reserve
+    the .PL suffix for files that are extracted during build time, and
+    then can be deleted after installation.  That is, it will be
+    analogous to the .SH suffix.  For example, h2xs.PL creates
+    h2xs, and a 'make realclean' will remove the h2xs.  Minimod.PL
+    was an exception to this pattern.  Eventually, the .PL dependencies
+    will be generated automatically, just as the .SH dependencies are
+    now.
+
+    Add in socket test.
+
+*** perl5.002b1e/MANIFEST      Fri Dec  8 14:55:27 1995
+--- perl5.002b1f/MANIFEST      Fri Dec  8 13:34:53 1995
+
+Index: Makefile.SH
+
+    Renamed minimod.PL to minimod.pl
+
+*** perl5.002b1e/Makefile.SH   Mon Nov 20 15:56:12 1995
+--- perl5.002b1f/Makefile.SH   Fri Dec  8 10:36:33 1995
+
+Index: XSUB.h
+
+    Include (SV*) cast in the newXSproto #define.
+
+*** perl5.002b1e/XSUB.h        Fri Dec  8 14:55:14 1995
+--- perl5.002b1f/XSUB.h        Wed Dec  6 13:25:26 1995
+
+Index: ext/POSIX/POSIX.pm
+
+    I have included Dean's patch and the .pod generated by mkposixman.
+
+*** perl5.002b1e/ext/POSIX/POSIX.pm    Wed Nov 15 14:54:09 1995
+--- perl5.002b1f/ext/POSIX/POSIX.pm    Fri Dec  8 10:23:54 1995
+
+Index: ext/POSIX/POSIX.pod
+
+    I have included Dean's patch and the .pod generated by mkposixman.
+
+*** /dev/null  Fri Dec  8 13:36:14 1995
+--- perl5.002b1f/ext/POSIX/POSIX.pod   Fri Dec  8 10:30:40 1995
+
+Index: ext/POSIX/POSIX.xs
+
+    I have included Dean's patch and the .pod generated by mkposixman.
+
+*** perl5.002b1e/ext/POSIX/POSIX.xs    Wed Nov 15 14:56:22 1995
+--- perl5.002b1f/ext/POSIX/POSIX.xs    Fri Dec  8 10:23:54 1995
+
+Index: ext/Socket/Socket.pm
+
+    Replace errant sockaddr_in by correct sockaddr_un.
+    Remove an extra ')'.  -- from Tom C.
+
+*** perl5.002b1e/ext/Socket/Socket.pm  Fri Dec  8 14:55:28 1995
+--- perl5.002b1f/ext/Socket/Socket.pm  Wed Dec  6 13:58:41 1995
+
+Index: gv.c
+
+    Fix from Nick Ing-Simmons to get HvNAME(stash) from caller's
+    package.
+
+*** perl5.002b1e/gv.c  Wed Nov 15 14:58:39 1995
+--- perl5.002b1f/gv.c  Fri Dec  8 10:37:22 1995
+
+Index: lib/Cwd.pm
+
+    Fix a long-standing problem where insufficient permissions higher
+    up in the directory tree caused getcwd to fail.  This often showed
+    up on AFS.
+
+*** perl5.002b1e/lib/Cwd.pm    Mon Nov 13 23:01:38 1995
+--- perl5.002b1f/lib/Cwd.pm    Fri Dec  8 10:42:46 1995
+
+Index: lib/Sys/Syslog.pm
+
+    Modernize Syslog.pm to 'use Socket;' and 'use Sys::Hostname'.
+    Alas, I've lost the attribution for this patch.  Sorry about
+    that.
+
+*** perl5.002b1e/lib/Sys/Syslog.pm     Thu Feb  9 20:05:36 1995
+--- perl5.002b1f/lib/Sys/Syslog.pm     Wed Dec  6 14:07:54 1995
+
+Index: lib/diagnostics.pm
+
+    Fixes from Tom.
+
+*** perl5.002b1e/lib/diagnostics.pm    Tue Nov 14 16:16:36 1995
+--- perl5.002b1f/lib/diagnostics.pm    Wed Dec  6 13:58:42 1995
+
+Index: t/lib/socket.t
+
+    New test from Tom.  I've allowed it to fail if the echo service is
+    disabled, as is apparently the case on some systems.
+
+*** /dev/null  Fri Dec  8 13:36:14 1995
+--- perl5.002b1f/t/lib/socket.t        Fri Dec  8 11:16:01 1995
+
+Index: toke.c
+    
+    A patch from Paul Marquess "purely for source filters".
+
+*** perl5.002b1e/toke.c        Wed Nov 15 22:08:23 1995
+--- perl5.002b1f/toke.c        Wed Dec  6 13:24:19 1995
+
+=item patch.2b1e
+
+This is patch.2b1e to perl5.002beta1.  This is simply
+an upgrade from MakeMaker-5.10 to MakeMaker-5.11.
+
+
+Index: lib/ExtUtils/Liblist.pm
+*** perl5.002b1d/lib/ExtUtils/Liblist.pm       Sat Dec  2 16:50:47 1995
+--- perl5.002b1e/lib/ExtUtils/Liblist.pm       Wed Dec  6 11:52:22 1995
+
+Index: lib/ExtUtils/MakeMaker.pm
+Prereq:  1.114 
+*** perl5.002b1d/lib/ExtUtils/MakeMaker.pm     Sat Dec  2 16:50:48 1995
+--- perl5.002b1e/lib/ExtUtils/MakeMaker.pm     Wed Dec  6 11:52:22 1995
+
+Index: lib/ExtUtils/Manifest.pm
+*** perl5.002b1d/lib/ExtUtils/Manifest.pm      Sat Dec  2 16:50:48 1995
+--- perl5.002b1e/lib/ExtUtils/Manifest.pm      Wed Dec  6 11:52:22 1995
+
+=item patch.2b1d
+
+This is patch.2b1d to perl5.002beta1.
+
+This patch includes patches for the following items:
+
+    NETaa14710:        Included bsdi_bsdos.sh hint file.
+
+    pod/perlre.pod:  Mention 32bit limit.
+
+    Configure Updates.
+
+    Update Socket.xs to version 1.5.  This handles
+    systems that might not have <sys/un.h>.
+
+    Fix missing quotes in h2ph.PL
+
+These are each described in detail below, after the corresponding
+index line.
+
+Index: Configure
+
+    locincpth should now work as documented in INSTALL
+
+    Improved guessing of man1dir
+
+    Remove spurious semicolon in NONBLOCK testing.
+
+    Send failed './loc' message to fd 4.
+
+    Check for <sys/un.h>
+
+    Allow 'unixisms' to be overridden by hint files.
+
+    Remove -r test from './loc' since some executables are
+    not readable.
+
+    Remove spurious doublings of -L/usr/local/lib when reusing old
+    config.sh.
+
+    Improved domain name guessing, from 
+    Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
+
+    Include sitelib (architecture-independent directory).
+
+
+Prereq:  3.0.1.8 
+*** perl5.002b1c/Configure     Mon Nov 20 10:00:33 1995
+--- perl5.002b1d/Configure     Sat Dec  2 15:35:13 1995
+
+Index: INSTALL
+
+    Consistently use "sh Configure" in examples.
+
+    Add reminder that interactive use may be helpful.
+
+*** perl5.002b1c/INSTALL       Mon Nov 20 10:46:48 1995
+--- perl5.002b1d/INSTALL       Tue Nov 21 22:54:28 1995
+
+Index: MANIFEST
+    
+    Include renamed hint file.
+
+*** perl5.002b1c/MANIFEST      Sat Dec  2 16:20:21 1995
+--- perl5.002b1d/MANIFEST      Sun Nov 26 17:03:31 1995
+
+Index: config_h.SH
+
+    Include check for <sys/un.h>.
+    
+    Include SITELIB_EXP definition for architecture-independent
+    site-specific modules.  Usually, this will be
+    /usr/local/lib/site_perl.
+
+Prereq:  3.0.1.4 
+*** perl5.002b1c/config_h.SH   Mon Nov 20 10:00:33 1995
+--- perl5.002b1d/config_h.SH   Sat Dec  2 15:35:13 1995
+
+Index: ext/Socket/Makefile.PL
+
+    Update version number to 1.5.
+
+*** perl5.002b1c/ext/Socket/Makefile.PL        Sat Nov 18 15:36:56 1995
+--- perl5.002b1d/ext/Socket/Makefile.PL        Sat Dec  2 16:23:52 1995
+
+Index: ext/Socket/Socket.pm
+
+    Update to version 1.5.
+
+*** perl5.002b1c/ext/Socket/Socket.pm  Sat Nov 18 15:37:03 1995
+--- perl5.002b1d/ext/Socket/Socket.pm  Sat Dec  2 16:25:17 1995
+
+Index: ext/Socket/Socket.xs
+
+    Update to version 1.5.
+    This only supports the sockaddr_un -related functions if your
+    system has <sys/un.h>.  SVR3 systems generally don't.
+
+*** perl5.002b1c/ext/Socket/Socket.xs  Sat Nov 18 15:36:57 1995
+--- perl5.002b1d/ext/Socket/Socket.xs  Sat Dec  2 15:46:20 1995
+
+Index: h2ph.PL
+
+    Add missing quotes.
+
+*** perl5.002b1c/h2ph.PL       Sun Nov 19 23:00:39 1995
+--- perl5.002b1d/h2ph.PL       Mon Nov 27 10:14:50 1995
+
+Index: hints/bsdi_bsdos.sh
+
+    Updated and renamed file.
+
+*** perl5.002b1c/hints/bsdi_bsdos.sh   Thu Jan 19 19:08:34 1995
+--- perl5.002b1d/hints/bsdi_bsdos.sh   Sun Nov 26 16:50:26 1995
+
+Index: pod/perlre.pod
+
+    Mention 65536 limit explicitly.
+
+*** perl5.002b1c/pod/perlre.pod        Wed Nov 15 21:35:31 1995
+--- perl5.002b1d/pod/perlre.pod        Sun Nov 26 16:57:20 1995
+
+=item patch.2b1c
+
+This is patch.2b1c to perl5.002beta1.  This patch includes
+    lib/SelfLoader, version 1.06, and 
+    lib/Devel/SelfStubber, version 1.01.
+These versions include prototype support.
+
+This is simply re-posting these library modules.
+I have also updated MANIFEST to include them.
+
+
+Index: MANIFEST
+*** perl5.002b1b/MANIFEST      Sat Dec  2 16:13:24 1995
+--- perl5.002b1c/MANIFEST      Sat Dec  2 16:12:54 1995
+
+Index: lib/Devel/SelfStubber.pm
+*** /dev/null  Fri Dec  1 16:03:22 1995
+--- perl5.002b1c/lib/Devel/SelfStubber.pm      Sun Nov 26 16:14:19 1995
+
+Index: lib/SelfLoader.pm
+*** /dev/null  Fri Dec  1 16:03:22 1995
+--- perl5.002b1c/lib/SelfLoader.pm     Sun Nov 26 16:14:50 1995
+
+=item patch.2b1b
+
+This is patch.2b1b to perl5.002beta1.  This is simply
+MakeMaker-5.10.  Nothing else is included.
+
+It contains:
+
+Upgrade to MakeMaker-5.10
+and a revised minimod.PL that now writes a pod section into ExtUtils::Miniperl.
+
+Index: lib/ExtUtils/Liblist.pm
+*** perl5.002b1a/lib/ExtUtils/Liblist.pm       Mon Nov 13 22:03:29 1995
+--- perl5.002b1b/lib/ExtUtils/Liblist.pm       Sat Dec  2 15:58:00 1995
+
+Index: lib/ExtUtils/MakeMaker.pm
+*** perl5.002b1a/lib/ExtUtils/MakeMaker.pm     Sat Nov 18 16:01:05 1995
+--- perl5.002b1b/lib/ExtUtils/MakeMaker.pm     Sat Dec  2 15:58:01 1995
+
+Index: lib/ExtUtils/Manifest.pm
+*** perl5.002b1a/lib/ExtUtils/Manifest.pm      Mon Nov 13 22:03:30 1995
+--- perl5.002b1b/lib/ExtUtils/Manifest.pm      Sat Dec  2 15:58:02 1995
+
+Index: minimod.PL
+*** perl5.002b1a/minimod.PL    Sun Nov 19 23:01:02 1995
+--- perl5.002b1b/minimod.PL    Sat Dec  2 15:58:02 1995
+
+=item patch.2b1a  
+
+This is patch.2b1a to perl5.002beta1.  This is simply
+xsubpp-1.944.  It includes perl prototype support.
+
+Index: XSUB.h
+
+Updated to match xsubpp-1.944.  Includes perl prototype support.
+
+*** perl5.002beta1/XSUB.h      Fri Nov 10 13:11:02 1995
+--- perl5.002b1a/XSUB.h        Sat Dec  2 15:43:54 1995
+
+Index: lib/ExtUtils/xsubpp
+
+Updated to xsubpp-1.944.  Includes perl prototype support.
+
+*** perl5.002beta1/lib/ExtUtils/xsubpp Mon Nov 20 11:03:49 1995
+--- perl5.002b1a/lib/ExtUtils/xsubpp   Sat Dec  2 15:43:55 1995
+
+
+
 Here are the detailed changes from 5.001m to 5.002beta1:
 
 # rm -f Doc/perl5-notes                # Obsolete
@@ -77,20 +1886,17 @@ Index: patchlevel.h
 Incremented to 2!
 *** perl5.001.lwall/patchlevel.h       Sun Mar 12 22:29:12 1995
 --- perl5.002beta1/patchlevel.h        Sat Nov 18 15:41:15 1995
-***************
 
 Index: Changes
 This includes the Changes file Larry sent me.  I added the first
 paragraph.
 *** perl5.001.lwall/Changes    Mon Mar 13 00:44:07 1995
 --- perl5.002beta1/Changes     Sat Nov 18 15:43:29 1995
-***************
 
 Index: Changes.Conf
 An all too brief summary.
 *** perl5.001.lwall/Changes.Conf       Thu Oct 19 21:00:06 1995
 --- perl5.002beta1/Changes.Conf        Mon Nov 20 10:08:05 1995
-***************
 
 Index: Configure
 
@@ -116,7 +1922,6 @@ represents the actual signal number.
 Prereq:  3.0.1.8 
 *** perl5.001.lwall/Configure  Mon Oct 23 14:08:59 1995
 --- perl5.002beta1/Configure   Mon Nov 20 10:00:33 1995
-***************
 
 Index: INSTALL
 
@@ -133,7 +1938,6 @@ Mention how to override old config.sh with Configure -D and -O.
 
 *** perl5.001.lwall/INSTALL    Mon Oct 23 14:10:26 1995
 --- perl5.002beta1/INSTALL     Mon Nov 20 10:46:48 1995
-***************
 
 Index: MANIFEST
 
@@ -148,7 +1952,6 @@ but included a current cperl-mode.el
 
 *** perl5.001.lwall/MANIFEST   Tue Nov 14 15:21:03 1995
 --- perl5.002beta1/MANIFEST    Mon Nov 20 12:40:41 1995
-***************
 
 Index: Makefile.SH
 
@@ -158,7 +1961,6 @@ Add .PL file extraction logic.
 
 *** perl5.001.lwall/Makefile.SH        Tue Nov 14 20:25:48 1995
 --- perl5.002beta1/Makefile.SH Mon Nov 20 15:56:12 1995
-***************
 
 Index: XSUB.h
 
@@ -166,39 +1968,33 @@ Protect arguments of macros with ().
 
 *** perl5.001.lwall/XSUB.h     Tue Mar  7 14:10:00 1995
 --- perl5.002beta1/XSUB.h      Fri Nov 10 13:11:02 1995
-***************
 
 Index: c2ph.PL
 Replaces c2ph.SH. 
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/c2ph.PL     Mon Nov 20 12:36:17 1995
-***************
 
 Index: cflags.SH
 Allow for .o or .obj in file names.
 *** perl5.001.lwall/cflags.SH  Thu Jan 19 19:06:13 1995
 --- perl5.002beta1/cflags.SH   Tue Nov 14 15:18:41 1995
-***************
 
 Index: config_H
 Updated.
 Prereq:  3.0.1.3 
 *** perl5.001.lwall/config_H   Thu Oct 19 21:01:14 1995
 --- perl5.002beta1/config_H    Mon Nov 20 15:41:49 1995
-***************
 
 Index: config_h.SH
 Updated to match new Configure.
 Prereq:  3.0.1.3 
 *** perl5.001.lwall/config_h.SH        Mon Oct 23 14:10:38 1995
 --- perl5.002beta1/config_h.SH Mon Nov 20 10:00:33 1995
-***************
 
 Index: configpm
 Add in routine to print out full config.sh file.
 *** perl5.001.lwall/configpm   Wed Jun  7 19:46:01 1995
 --- perl5.002beta1/configpm    Tue Oct 31 11:51:52 1995
-***************
 
 Index: doop.c
 Check for sprintf memory overflow that can arise from things
@@ -206,136 +2002,114 @@ like %999999s.
 
 *** perl5.001.lwall/doop.c     Sun Jul  2 23:33:44 1995
 --- perl5.002beta1/doop.c      Wed Nov 15 15:08:01 1995
-***************
 
 Index: emacs/cperl-mode.el
 New version.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/emacs/cperl-mode.el Sat Nov 11 16:29:33 1995
-***************
 
 Index: embed.h
 Remove unnecessary whichsigname introduced in patch.1n.
 *** perl5.001.lwall/embed.h    Tue Nov 14 15:21:08 1995
 --- perl5.002beta1/embed.h     Wed Nov 15 14:48:47 1995
-***************
 
 Index: ext/DB_File/DB_File.pm
 Updated to version 1.01.
 *** perl5.001.lwall/ext/DB_File/DB_File.pm     Wed Jun  7 19:46:14 1995
 --- perl5.002beta1/ext/DB_File/DB_File.pm      Tue Nov 14 14:14:25 1995
-***************
 
 Index: ext/DB_File/DB_File.xs
 Updated to version 1.01.
 *** perl5.001.lwall/ext/DB_File/DB_File.xs     Wed Jun  7 19:46:17 1995
 --- perl5.002beta1/ext/DB_File/DB_File.xs      Tue Nov 14 14:14:37 1995
-***************
 
 Index: ext/DB_File/Makefile.PL
 Updated to version 1.01.
 *** perl5.001.lwall/ext/DB_File/Makefile.PL    Wed Feb 22 14:36:32 1995
 --- perl5.002beta1/ext/DB_File/Makefile.PL     Tue Nov 14 14:14:17 1995
-***************
 
 Index: ext/DB_File/typemap
 Fix typemap to avoid core dump.
 *** perl5.001.lwall/ext/DB_File/typemap        Tue Oct 18 12:27:52 1994
 --- perl5.002beta1/ext/DB_File/typemap Tue Oct 31 11:53:28 1995
-***************
 
 Index: ext/DynaLoader/DynaLoader.pm
 Add parentheses to Carp::confess call.
 *** perl5.001.lwall/ext/DynaLoader/DynaLoader.pm       Thu Oct 19 20:13:25 1995
 --- perl5.002beta1/ext/DynaLoader/DynaLoader.pm        Fri Nov 10 11:49:00 1995
-***************
 
 Index: ext/DynaLoader/dl_os2.xs
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/ext/DynaLoader/dl_os2.xs    Mon Nov 13 22:58:42 1995
-***************
 
 Index: ext/Fcntl/Fcntl.xs
 Add O_BINARY define for OS/2.
 *** perl5.001.lwall/ext/Fcntl/Fcntl.xs Mon Oct 23 14:10:54 1995
 --- perl5.002beta1/ext/Fcntl/Fcntl.xs  Mon Nov 13 23:01:40 1995
-***************
 
 Index: ext/GDBM_File/GDBM_File.pm
 Added a tiny bit of documentation, including how to get gdbm.
 Shamelessly stolen from the DB_File.pm documentation.
 *** perl5.001.lwall/ext/GDBM_File/GDBM_File.pm Wed Jun  7 19:46:34 1995
 --- perl5.002beta1/ext/GDBM_File/GDBM_File.pm  Mon Nov 20 10:22:26 1995
-***************
 
 Index: ext/GDBM_File/GDBM_File.xs
 Add gdbm_EXISTS #define.
 *** perl5.001.lwall/ext/GDBM_File/GDBM_File.xs Sat Jul  1 18:44:02 1995
 --- perl5.002beta1/ext/GDBM_File/GDBM_File.xs  Sat Nov 11 14:25:50 1995
-***************
 
 Index: ext/NDBM_File/hints/solaris.pl
 Updated for MakeMaker 5.0x.
 *** perl5.001.lwall/ext/NDBM_File/hints/solaris.pl     Wed Jun  7 19:46:39 1995
 --- perl5.002beta1/ext/NDBM_File/hints/solaris.pl      Fri Nov 10 10:39:23 1995
-***************
 
 Index: ext/ODBM_File/hints/sco.pl
 Updated for MakeMaker 5.0x.
 *** perl5.001.lwall/ext/ODBM_File/hints/sco.pl Wed Jun  7 19:46:44 1995
 --- perl5.002beta1/ext/ODBM_File/hints/sco.pl  Fri Nov 10 10:39:32 1995
-***************
 
 Index: ext/ODBM_File/hints/solaris.pl
 Updated for MakeMaker 5.0x.
 *** perl5.001.lwall/ext/ODBM_File/hints/solaris.pl     Wed Jun  7 19:46:46 1995
 --- perl5.002beta1/ext/ODBM_File/hints/solaris.pl      Fri Nov 10 10:39:44 1995
-***************
 
 Index: ext/ODBM_File/hints/svr4.pl
 Updated for MakeMaker 5.0x.
 *** perl5.001.lwall/ext/ODBM_File/hints/svr4.pl        Wed Jun  7 19:46:48 1995
 --- perl5.002beta1/ext/ODBM_File/hints/svr4.pl Fri Nov 10 10:39:54 1995
-***************
 
 Index: ext/POSIX/POSIX.pm
 Remove POSIX_loadlibs relics from perl5alpha days.
 *** perl5.001.lwall/ext/POSIX/POSIX.pm Thu Sep 21 19:14:19 1995
 --- perl5.002beta1/ext/POSIX/POSIX.pm  Wed Nov 15 14:54:09 1995
-***************
 
 Index: ext/POSIX/POSIX.xs
 Change whichsigname(sig) back to sig_name[sig].
 *** perl5.001.lwall/ext/POSIX/POSIX.xs Mon Oct 23 14:11:01 1995
 --- perl5.002beta1/ext/POSIX/POSIX.xs  Wed Nov 15 14:56:22 1995
-***************
 
 Index: ext/SDBM_File/Makefile.PL
 Updated for MakeMaker 5.0x to allow compilation on non-unix systems.
 *** perl5.001.lwall/ext/SDBM_File/Makefile.PL  Thu Jan 19 18:59:02 1995
 --- perl5.002beta1/ext/SDBM_File/Makefile.PL   Tue Nov 14 11:16:43 1995
-***************
 
 Index: ext/SDBM_File/sdbm/Makefile.PL
 Updated for MakeMaker 5.0x to allow compilation on non-unix systems.
 *** perl5.001.lwall/ext/SDBM_File/sdbm/Makefile.PL     Wed Feb 22 14:36:47 1995
 --- perl5.002beta1/ext/SDBM_File/sdbm/Makefile.PL      Tue Nov 14 11:17:16 1995
-***************
 
 Index: ext/SDBM_File/sdbm/sdbm.c
 Include OS/2 O_BINARY flag.
 Prereq:  1.16 
 *** perl5.001.lwall/ext/SDBM_File/sdbm/sdbm.c  Wed Jun  7 19:46:57 1995
 --- perl5.002beta1/ext/SDBM_File/sdbm/sdbm.c   Mon Nov 13 23:01:41 1995
-***************
 
 Index: ext/Socket/Makefile.PL
 Updated to 1.3.  Actually we're up to 1.4, but I forgot to update
 the Makefile.PL.
 *** perl5.001.lwall/ext/Socket/Makefile.PL     Thu Jan 19 18:59:06 1995
 --- perl5.002beta1/ext/Socket/Makefile.PL      Sat Nov 18 15:36:56 1995
-***************
 
 Index: ext/Socket/Socket.pm
 Updated to 1.3.  Actually we're up to 1.4, but I forgot to update
@@ -345,7 +2119,6 @@ patch.
 
 *** perl5.001.lwall/ext/Socket/Socket.pm       Sat Jul  1 15:51:54 1995
 --- perl5.002beta1/ext/Socket/Socket.pm        Sat Nov 18 15:37:03 1995
-***************
 
 Index: ext/Socket/Socket.xs
 Updated to 1.3.  Actually we're up to 1.4, but I forgot to update
@@ -355,91 +2128,76 @@ patch.
 
 *** perl5.001.lwall/ext/Socket/Socket.xs       Sat Jul  1 15:51:56 1995
 --- perl5.002beta1/ext/Socket/Socket.xs        Sat Nov 18 15:36:57 1995
-***************
 
 Index: global.sym
 Remove unnecessary whichsigname that was added in patch.1n.
 *** perl5.001.lwall/global.sym Tue Nov 14 15:21:11 1995
 --- perl5.002beta1/global.sym  Wed Nov 15 14:58:14 1995
-***************
 
 Index: h2ph.PL
 Converted from h2ph.SH.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/h2ph.PL     Sun Nov 19 23:00:39 1995
-***************
 
 Index: h2xs.PL
 Converted from h2xs.SH.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/h2xs.PL     Sun Nov 19 22:37:58 1995
-***************
 
 Index: hints/aix.sh
 Add gcc-specific -Xlinker, if you're using gcc.
 *** perl5.001.lwall/hints/aix.sh       Thu Oct 19 21:02:08 1995
 --- perl5.002beta1/hints/aix.sh        Mon Nov 13 23:03:33 1995
-***************
 
 Index: hints/freebsd.sh
 Warn about possible here-document problem.
 *** perl5.001.lwall/hints/freebsd.sh   Sat Jul  1 18:44:07 1995
 --- perl5.002beta1/hints/freebsd.sh    Sat Nov 18 16:21:20 1995
-***************
 
 Index: hints/hpux.sh
 Replace old hpux_9.sh, since this works for 9 and 10.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/hints/hpux.sh       Mon Nov 20 09:53:28 1995
-***************
 
 Index: hints/irix_6_2.sh
 New hint file.  This should be merged with irix_6.sh, since it's
 almost identical.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/hints/irix_6_2.sh   Mon Nov 20 11:16:55 1995
-***************
 
 Index: hints/ncr_tower.sh
 Give pointers about directory functions.
 *** perl5.001.lwall/hints/ncr_tower.sh Tue Oct 18 12:33:25 1994
 --- perl5.002beta1/hints/ncr_tower.sh  Tue Oct 31 11:57:51 1995
-***************
 
 Index: hints/netbsd.sh
 Updated.
 *** perl5.001.lwall/hints/netbsd.sh    Wed Jun  7 19:47:45 1995
 --- perl5.002beta1/hints/netbsd.sh     Mon Nov 13 23:04:17 1995
-***************
 
 Index: hints/os2.sh
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/hints/os2.sh        Tue Nov 14 11:07:33 1995
-***************
 
 Index: hints/sco.sh
 Renamed from sco_3, since it should apply to most recent versions.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/hints/sco.sh        Mon Jun  5 11:50:11 1995
-***************
 
 Index: hints/solaris_2.sh
 Remove temporary file try.c.
 *** perl5.001.lwall/hints/solaris_2.sh Thu Oct 19 21:02:37 1995
 --- perl5.002beta1/hints/solaris_2.sh  Mon Nov 20 16:01:50 1995
-***************
 
 Index: hints/ultrix_4.sh
 Note that you can substitute sh5 for sh to get a big speed up.
 *** perl5.001.lwall/hints/ultrix_4.sh  Mon Feb 13 20:15:05 1995
 --- perl5.002beta1/hints/ultrix_4.sh   Sat Nov 11 17:11:41 1995
-***************
 
 Index: installman
 Quit if they just asked for help with -h.
 *** perl5.001.lwall/installman Sat Jul  1 18:44:09 1995
 --- perl5.002beta1/installman  Mon Nov  6 11:16:43 1995
-***************
 
 Index: installperl
 Updated to use Config rather than hand-reading config.sh again.
@@ -450,7 +2208,6 @@ Create site_perl and site_perl/archname directories.
 
 *** perl5.001.lwall/installperl        Sat Jul  1 18:44:12 1995
 --- perl5.002beta1/installperl Mon Nov 20 12:55:08 1995
-***************
 
 Index: lib/AutoSplit.pm
 Handle OS/2 backslashes.
@@ -461,188 +2218,157 @@ Less enthusiastic checking of autoloader_seen.
 
 *** perl5.001.lwall/lib/AutoSplit.pm   Sat Jul  1 15:52:03 1995
 --- perl5.002beta1/lib/AutoSplit.pm    Wed Nov 15 15:06:19 1995
-***************
 
 Index: lib/Cwd.pm
 Updated for Unix, NT, and OS/2.
 *** perl5.001.lwall/lib/Cwd.pm Wed Jun  7 19:48:18 1995
 --- perl5.002beta1/lib/Cwd.pm  Mon Nov 13 23:01:38 1995
-***************
 
 Index: lib/ExtUtils/Liblist.pm
 Updated to MakeMaker 5.06.
 *** perl5.001.lwall/lib/ExtUtils/Liblist.pm    Wed Jun  7 19:48:27 1995
 --- perl5.002beta1/lib/ExtUtils/Liblist.pm     Mon Nov 13 22:03:29 1995
-***************
 
 Index: lib/ExtUtils/MakeMaker.pm
 Updated to MakeMaker 5.06.
 Prereq:  1.21 
 *** perl5.001.lwall/lib/ExtUtils/MakeMaker.pm  Thu Oct 19 21:02:57 1995
 --- perl5.002beta1/lib/ExtUtils/MakeMaker.pm   Sat Nov 18 16:01:05 1995
-***************
 
 Index: lib/ExtUtils/Manifest.pm
 Updated to MakeMaker 5.06.
 *** perl5.001.lwall/lib/ExtUtils/Manifest.pm   Sat Jul  1 15:52:11 1995
 --- perl5.002beta1/lib/ExtUtils/Manifest.pm    Mon Nov 13 22:03:30 1995
-***************
 
 Index: lib/ExtUtils/xsubpp
 Updated to xsubpp-1.923.
 *** perl5.001.lwall/lib/ExtUtils/xsubpp        Sat Jul  1 20:08:00 1995
 --- perl5.002beta1/lib/ExtUtils/xsubpp Mon Nov 20 11:03:49 1995
-***************
 
 Index: lib/File/Find.pm
 OS/2 patch for nlink.
 *** perl5.001.lwall/lib/File/Find.pm   Sat Jul  1 15:52:13 1995
 --- perl5.002beta1/lib/File/Find.pm    Wed Nov 15 15:20:03 1995
-***************
 
 Index: lib/Net/Ping.pm
 Updated to Net::Ping 1.00.
 *** perl5.001.lwall/lib/Net/Ping.pm    Wed Jun  7 19:49:13 1995
 --- perl5.002beta1/lib/Net/Ping.pm     Tue Oct 31 11:15:55 1995
-***************
 
 Index: lib/Shell.pm
 Updated for OS/2 or Unix.
 *** perl5.001.lwall/lib/Shell.pm       Tue Oct 18 12:34:59 1994
 --- perl5.002beta1/lib/Shell.pm        Mon Nov 13 23:01:40 1995
-***************
 
 Index: lib/Test/Harness.pm
 Updated for OS/2 or Unix.
 *** perl5.001.lwall/lib/Test/Harness.pm        Tue Oct 18 12:38:35 1994
 --- perl5.002beta1/lib/Test/Harness.pm Mon Nov 13 23:01:40 1995
-***************
 
 Index: lib/Text/Tabs.pm
 Updated.
 *** perl5.001.lwall/lib/Text/Tabs.pm   Wed Jun  7 19:49:20 1995
 --- perl5.002beta1/lib/Text/Tabs.pm    Sat Nov 18 16:08:55 1995
-***************
 
 Index: lib/Text/Wrap.pm
 New module.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/lib/Text/Wrap.pm    Sat Nov 18 16:08:56 1995
-***************
 
 Index: lib/diagnostics.pm
 New module.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/lib/diagnostics.pm  Tue Nov 14 16:16:36 1995
-***************
 
 Index: lib/lib.pm
 Automatically try to load an architecture-dependent library too.
 *** perl5.001.lwall/lib/lib.pm Sat Jul  1 15:51:37 1995
 --- perl5.002beta1/lib/lib.pm  Fri Nov 10 16:50:43 1995
-***************
 
 Index: lib/overload.pm
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/lib/overload.pm     Sat Nov 18 16:03:33 1995
-***************
 
 Index: lib/perl5db.pl
 Emacs and OS/2 fixes.
 *** perl5.001.lwall/lib/perl5db.pl     Sun Mar 12 22:34:53 1995
 --- perl5.002beta1/lib/perl5db.pl      Wed Nov 15 22:37:45 1995
-***************
 
 Index: lib/splain
 New file -- same as diagnostics.pm.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/lib/splain  Tue Nov 14 16:16:36 1995
-***************
 
 Index: mg.c
 Remove unnecessary whichsigname introduced in 5.001n.
 *** perl5.001.lwall/mg.c       Tue Nov 14 15:31:03 1995
 --- perl5.002beta1/mg.c        Wed Nov 15 15:44:10 1995
-***************
 
 Index: minimod.PL
 Made c++ friendly.
 *** perl5.001.lwall/minimod.PL Mon Feb 13 20:15:47 1995
 --- perl5.002beta1/minimod.PL  Sun Nov 19 23:01:02 1995
-***************
 
 Index: miniperlmain.c
 Made c++ friendly.
 *** perl5.001.lwall/miniperlmain.c     Mon Feb 13 21:48:50 1995
 --- perl5.002beta1/miniperlmain.c      Sat Nov 18 15:48:10 1995
-***************
 
 Index: op.c
 Larry's post 5.001mx prototype patch.
 *** perl5.001.lwall/op.c       Tue Nov 14 20:36:08 1995
 --- perl5.002beta1/op.c        Wed Nov 15 22:10:36 1995
-***************
 
 Index: os2/Makefile.SH
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/Makefile.SH     Tue Nov 14 11:07:32 1995
-***************
 
 Index: os2/POSIX.mkfifo
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/POSIX.mkfifo    Tue Nov 14 10:48:16 1995
-***************
 
 Index: os2/README
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/README  Tue Nov 14 14:42:13 1995
-***************
 
 Index: os2/diff.Makefile
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/diff.Makefile   Tue Nov 14 11:09:29 1995
-***************
 
 Index: os2/diff.configure
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/diff.configure  Sun Nov 12 01:31:34 1995
-***************
 
 Index: os2/diff.installperl
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/diff.installperl        Tue Nov 14 11:09:28 1995
-***************
 
 Index: os2/diff.mkdep
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/diff.mkdep      Tue Nov 14 11:09:28 1995
-***************
 
 Index: os2/diff.x2pMakefile
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/diff.x2pMakefile        Tue Nov 14 11:09:29 1995
-***************
 
 Index: os2/os2.c
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/os2.c   Tue Nov 14 11:07:33 1995
-***************
 
 Index: os2/os2ish.h
 New file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/os2/os2ish.h        Tue Nov 14 11:07:33 1995
-***************
 
 Index: perl.c
 Add -h option to print out usage.
@@ -653,7 +2379,6 @@ Add new library hierarchy.  See INSTALL.
 
 *** perl5.001.lwall/perl.c     Tue Nov 14 20:09:28 1995
 --- perl5.002beta1/perl.c      Sun Nov 19 16:11:29 1995
-***************
 
 Index: perl.h
 
@@ -663,243 +2388,203 @@ Check for <locale.h>
 
 *** perl5.001.lwall/perl.h     Thu Nov  9 19:50:43 1995
 --- perl5.002beta1/perl.h      Wed Nov 15 17:13:16 1995
-***************
 
 Index: perldoc.PL
 
 Moved from perldoc.SH.  Updated to handle no nroff.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/perldoc.PL  Tue Nov 14 14:57:57 1995
-***************
 
 Index: pod/Makefile
 Updated for new pods and for new .PL format.
 *** perl5.001.lwall/pod/Makefile       Wed Jun  7 19:50:02 1995
 --- perl5.002beta1/pod/Makefile        Mon Nov 20 13:00:50 1995
-***************
 
 Index: pod/perl.pod
 Updated to refer to new pods.
 *** perl5.001.lwall/pod/perl.pod       Thu Oct  5 19:54:43 1995
 --- perl5.002beta1/pod/perl.pod        Sat Nov 18 17:23:58 1995
-***************
 
 Index: pod/perlbook.pod
 Updated info.
 *** perl5.001.lwall/pod/perlbook.pod   Wed Feb 22 18:32:35 1995
 --- perl5.002beta1/pod/perlbook.pod    Sat Nov 11 17:17:23 1995
-***************
 
 Index: pod/perlbot.pod
 Include SUPER stuff.
 *** perl5.001.lwall/pod/perlbot.pod    Wed Jun  7 19:50:14 1995
 --- perl5.002beta1/pod/perlbot.pod     Fri Nov 10 17:27:33 1995
-***************
 
 Index: pod/perlcall.pod
 Change perlapi to perlxs.
 *** perl5.001.lwall/pod/perlcall.pod   Wed Jun  7 19:50:17 1995
 --- perl5.002beta1/pod/perlcall.pod    Tue Oct 31 15:37:57 1995
-***************
 
 Index: pod/perldata.pod
 Tom's updates.
 *** perl5.001.lwall/pod/perldata.pod   Sun Mar 12 22:35:14 1995
 --- perl5.002beta1/pod/perldata.pod    Sat Nov 18 17:23:59 1995
-***************
 
 Index: pod/perldiag.pod
 Tom's updates.
 *** perl5.001.lwall/pod/perldiag.pod   Tue Nov 14 22:04:11 1995
 --- perl5.002beta1/pod/perldiag.pod    Sun Nov 19 22:10:58 1995
-***************
 
 Index: pod/perldsc.pod
 Tom's updates.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/pod/perldsc.pod     Sat Nov 18 17:24:22 1995
-***************
 
 Index: pod/perlform.pod
 Tom's updates.
 *** perl5.001.lwall/pod/perlform.pod   Wed Feb 22 18:32:41 1995
 --- perl5.002beta1/pod/perlform.pod    Sat Nov 18 17:23:59 1995
-***************
 
 Index: pod/perlfunc.pod
 Tom's updates.
 *** perl5.001.lwall/pod/perlfunc.pod   Tue Nov 14 15:31:33 1995
 --- perl5.002beta1/pod/perlfunc.pod    Sat Nov 18 17:24:01 1995
-***************
 
 Index: pod/perlguts.pod
 Change perlapi to perlxs.
 *** perl5.001.lwall/pod/perlguts.pod   Wed Jun  7 19:50:25 1995
 --- perl5.002beta1/pod/perlguts.pod    Tue Oct 31 15:38:18 1995
-***************
 
 Index: pod/perlipc.pod
 New file from Tom.
 *** perl5.001.lwall/pod/perlipc.pod    Wed Feb 22 18:32:48 1995
 --- perl5.002beta1/pod/perlipc.pod     Sat Nov 18 17:24:02 1995
-***************
 
 Index: pod/perllol.pod
 New file from Tom.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/pod/perllol.pod     Sat Nov 18 17:24:22 1995
-***************
 
 Index: pod/perlmod.pod
 Updates from Tom.
 *** perl5.001.lwall/pod/perlmod.pod    Wed Feb 22 18:32:51 1995
 --- perl5.002beta1/pod/perlmod.pod     Sat Nov 18 17:24:03 1995
-***************
 
 Index: pod/perlop.pod
 Add missing '>'.
 *** perl5.001.lwall/pod/perlop.pod     Tue Nov 14 15:31:37 1995
 --- perl5.002beta1/pod/perlop.pod      Sat Nov 18 17:24:03 1995
-***************
 
 Index: pod/perlpod.pod
 Add note about =cut operator.
 *** perl5.001.lwall/pod/perlpod.pod    Tue Oct 18 12:39:53 1994
 --- perl5.002beta1/pod/perlpod.pod     Sun Nov 19 22:22:59 1995
-***************
 
 Index: pod/perlref.pod
 Updates from Tom.
 *** perl5.001.lwall/pod/perlref.pod    Tue Mar  7 00:56:46 1995
 --- perl5.002beta1/pod/perlref.pod     Sat Nov 18 17:24:04 1995
-***************
 
 Index: pod/perlsyn.pod
 Updates from Tom.
 *** perl5.001.lwall/pod/perlsyn.pod    Sat Mar 11 14:13:48 1995
 --- perl5.002beta1/pod/perlsyn.pod     Sat Nov 18 17:24:04 1995
-***************
 
 Index: pod/perlxs.pod
 Updated.
 *** perl5.001.lwall/pod/perlxs.pod     Tue Nov 14 15:31:42 1995
 --- perl5.002beta1/pod/perlxs.pod      Sun Nov 19 22:12:44 1995
-***************
 
 Index: pod/perlxstut.pod
 New file from Jeff.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/pod/perlxstut.pod   Mon Nov 20 13:02:12 1995
-***************
 
 Index: pod/pod2html.PL
 Updated -- version 1.15 merges Tom's suggestions and ideas from
 pod2fm.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/pod/pod2html.PL     Sun Nov 19 22:11:59 1995
-***************
 
 Index: pod/pod2latex.PL
 Changed to a .PL file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/pod/pod2latex.PL    Wed Nov 15 22:32:39 1995
-***************
 
 Index: pod/pod2man.PL
 Changed to a .PL file.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/pod/pod2man.PL      Wed Nov 15 22:32:51 1995
-***************
 
 Index: pp_ctl.c
 Add OS/2 stuff.
 *** perl5.001.lwall/pp_ctl.c   Wed Nov 15 00:37:25 1995
 --- perl5.002beta1/pp_ctl.c    Wed Nov 15 21:46:37 1995
-***************
 
 Index: pp_sys.c
 Add OS/2 stuff.
 *** perl5.001.lwall/pp_sys.c   Tue Nov 14 21:03:06 1995
 --- perl5.002beta1/pp_sys.c    Wed Nov 15 21:51:33 1995
-***************
 
 Index: proto.h
 Add OS/2 stuff to better protect MYMALLOC.
 *** perl5.001.lwall/proto.h    Tue Nov 14 21:01:28 1995
 --- perl5.002beta1/proto.h     Wed Nov 15 21:55:23 1995
-***************
 
 Index: t/TEST
 Add OS/2 check for perl.exe.
 *** perl5.001.lwall/t/TEST     Sat Jan 14 19:35:33 1995
 --- perl5.002beta1/t/TEST      Tue Nov 14 11:22:08 1995
-***************
 
 Index: t/lib/db-btree.t
 Updated.
 *** perl5.001.lwall/t/lib/db-btree.t   Tue Oct 18 12:44:05 1994
 --- perl5.002beta1/t/lib/db-btree.t    Tue Oct 31 11:53:29 1995
-***************
 
 Index: t/op/overload.t
 Updated.
 *** perl5.001.lwall/t/op/overload.t    Tue Nov 14 20:56:57 1995
 --- perl5.002beta1/t/op/overload.t     Mon Nov 20 15:48:56 1995
-***************
 
 Index: t/op/stat.t
 Add note about tmpfs failures.
 *** perl5.001.lwall/t/op/stat.t        Tue Oct 18 12:46:23 1994
 --- perl5.002beta1/t/op/stat.t Wed Nov 15 22:00:50 1995
-***************
 
 Index: toke.c
 Patch from Paul M. for source filters.
 *** perl5.001.lwall/toke.c     Tue Nov 14 21:59:50 1995
 --- perl5.002beta1/toke.c      Wed Nov 15 22:08:23 1995
-***************
 
 Index: util.c
 Varargs fixes.
 *** perl5.001.lwall/util.c     Wed Jun  7 19:51:19 1995
 --- perl5.002beta1/util.c      Tue Nov 14 10:46:37 1995
-***************
 
 Index: writemain.SH
 Make c++ friendly.
 *** perl5.001.lwall/writemain.SH       Wed Feb  8 19:44:20 1995
 --- perl5.002beta1/writemain.SH        Sat Nov 18 15:51:55 1995
-***************
 
 Index: x2p/Makefile.SH
 Updated for .PL extraction.
 *** perl5.001.lwall/x2p/Makefile.SH    Wed Jun  7 19:51:37 1995
 --- perl5.002beta1/x2p/Makefile.SH     Sun Nov 19 23:17:39 1995
-***************
 
 Index: x2p/a2p.h
 Add OS/2 stuff.
 *** perl5.001.lwall/x2p/a2p.h  Thu Oct 19 21:03:58 1995
 --- perl5.002beta1/x2p/a2p.h   Tue Nov 14 10:46:57 1995
-***************
 
 Index: x2p/cflags.SH
 Add .obj for OS/2.
 *** perl5.001.lwall/x2p/cflags.SH      Tue Oct 18 12:47:34 1994
 --- perl5.002beta1/x2p/cflags.SH       Tue Nov 14 15:18:27 1995
-***************
 
 Index: x2p/find2perl.PL
 Changed from .SH to .PL.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/x2p/find2perl.PL    Sun Nov 19 23:11:58 1995
-***************
 
 Index: x2p/s2p.PL
 Changed from .SH to .PL extraction.
 *** /dev/null  Mon Nov 20 17:28:51 1995
 --- perl5.002beta1/x2p/s2p.PL  Sun Nov 19 23:14:59 1995
-***************
 
 -------------
 Version 5.001
index da3e7db..a360c7f 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -122,7 +122,8 @@ static_ext=''
 useposix=''
 usesafe=''
 d_bsd=''
-d_eunice=''
+d_unlnkallvers=''
+d_vms=''
 d_xenix=''
 eunicefix=''
 Mcc=''
@@ -1010,7 +1011,7 @@ THIS PACKAGE SEEMS TO BE INCOMPLETE.
 You have the option of continuing the configuration process, despite the
 distinct possibility that your kit is damaged, by typing 'y'es.  If you
 do, don't blame me if something goes wrong.  I advise you to type 'n'o
-and contact the author (lwall@netlabs.com).
+and contact the author (lwall@sems.com).
 
 EOM
                echo $n "Continue? [n] $c" >&4
@@ -1207,7 +1208,7 @@ Much effort has been expended to ensure that this shell script will run on any
 Unix system.  If despite that it blows up on yours, your best bet is to edit
 Configure and run it again.  If you can't run Configure for some reason,
 you'll have to generate a config.sh file by hand.  Whatever problems you
-have, let me (lwall@netlabs.com) know how I blew it.
+have, let me (lwall@sems.com) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -1550,7 +1551,7 @@ EOM
        cd hints; ls -C *.sh | $sed 's/\.sh/   /g' >&4
        dflt=''
        : Half the following guesses are probably wrong... If you have better
-       : tests or hints, please send them to lwall@netlabs.com
+       : tests or hints, please send them to lwall@sems.com
        : The metaconfig authors would also appreciate a copy...
        $test -f /irix && osname=irix
        $test -f /xenix && osname=sco_xenix
@@ -4309,7 +4310,7 @@ echo " "
 $echo $n "This may take a while...$c" >&4
 
 : Linux may need the special Dynamic option to nm for shared libraries.
-if test -f /vmlinuz && $nm -D $nm_opt $libc > /dev/null 2>&1; then
+if test -f /vmlinuz && nm -D $nm_opt $libc > /dev/null 2>&1; then
   cat /dev/null >libc.tmp
   for nm_libs_ext in $*; do
     case $nm_libs_ext in *.so*) nm_opt_here=-D ;; *) nm_opt_here='' ;; esac
@@ -8935,8 +8936,9 @@ d_dlopen='$d_dlopen'
 d_dlsymun='$d_dlsymun'
 d_dosuid='$d_dosuid'
 d_dup2='$d_dup2'
+d_unlnkallvers='$d_unlnkallvers'
+d_vms='$d_vms'
 d_eofnblk='$d_eofnblk'
-d_eunice='$d_eunice'
 d_fchmod='$d_fchmod'
 d_fchown='$d_fchown'
 d_fcntl='$d_fcntl'
diff --git a/INSTALL b/INSTALL
index e42fcb8..a301f63 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -522,6 +522,21 @@ If individual tests bomb, you can run them by hand, e.g.,
 
        ./perl op/groups.t
 
+B<NOTE>: one possible reason for errors is that some external programs
+may be broken due to the combination of your environment and the way
+C<make test> exercises them. This may happen for example if you have
+one or more of these environment variables set:
+C<LC_ALL LC_CTYPE LANG>. In certain UNIXes especially the non-English
+locales are known to cause programs to exhibit mysterious errors.
+If you have any of the above environment variables set, please try
+C<setenv LC_ALL C> or <LC_ALL=C;export LC_ALL>, for C<csh>-style and
+C<Bourne>-style shells, respectively, from the command line and then
+retry C<make test>. If the tests then succeed, you may have a broken
+program that is confusing the testing. Please run the troublesome test
+by hand as shown above and see whether you can locate the program.
+Look for things like:
+C<exec, `backquoted command`, system, open("|...")> or C<open("...|")>.
+All these mean that Perl is trying to run some external program.
 =head1 INSTALLING PERL5
 
 =head1 make install
index fc2a6c8..c55759f 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -93,6 +93,9 @@ ext/DynaLoader/dlutils.c      Dynamic loader utilities for dl_*.xs files
 ext/Fcntl/Fcntl.pm             Fcntl extension Perl module
 ext/Fcntl/Fcntl.xs             Fcntl extension external subroutines
 ext/Fcntl/Makefile.PL          Fcntl extension makefile writer
+ext/FileHandle/FileHandle.pm   FileHandle extension Perl module
+ext/FileHandle/FileHandle.xs   FileHandle extension external subroutines
+ext/FileHandle/Makefile.PL     FileHandle extension makefile writer
 ext/GDBM_File/GDBM_File.pm     GDBM extension Perl module
 ext/GDBM_File/GDBM_File.xs     GDBM extension external subroutines
 ext/GDBM_File/Makefile.PL      GDBM extension makefile writer
@@ -211,7 +214,7 @@ hints/next_3.sh             Hints for named architecture
 hints/next_3_0.sh      Hints for named architecture
 hints/opus.sh          Hints for named architecture
 hints/os2.sh           Hints for named architecture
-hints/powerunix.sh     Hints for named architecture
+hints/powerux.sh       Hints for named architecture
 hints/sco.sh           Hints for named architecture
 hints/sco_2_3_0.sh     Hints for named architecture
 hints/sco_2_3_1.sh     Hints for named architecture
@@ -244,6 +247,7 @@ lib/Benchmark.pm    A module to time pieces of code and such
 lib/Carp.pm            Error message base class
 lib/Cwd.pm             Various cwd routines (getcwd, fastcwd, chdir)
 lib/Devel/SelfStubber.pm Generate stubs for SelfLoader.pm
+lib/DirHandle.pm       like FileHandle only for directories
 lib/English.pm         Readable aliases for short variables
 lib/Env.pm             Map environment into ordinary variables
 lib/Exporter.pm                Exporter base class
@@ -252,12 +256,14 @@ lib/ExtUtils/MM_VMS.pm            MakeMaker methods for VMS.
 lib/ExtUtils/MakeMaker.pm      Write Makefiles for extensions
 lib/ExtUtils/Manifest.pm       Utilities to write MANIFEST files
 lib/ExtUtils/Mkbootstrap.pm    Writes a bootstrap file (see MakeMaker)
+lib/ExtUtils/Mksymlists.pm     Writes a linker options file for extensions
 lib/ExtUtils/typemap           Extension interface types
 lib/ExtUtils/xsubpp            External subroutine preprocessor
 lib/File/Basename.pm   A module to emulate the basename program
 lib/File/CheckTree.pm  Perl module supporting wholesale file mode validation
 lib/File/Find.pm       Routines to do a find
 lib/File/Path.pm       A module to do things like `mkdir -p' and `rm -r'
+lib/FileCache.pm       Keep more files open than the system permits
 lib/FileHandle.pm      FileHandle methods
 lib/Getopt/Long.pm     A module to fetch command options (GetOptions)
 lib/Getopt/Std.pm      A module to fetch command options (getopt, getopts)
@@ -270,9 +276,11 @@ lib/Math/Complex.pm        A Complex package
 lib/Net/Ping.pm                Ping methods
 lib/Pod/Text.pm                Convert POD data to formatted ASCII text
 lib/Search/Dict.pm     A module to do binary search on dictionaries
+lib/SelectSaver.pm     A module to enforce proper select scoping
 lib/SelfLoader.pm      A module to load functions only on demand.
 lib/Shell.pm           A module to make AUTOLOADEed system() calls
 lib/SubstrHash.pm      Compact hash for known key, value and table size
+lib/Symbol.pm          Symbol table manipulation routines
 lib/Sys/Hostname.pm    Hostname methods
 lib/Sys/Syslog.pm      Perl module supporting syslogging
 lib/Term/Cap.pm                Perl module supporting termcap usage
@@ -331,6 +339,7 @@ lib/tainted.pl              Old code for tainting
 lib/termcap.pl         Perl library supporting termcap usage
 lib/timelocal.pl       Perl library supporting inverse of localtime, gmtime
 lib/validate.pl                Perl library supporting wholesale file mode validation
+lib/vars.pm            Declare pseudo-imported global variables
 makeaperl.SH           perl script that produces a new perl binary
 makedepend.SH          Precursor to makedepend
 makedir.SH             Precursor to makedir
@@ -464,7 +473,9 @@ t/lib/bigintpm.t    See if BigInt.pm works
 t/lib/db-btree.t       See if DB_File works
 t/lib/db-hash.t                See if DB_File works
 t/lib/db-recno.t       See if DB_File works
+t/lib/dirhand.t                See if DirHandle works
 t/lib/english.t                See if English works
+t/lib/filehand.t       See if FileHandle works
 t/lib/gdbm.t           See if GDBM_File works
 t/lib/ndbm.t           See if NDBM_File works
 t/lib/odbm.t           See if ODBM_File works
@@ -544,13 +555,15 @@ vms/config.vms            default config.h for VMS
 vms/descrip.mms                MM[SK] description file for build
 vms/ext/Filespec.pm    VMS-Unix file syntax interconversion
 vms/ext/MM_VMS.pm      VMS-specific methods for MakeMaker
-vms/ext/VMS/stdio/Makefile.PL  MakeMaker driver for VMS::stdio
-vms/ext/VMS/stdio/stdio.pm     VMS options to stdio routines
-vms/ext/VMS/stdio/stdio.xs     VMS options to stdio routines
+vms/ext/stdio/Makefile.PL      MakeMaker driver for VMS::stdio
+vms/ext/stdio/stdio.pm VMS options to stdio routines
+vms/ext/stdio/stdio.xs VMS options to stdio routines
 vms/gen_shrfls.pl      generate options files and glue for shareable image
 vms/genconfig.pl       retcon config.sh from config.h
 vms/genopt.com         hack to write options files in case of broken makes
 vms/mms2make.pl                convert descrip.mms to make syntax
+vms/make_command.com   record MM[SK] command used to build Perl
+vms/myconfig.com       record local configuration info for bug report
 vms/perlvms.pod                VMS-specific additions to Perl documentation
 vms/perly_c.vms                perly.c with fixed declarations for global syms
 vms/perly_h.vms                perly.h with fixed declarations for global syms
index e36cf10..0560beb 100644 (file)
@@ -224,9 +224,15 @@ FORCE:
 
 # The $& notation tells Sequent machines that it can do a parallel make,
 # and is harmless otherwise.
+# The miniperl -w -MExporter line is a basic cheap test to catch errors
+# before make goes on to run preplibrary and then MakeMaker on extensions.
+# This is very handy because later errors are often caused by miniperl
+# build problems but that's not obvious to the novice.
+# The Module used here must not depend on Config or any extensions.
 
 miniperl: $& miniperlmain.o $(perllib)
        $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain.o $(perllib) $(libs)
+       @miniperl -w -MExporter -e 0 || $(MAKE) minitest
 
 miniperlmain.o: miniperlmain.c
        $(CCCMD) $(PLDLFLAGS) $*.c
@@ -327,7 +333,7 @@ install.man:        all
 # normally shouldn't remake perly.[ch].
 
 run_byacc:     FORCE
-       @ echo 'Expect' 129 shift/reduce and 1 reduce/reduce conflict
+       @ echo 'Expect' 130 shift/reduce and 1 reduce/reduce conflict
        $(BYACC) -d perly.y
        sh $(shellflags) ./perly.fixer y.tab.c perly.c
        mv y.tab.h perly.h
diff --git a/README b/README
index 0f92ea5..0a7ab1c 100644 (file)
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
 
                           Perl Kit, Version 5.0
 
-           Copyright (c) 1989,1990,1991,1992,1993,1994  Larry Wall
+                      Copyright 1989-1996, Larry Wall
                            All rights reserved.
 
     This program is free software; you can redistribute it and/or modify
@@ -75,12 +75,15 @@ defaults.
 2) Read the manual entries before running perl.
 
 3) IMPORTANT!  Help save the world!  Communicate any problems and suggested
-patches to me, lwall@netlabs.com (Larry Wall), so we can
+patches to me, lwall@sems.com (Larry Wall), so we can
 keep the world in sync.  If you have a problem, there's someone else
 out there who either has had or will have the same problem.
 It's usually helpful if you send the output of the "myconfig" script
 in the main perl directory.
 
+If you've succeeded in compiling perl, the perlbug script in the utils/
+subdirectory can be used to help mail in a bug report.
+
 If possible, send in patches such that the patch program will apply them.
 Context diffs are the best, then normal diffs.  Don't send ed scripts--
 I've probably changed my copy since the version you have.
index c811a71..a530103 100644 (file)
@@ -1,4 +1,4 @@
-Last revised: 14-Dec-1995 by Charles Bailey  bailey@genetics.upenn.edu
+Last revised: 19-Jan-1996 by Charles Bailey  bailey@genetics.upenn.edu
 
 The VMS port of Perl is still under development.  At this time, the Perl
 binaries built under VMS handle internal operations properly, for the most
@@ -12,8 +12,8 @@ you'd like to add something yourself, or join the porting team, we'd love to
 have you!
 
 The current sources and build procedures have been tested on a VAX using VAXC
-and on an AXP using DECC.  If you run into problems with other compilers,
-please let us know.
+and DECC, and on an AXP using DECC.  If you run into problems with other
+compilers, please let us know.
 
 Note to DECC users: Some early versions of the DECCRTL contained a few bugs
 which affect Perl performance:
@@ -49,7 +49,7 @@ stacks available, so it's difficult to automate the process of building Perl
 with socket support in a way which will work on all systems.  
 
 By default, Perl is built without IP socket support.  If you define the macro
-SOCKET when invoking MMS, however, socket support will be included.  As
+SOCKET when invoking MMK, however, socket support will be included.  As
 distributed, Perl for VMS includes support for the SOCKETSHR socket library,
 which is layered on MadGoat software's vendor-independent NETLIB interface. 
 This provides support for all socket calls used by Perl except the
@@ -114,7 +114,10 @@ subdirectory contains several files, among which are the following:
   WriteMain.Pl   - Perl script to generate Perlmain.C
 The [.Ext...] directories contain VMS-specific extensions distributed with
 Perl.  There may also be other files in [.VMS...] pertaining to features under
-development; for the most part, you can ignore them.
+development; for the most part, you can ignore them.  Note that packages in
+[.ext.*] are not built with Perl by default; you build the ones you want
+once the basic Perl build is complete (see the perlvms docs for instructions
+on building extensions.)
 
 Config.VMS and Decrip.MMS/Makefile are set up to build a version of Perl which
 includes all features known to work when this release was assembled.  If you
@@ -141,7 +144,7 @@ it specifically from Config.
 Examine the information at the beginning of Descrip.MMS for information about
 specifying alternate C compilers or building a version of Perl with debugging
 support.  For instance, if you want to use DECC, you'll need to include the
-/macro="decc=1" qualifier to MMS  (If you're using make, these options are not
+/macro="decc=1" qualifier to MMK  (If you're using make, these options are not
 supported.)  If you're on an AXP system, define the macro __AXP__ (MMK does
 this for you), and DECC will automatically be selected.
 
@@ -160,7 +163,14 @@ set up to use VAXC on a VAX, and does not include socket support.  You can
 either edit the Makefile by hand, using Descrip.MMS as a guide, or use the
 Makefile to build Miniperl.Exe, and then run the Perl script MMS2Make.pl,
 found in the [.VMS] subdirectory, to generate a new Makefile with the options
-appropriate to your site.
+appropriate to your site.  If you are using MM[SK], and you decide to rebuild
+Perl with a different set of parameters (e.g. changing the C compiler, or
+adding socket support), be sure to say
+$ MMK/Descrip=[.VMS] realclean
+first, in order to remove files generated during the previous build.  If
+you omit this step, you risk ending up with a copy of Perl which
+composed partially of old files and partially of new ones, which may lead
+to strange effects when you try to run Perl.
 
 Note for sites using DECC:  A bug in some early versions of the DECC RTL on the
 AXP causes newlines to be lost when writing to a pipe.  This causes
@@ -191,6 +201,17 @@ This will build the following files:
                         used to build PerlShr.Exe.  It should be used when
                         rebuilding PerlShr.Exe via MakeMaker-produced
                         Descrip.MMS files for static extensions.
+  c2ph                - Perl program which generates template code to access
+                        C struct members from Perl.
+  h2ph                - Perl program which generates template code to access
+                        #defined constants in a C header file from Perl,
+                        using the "old-style" interface.  (Largely supplanted
+                        by h2xs.)
+  h2xs                - Perl program which generates template files for creating
+                        XSUB extensions, optionally beginning with the #defined
+                        constants in a C header file.
+  [.pod]perldoc       - A Perl program which locates and displays documentation
+                        for Perl and its extensions.
   [.Lib]Config.pm     - the Perl extension which saves configuration information
                         about Perl and your system.
   [.Lib]DynaLoader.pm - The Perl extension which performs dynamic linking of
@@ -201,6 +222,30 @@ There are, of course, a number of other files created for use during the build.
 Once you've got the binaries built, you may wish to `build' the `tidy' or
 `clean' targets to remove extra files.
 
+If you run into problems during the build, you can get help from the VMSPerl
+or perl5-porters mailing lists (see below).  When you report the problem,
+please include the following information:
+  - The version of Perl you're trying to build.  Please include any
+    "letter" patchlevel, in addition to the version number.  If the
+    build successfully created Miniperl.Exe, you can check this by
+    saying '$ MCR Sys$Disk:[]Miniperl -v'.  Also, please mention
+    where you obtained the distribution kit; in particular, note
+    whether you were using a basic Perl kit or the VMS test kit
+    (see below).
+  - The exact command you issued to build Perl.
+  - A copy of all error messages which were generated during the build.
+    Please include enough of the build log to establish the context of
+    the error messages.
+  - A summary of your configuration.  If the build progressed far enough
+    to generate Miniperl.Exe and [.Lib]Config.pm, you can obtain this
+    by saying '$ MCR Sys$Disk:[]Miniperl "-V"' (note the "" around -V).
+    If not, then you can say '$ MMK/Descrip=[.VMS] printconfig' to
+    produce the summary.
+This may sound like a lot of information to send, but it'll often make
+it easier for someone to spot the problem, instead of having to give
+a spectrum of possibilities.
+  
+
 
 * Installing Perl once it's built
 
@@ -227,12 +272,17 @@ Once the build is complete, you'll need to do the following:
     is written in a simple markup format which can be easily read.  In this
     directory as well are pod2man and pod2html translators to reformat the
     docs for common display engines; a pod2hlp translator is under development.
-    Information on Perl can also be gleaned from the files in the [.doc]
-    subdirectory (internals documents and summaries of changes), and from
-    the test scripts in the [.t...] subdirectories.  For this reason,
-    you may wish to copy these subtrees into directories under Perl_Root.
+    These files are copied to [.lib.pod] during the installation.
+  - Define a foreign command to execute perldoc, such as
+    $ Perldoc == "''Perl' Perl_Root:[lib.pod]Perldoc -t"
+    This will allow users to retrieve documentation using Perldoc.  For
+    more details, say "perldoc perldoc".
 That's it.
 
+If you run into a bug in Perl, please submit a bug report.  The PerlBug
+program, found in the [.lib] directory, will walk you through the process
+of assembling the necessary information into a bug report, and sending
+of to the Perl bug reporting address, perlbug@perl.com.
 
 * For more information
 
@@ -294,7 +344,7 @@ and to the entire VMSperl group for useful advice and suggestions.  In addition
 the perl5-porters, especially Andy Dougherty <doughera@lafcol.lafayette.edu>
 and Tim Bunce <Tim.Bunce@ig.co.uk>,  deserve credit for their creativity and
 willingness to work with the VMS newcomers.  Finally, the greatest debt of
-gratitude is due to Larry Wall <lwall@netlabs.com>, for having the ideas which
+gratitude is due to Larry Wall <lwall@sems.com>, for having the ideas which
 have made our sleepless nights possible.
 
 Thanks,
diff --git a/av.c b/av.c
index 0e20af8..b27ec76 100644 (file)
--- a/av.c
+++ b/av.c
@@ -64,7 +64,9 @@ I32 key;
        }
        else {
            if (AvALLOC(av)) {
+#ifndef STRANGE_MALLOC
                U32 bytes;
+#endif
 
                newmax = key + AvMAX(av) / 5;
              resize:
@@ -82,8 +84,10 @@ I32 key;
                newmax = tmp - 1;
                New(2,ary, newmax+1, SV*);
                Copy(AvALLOC(av), ary, AvMAX(av)+1, SV*);
-               if (AvMAX(av) > 64 && !AvREUSED(av))
-                   sv_add_arena((char*)AvALLOC(av), AvMAX(av) * sizeof(SV*),0);
+               if (AvMAX(av) > 64 && !nice_chunk) {
+                   nice_chunk = (char*)AvALLOC(av);
+                   nice_chunk_size = (AvMAX(av) + 1) * sizeof(SV*);
+               }
                else
                    Safefree(AvALLOC(av));
                AvALLOC(av) = ary;
@@ -326,7 +330,6 @@ register AV *av;
     AvALLOC(av) = 0;
     SvPVX(av) = 0;
     AvMAX(av) = AvFILL(av) = -1;
-    AvREUSED_on(av);   /* Avoid leak of making SVs out of old memory again. */
     if (AvARYLEN(av)) {
        SvREFCNT_dec(AvARYLEN(av));
        AvARYLEN(av) = 0;
index d4e039c..c67783c 100644 (file)
@@ -1373,11 +1373,18 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
  */
 #define Uid_t $uidtype         /* UID type */
 
+/* UNLINK_ALL_VERSIONS:
+ *     This symbol, if defined, indicates that the program should arrange
+ *     ro remove all versions of a file if unlink() is called.
+ */
+#$d_unlnkallvers UNLINK_ALL_VERSIONS           /**/
+
 /* VMS:
  *     This symbol, if defined, indicates that the program is running under
- *     VMS.  It is currently only set in conjunction with the EUNICE symbol.
+ *     VMS.  It is currently automatically set by cpps running under VMS,
+ *     and is included here for completeness only.
  */
-#$d_eunice VMS         /**/
+#$d_vms VMS            /**/
 
 /* LOC_SED:
  *     This symbol holds the complete pathname to the sed program.
diff --git a/cop.h b/cop.h
index 88bed59..b503309 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -180,6 +180,7 @@ struct subst {
     char *     sbu_m;
     char *     sbu_strend;
     char *     sbu_subbase;
+    REGEXP *   sbu_rx;
 };
 #define sb_iters       cx_u.cx_subst.sbu_iters
 #define sb_maxiters    cx_u.cx_subst.sbu_maxiters
@@ -193,6 +194,7 @@ struct subst {
 #define sb_m           cx_u.cx_subst.sbu_m
 #define sb_strend      cx_u.cx_subst.sbu_strend
 #define sb_subbase     cx_u.cx_subst.sbu_subbase
+#define sb_rx          cx_u.cx_subst.sbu_rx
 
 #define PUSHSUBST(cx) CXINC, cx = &cxstack[cxstack_ix],                        \
        cx->sb_iters            = iters,                                \
@@ -206,6 +208,7 @@ struct subst {
        cx->sb_s                = s,                                    \
        cx->sb_m                = m,                                    \
        cx->sb_strend           = strend,                               \
+       cx->sb_rx               = rx,                                   \
        cx->cx_type             = CXt_SUBST
 
 #define POPSUBST(cx) cxstack_ix--
diff --git a/doio.c b/doio.c
index 0e8713e..f20d9f7 100644 (file)
--- a/doio.c
+++ b/doio.c
 #endif
 
 bool
-do_open(gv,name,len,supplied_fp)
+do_open(gv,name,len,as_raw,rawmode,rawperm,supplied_fp)
 GV *gv;
 register char *name;
 I32 len;
+int as_raw;
+int rawmode, rawperm;
 FILE *supplied_fp;
 {
-    FILE *fp;
     register IO *io = GvIOn(gv);
-    char *myname = savepv(name);
-    int result;
-    int fd;
-    int writing = 0;
-    int dodup;
-    char mode[3];              /* stdio file mode ("r\0" or "r+\0") */
     FILE *saveifp = Nullfp;
     FILE *saveofp = Nullfp;
     char savetype = ' ';
+    int writing = 0;
+    FILE *fp;
+    int fd;
+    int result;
 
-    SAVEFREEPV(myname);
-    mode[0] = mode[1] = mode[2] = '\0';
-    name = myname;
     forkprocess = 1;           /* assume true if no fork */
-    while (len && isSPACE(name[len-1]))
-       name[--len] = '\0';
+
     if (IoIFP(io)) {
        fd = fileno(IoIFP(io));
        if (IoTYPE(io) == '-')
@@ -105,95 +100,119 @@ FILE *supplied_fp;
              GvENAME(gv));
        IoOFP(io) = IoIFP(io) = Nullfp;
     }
-    if (*name == '+' && len > 1 && name[len-1] != '|') {       /* scary */
-       mode[1] = *name++;
-       mode[2] = '\0';
-       --len;
-       writing = 1;
-    }
-    else  {
-       mode[1] = '\0';
-    }
-    IoTYPE(io) = *name;
-    if (*name == '|') {
-       /*SUPPRESS 530*/
-       for (name++; isSPACE(*name); name++) ;
-       if (strNE(name,"-"))
-           TAINT_ENV();
-       TAINT_PROPER("piped open");
-       if (dowarn && name[strlen(name)-1] == '|')
-           warn("Can't do bidirectional pipe");
-       fp = my_popen(name,"w");
-       writing = 1;
+
+    if (as_raw) {
+       result = rawmode & 3;
+       IoTYPE(io) = "<>++"[result];
+       writing = (result > 0);
+       fd = open(name, rawmode, rawperm);
+       if (fd == -1)
+           fp = NULL;
+       else {
+           fp = fdopen(fd, ((result == 0) ? "r"
+                            : (result == 1) ? "w"
+                            : "r+"));
+           if (!fp)
+               close(fd);
+       }
     }
-    else if (*name == '>') {
-       TAINT_PROPER("open");
-       name++;
-       if (*name == '>') {
-           mode[0] = IoTYPE(io) = 'a';
-           name++;
+    else {
+       char *myname;
+       char mode[3];           /* stdio file mode ("r\0" or "r+\0") */
+       int dodup;
+
+       myname = savepvn(name, len);
+       SAVEFREEPV(myname);
+       name = myname;
+       while (len && isSPACE(name[len-1]))
+           name[--len] = '\0';
+
+       mode[0] = mode[1] = mode[2] = '\0';
+       IoTYPE(io) = *name;
+       if (*name == '+' && len > 1 && name[len-1] != '|') { /* scary */
+           mode[1] = *name++;
+           --len;
+           writing = 1;
        }
-       else
-           mode[0] = 'w';
-       writing = 1;
-       if (*name == '&') {
-         duplicity:
-           dodup = 1;
+
+       if (*name == '|') {
+           /*SUPPRESS 530*/
+           for (name++; isSPACE(*name); name++) ;
+           if (strNE(name,"-"))
+               TAINT_ENV();
+           TAINT_PROPER("piped open");
+           if (dowarn && name[strlen(name)-1] == '|')
+               warn("Can't do bidirectional pipe");
+           fp = my_popen(name,"w");
+           writing = 1;
+       }
+       else if (*name == '>') {
+           TAINT_PROPER("open");
            name++;
-           if (*name == '=') {
-               dodup = 0;
+           if (*name == '>') {
+               mode[0] = IoTYPE(io) = 'a';
                name++;
            }
-           if (!*name && supplied_fp)
-               fp = supplied_fp;
-           else {
-               while (isSPACE(*name))
+           else
+               mode[0] = 'w';
+           writing = 1;
+
+           if (*name == '&') {
+             duplicity:
+               dodup = 1;
+               name++;
+               if (*name == '=') {
+                   dodup = 0;
                    name++;
-               if (isDIGIT(*name))
-                   fd = atoi(name);
+               }
+               if (!*name && supplied_fp)
+                   fp = supplied_fp;
                else {
-                   IO* thatio;
-                   gv = gv_fetchpv(name,FALSE,SVt_PVIO);
-                   thatio = GvIO(gv);
-                   if (!thatio) {
+                   /*SUPPRESS 530*/
+                   for (; isSPACE(*name); name++) ;
+                   if (isDIGIT(*name))
+                       fd = atoi(name);
+                   else {
+                       IO* thatio;
+                       gv = gv_fetchpv(name,FALSE,SVt_PVIO);
+                       thatio = GvIO(gv);
+                       if (!thatio) {
 #ifdef EINVAL
-                       SETERRNO(EINVAL,SS$_IVCHAN);
+                           SETERRNO(EINVAL,SS$_IVCHAN);
 #endif
-                       goto say_false;
+                           goto say_false;
+                       }
+                       if (IoIFP(thatio)) {
+                           fd = fileno(IoIFP(thatio));
+                           if (IoTYPE(thatio) == 's')
+                               IoTYPE(io) = 's';
+                       }
+                       else
+                           fd = -1;
                    }
-                   if (IoIFP(thatio)) {
-                       fd = fileno(IoIFP(thatio));
-                       if (IoTYPE(thatio) == 's')
-                           IoTYPE(io) = 's';
-                   }
-                   else
-                       fd = -1;
-               }
-               if (dodup)
-                   fd = dup(fd);
-               if (!(fp = fdopen(fd,mode)))
                    if (dodup)
-                       close(fd);
-           }
-       }
-       else {
-           while (isSPACE(*name))
-               name++;
-           if (strEQ(name,"-")) {
-               fp = stdout;
-               IoTYPE(io) = '-';
+                       fd = dup(fd);
+                   if (!(fp = fdopen(fd,mode)))
+                       if (dodup)
+                           close(fd);
+               }
            }
-           else  {
-               fp = fopen(name,mode);
+           else {
+               /*SUPPRESS 530*/
+               for (; isSPACE(*name); name++) ;
+               if (strEQ(name,"-")) {
+                   fp = stdout;
+                   IoTYPE(io) = '-';
+               }
+               else  {
+                   fp = fopen(name,mode);
+               }
            }
        }
-    }
-    else {
-       if (*name == '<') {
+       else if (*name == '<') {
+           /*SUPPRESS 530*/
+           for (name++; isSPACE(*name); name++) ;
            mode[0] = 'r';
-           name++;
-           while (isSPACE(*name))
-               name++;
            if (*name == '&')
                goto duplicity;
            if (strEQ(name,"-")) {
@@ -340,7 +359,7 @@ register GV *gv;
        sv_setsv(GvSV(gv),sv);
        SvSETMAGIC(GvSV(gv));
        oldname = SvPVx(GvSV(gv), len);
-       if (do_open(gv,oldname,len,Nullfp)) {
+       if (do_open(gv,oldname,len,FALSE,0,0,Nullfp)) {
            if (inplace) {
                TAINT_PROPER("inplace open");
                if (strEQ(oldname,"-")) {
@@ -388,7 +407,7 @@ register GV *gv;
                    do_close(gv,FALSE);
                    (void)unlink(SvPVX(sv));
                    (void)rename(oldname,SvPVX(sv));
-                   do_open(gv,SvPVX(sv),SvCUR(GvSV(gv)),Nullfp);
+                   do_open(gv,SvPVX(sv),SvCUR(GvSV(gv)),FALSE,0,0,Nullfp);
 #endif /* MSDOS */
 #else
                    (void)UNLINK(SvPVX(sv));
@@ -417,7 +436,7 @@ register GV *gv;
                sv_setpvn(sv,">",1);
                sv_catpv(sv,oldname);
                SETERRNO(0,0);          /* in case sprintf set errno */
-               if (!do_open(argvoutgv,SvPVX(sv),SvCUR(sv),Nullfp)) {
+               if (!do_open(argvoutgv,SvPVX(sv),SvCUR(sv),FALSE,0,0,Nullfp)) {
                    warn("Can't do inplace edit on %s: %s",
                      oldname, Strerror(errno) );
                    do_close(gv,FALSE);
@@ -1286,7 +1305,7 @@ SV **sp;
 #endif
 #if !defined(HAS_MSG) || !defined(HAS_SEM) || !defined(HAS_SHM)
     default:
-       croak("%s not implemented", op_name[optype]);
+       croak("%s not implemented", op_desc[optype]);
 #endif
     }
     return -1;                 /* should never happen */
@@ -1342,7 +1361,7 @@ SV **sp;
 #endif
 #if !defined(HAS_MSG) || !defined(HAS_SEM) || !defined(HAS_SHM)
     default:
-       croak("%s not implemented", op_name[optype]);
+       croak("%s not implemented", op_desc[optype]);
 #endif
     }
 
@@ -1359,7 +1378,7 @@ SV **sp;
            a = SvPV(astr, len);
            if (len != infosize)
                croak("Bad arg length for %s, is %d, should be %d",
-                       op_name[optype], len, infosize);
+                       op_desc[optype], len, infosize);
        }
     }
     else
diff --git a/doop.c b/doop.c
index 7f00f04..c906db7 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -442,10 +442,13 @@ I32
 do_chomp(sv)
 register SV *sv;
 {
-    register I32 count = 0;
+    register I32 count;
     STRLEN len;
     char *s;
-    
+
+    if (RsSNARF(rs))
+       return 0;
+    count = 0;
     if (SvTYPE(sv) == SVt_PVAV) {
        register I32 i;
         I32 max;
@@ -472,7 +475,7 @@ register SV *sv;
        s = SvPV_force(sv, len);
     if (s && len) {
        s += --len;
-       if (rspara) {
+       if (RsPARA(rs)) {
            if (*s != '\n')
                goto nope;
            ++count;
@@ -482,21 +485,24 @@ register SV *sv;
                ++count;
            }
        }
-       else if (rslen == 1) {
-           if (*s != rschar)
-               goto nope;
-           ++count;
-       } 
        else {
-           if (len < rslen - 1)
-               goto nope;
-           len -= rslen - 1;
-           s -= rslen - 1;
-           if (bcmp(s, rs, rslen))
-               goto nope;
-           count += rslen;
+           STRLEN rslen;
+           char *rsptr = SvPV(rs, rslen);
+           if (rslen == 1) {
+               if (*s != *rsptr)
+                   goto nope;
+               ++count;
+           }
+           else {
+               if (len < rslen)
+                   goto nope;
+               len -= rslen - 1;
+               s -= rslen - 1;
+               if (bcmp(s, rsptr, rslen))
+                   goto nope;
+               count += rslen;
+           }
        }
-
        *s = '\0';
        SvCUR_set(sv, len);
        SvNIOK_off(sv);
index 8747f2d..42fdf3e 100644 (file)
--- a/dosish.h
+++ b/dosish.h
@@ -1,5 +1,8 @@
 #define ABORT() abort();
 
+#define BIT_BUCKET "/dev/null"  /* Will this work? */
+#define PERL_SYS_INIT(c,v)
+
 /*
  * fwrite1() should be a routine with the same calling sequence as fwrite(),
  * but which outputs all of the bytes requested as a single stream (unlike
diff --git a/dump.c b/dump.c
index f5073a0..19300e1 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -185,7 +185,9 @@ register OP *op;
                 op->op_type == OP_AELEM ||
                 op->op_type == OP_HELEM )
        {
-           if (op->op_private & OPpDEREF_DB)
+           if (op->op_private & OPpENTERSUB_AMPER)
+               (void)strcat(buf,"AMPER,");
+           if (op->op_private & OPpENTERSUB_DB)
                (void)strcat(buf,"DB,");
            if (op->op_private & OPpDEREF_AV)
                (void)strcat(buf,"AV,");
index 5a400ef..0505ea7 100644 (file)
@@ -27,7 +27,7 @@
 ;;; Corrections made by Ilya Zakharevich ilya@math.mps.ohio-state.edu
 ;;; XEmacs changes by Peter Arius arius@informatik.uni-erlangen.de
 
-;; $Id: cperl-mode.el,v 1.15 1995/10/07 22:23:37 ilya Exp ilya $
+;; $Id: cperl-mode.el,v 1.19 1996/01/31 01:14:31 ilya Exp ilya $
 
 ;;; To use this mode put the following into your .emacs file:
 
 ;;; lot of faces can be set up, but are not visible on your screen
 ;;; since the coloring rules for this faces are not defined.
 
-;;; Tips: ========================================
-
-;;; get newest version of this package from
-;;; ftp://ftp.math.ohio-state.edu/pub/users/ilya/lisp
-;;; and/or
-;;; ftp://ftp.math.ohio-state.edu/pub/users/ilya/perl
-
-;;; Get support packages font-lock-extra.el, imenu-go.el from the same place.
-;;; (Look for other files there too... ;-) Get a patch for imenu.el.
-
-;;; Get perl5-info from 
-;;   http://www.metronet.com:70/9/perlinfo/perl5/manual/perl5-info.tar.gz
-;;; (may be quite obsolete, but still useful).
-
-;;; If you use imenu-go, run imenu on perl5-info buffer (can do it from
-;;; CPerl menu).
-
-;;;; Known problems: ========================================
-
-;;; The very new pod
-;;; features. The rules are:
-;;; /\n=/ should start comment mode, and
-;;; /\n=cut\s/ should stop comment mode
-
-;;; Expansion of keywords tries to detect this kind of commenting, but
-;;; a "=" that starts a perl row (as in multiline comment and here
-;;; document) can confuse it.
-;;; The main trick (to
-;;; make $ a "backslash") makes constructions like ${aaa} look like
-;;; unbalanced braces. The only  trick I can think out is to insert it as
-;;; $ {aaa} (legal in perl5, not in perl4). 
-
-;;;; Known non-problems: ========================================
-
-;;; Perl quoting rules are too hard for CPerl. Try to help it: add
-;;; comments with embedded quotes to fix CPerl misunderstandings:
-
-;;; $a='500$';      # ';
-
-;;; You won't need it too often.
-
-;;; Now the indentation code is pretty wise. If you still get wrong
-;;; indentation in situation that you think the code should be able to
-;;; parse, try:
-
-;;; a) Check what Emacs thinks about balance of your parentheses.
-;;; b) Supply the code to me (IZ).
-
 ;;; Updates: ========================================
 
 ;;; Made less hairy by default: parentheses not electric, 
 ;;;; After 1.14:
 ;;; Recognizes (tries to ;-) {...} which are not blocks during indentation.
 ;;; `cperl-close-paren-offset' affects ?\] too (and ?\} if not block)
+;;; Bug with auto-filling comments started with "##" corrected.
+
+;;;; Very slow now: on DB::DB 0.91, 486/66:
+
+;;;Function Name                             Call Count  Elapsed Time  Average Time
+;;;========================================  ==========  ============  ============
+;;;cperl-block-p                             469         3.7799999999  0.0080597014
+;;;cperl-get-state                           505         163.39000000  0.3235445544
+;;;cperl-comment-indent                      12          0.0299999999  0.0024999999
+;;;cperl-backward-to-noncomment              939         4.4599999999  0.0047497337
+;;;cperl-calculate-indent                    505         172.22000000  0.3410297029
+;;;cperl-indent-line                         505         172.88000000  0.3423366336
+;;;cperl-use-region-p                        40          0.0299999999  0.0007499999
+;;;cperl-indent-exp                          1           177.97000000  177.97000000
+;;;cperl-to-comment-or-eol                   1453        3.9800000000  0.0027391603
+;;;cperl-backward-to-start-of-continued-exp  9           0.0300000000  0.0033333333
+;;;cperl-indent-region                       1           177.94000000  177.94000000
+
+;;;; After 1.15:
+;;; Takes into account white space after opening parentheses during indent.
+;;; May highlight pods and here-documents: see `cperl-pod-here-scan',
+;;; `cperl-pod-here-fontify', `cperl-pod-face'. Does not use this info
+;;; for indentation so far.
+;;; Fontification updated to 19.30 style. 
+;;; The change 19.29->30 did not add all the required functionality,
+;;;     but broke "font-lock-extra.el". Get "choose-color.el" from
+;;;       ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs
+
+;;;; After 1.16:
+;;;       else # comment
+;;;    recognized as a start of a block.
+;;;  Two different font-lock-levels provided.
+;;;  `cperl-pod-head-face' introduced. Used for highlighting.
+;;;  `imenu' marks pods, +Packages moved to the head. 
+
+;;;; After 1.17:
+;;;  Scan for pods highlights here-docs too.
+;;;  Note that the tag of here-doc may be rehighlighted later by lazy-lock.
+;;;  Only one here-doc-tag per line is supported, and one in comment
+;;;  or a string may break fontification.
+;;;  POD headers were supposed to fill one line only.
+
+;;;; After 1.18:
+;;;  `font-lock-keywords' were set in 19.30 style _always_. Current scheme 
+;;;    may  break under XEmacs.
+;;;  `cperl-calculate-indent' dis suppose that `parse-start' was defined.
+;;;  `fontified' tag is added to fontified text as well as `lazy-lock' (for
+;;;    compatibility with older lazy-lock.el) (older one overfontifies
+;;;    something nevertheless :-().
+;;;  Will not indent something inside pod and here-documents.
+;;;  Fontifies the package name after import/no/bootstrap.
+;;;  Added new entry to menu with meta-info about the mode.
 
 (defvar cperl-extra-newline-before-brace nil
   "*Non-nil means that if, elsif, while, until, else, for, foreach
@@ -247,6 +249,7 @@ instead of:
        if () {
        }
 ")
+
 (defvar cperl-indent-level 2
   "*Indentation of CPerl statements with respect to containing block.")
 (defvar cperl-lineup-step nil
@@ -313,6 +316,118 @@ Can be overwritten by `cperl-hairy' if nil.")
   "*Not-nil (and non-null) means not to prompt on C-h f.
 The opposite behaviour is always available if prefixed with C-c.
 Can be overwritten by `cperl-hairy' if nil.")
+
+(defvar cperl-pod-face 'font-lock-comment-face
+  "*The result of evaluation of this expression is used for pod highlighting.")
+
+(defvar cperl-pod-head-face 'font-lock-variable-name-face
+  "*The result of evaluation of this expression is used for pod highlighting.
+Font for POD headers.")
+
+(defvar cperl-here-face 'font-lock-string-face
+  "*The result of evaluation of this expression is used for here-docs highlighting.")
+
+(defvar cperl-pod-here-fontify '(featurep 'font-lock)
+  "*Not-nil after evaluation means to highlight pod and here-docs sections.")
+
+(defvar cperl-pod-here-scan t
+  "*Not-nil means look for pod and here-docs sections during startup.
+You can always make lookup from menu or using \\[cperl-find-pods-heres].")
+
+\f
+
+;;; Short extra-docs.
+
+(defvar cperl-tips 'please-ignore-this-line
+  "Get newest version of this package from
+  ftp://ftp.math.ohio-state.edu/pub/users/ilya/lisp
+and/or
+  ftp://ftp.math.ohio-state.edu/pub/users/ilya/perl
+
+Get support packages font-lock-extra.el, imenu-go.el from the same place.
+\(Look for other files there too... ;-) Get a patch for imenu.el in 19.29.
+Note that for 19.30 you should use choose-color.el *instead* of 
+font-lock-extra.el (and you will not get smart highlighting in C :-().
+
+Note that to enable Compile choices in the menu you need to install
+compile-mode.el.
+
+Get perl5-info from 
+  http://www.metronet.com:70/9/perlinfo/perl5/manual/perl5-info.tar.gz
+\(may be quite obsolete, but still useful).
+
+If you use imenu-go, run imenu on perl5-info buffer (you can do it from
+CPerl menu).
+
+Before reporting (non-)problems look in the problem section on what I
+know about them.")
+
+(defvar cperl-problems 'please-ignore-this-line
+"Emacs has a _very_ restricted syntax parsing engine. 
+
+It may be corrected on the level of C ocde, please look in the
+`non-problems' section if you want to volonteer.
+
+CPerl mode tries to corrects some Emacs misunderstandings, however,
+for effeciency reasons the degree of correction is different for
+different operations. The partially corrected problems are: POD
+sections, here-documents, regexps. The operations are: highlighting,
+indentation, electric keywords, electric braces. 
+
+This may be confusing, since the regexp s#//#/#\; may be highlighted
+as a comment, but it will recognized as a regexp by the indentation
+code. Or the opposite case, when a pod section is highlighted, but
+breaks the indentation of the following code.
+
+The main trick (to make $ a \"backslash\") makes constructions like
+${aaa} look like unbalanced braces. The only trick I can think out is
+to insert it as $ {aaa} (legal in perl5, not in perl4). 
+
+Similar problems arise in regexps, when /(\\s|$)/ should be rewritten
+as /($|\\s)/. Note that such a transpositinon is not always possible
+:-(.  " )
+
+(defvar cperl-non-problems 'please-ignore-this-line
+"As you know from `problems' section, Perl syntax too hard for CPerl.
+
+Most the time, if you write your own code, you may find an equivalent
+\(and almost as readable) expression.
+
+Try to help it: add comments with embedded quotes to fix CPerl
+misunderstandings about the end of quotation:
+
+$a='500$';      # ';
+
+You won't need it too often. The reason: $ \"quotes\" the following
+character (this saves a life a lot of times in CPerl), thus due to
+Emacs parsing rules it does not consider tick after the dollar as a
+closing one, but as a usual character.
+
+Now the indentation code is pretty wise. The only drawback is that it
+relies on Emacs parsing to find matching parentheses. And Emacs
+*cannot* match parentheses in Perl 100% correctly. So
+       1 if s#//#/#;
+will not break indentation, but
+       1 if ( s#//#/# );
+will.
+
+If you still get wrong indentation in situation that you think the
+code should be able to parse, try:
+
+a) Check what Emacs thinks about balance of your parentheses.
+b) Supply the code to me (IZ).
+
+Pods are treated _very_ rudimentally. Here-documents are not treated
+at all (except highlighting and inhibiting indentation). (This may
+change some time. RMS approved making syntax lookup recognize text
+attributes, but volonteers are needed to change Emacs C code.)
+
+To speed up coloring the following compromises exist:
+   a) sub in $mypackage::sub may be highlighted.
+   b) -z in [a-z] may be highlighted.
+   c) if your regexp contains a keyword (like \"s\"), it may be highlighted.
+")
+
 \f
 
 ;;; Portability stuff:
@@ -464,6 +579,7 @@ Can be overwritten by `cperl-hairy' if nil.")
              (cperl-etags nil 'recursive) t]
             ["Add tags for Perl files in (sub)directories"
              (cperl-etags t 'recursive) t])
+           ["Recalculate PODs" cperl-find-pods-heres t]
            ["Define word at point" imenu-go-find-at-position 
             (fboundp 'imenu-go-find-at-position)]
            ["Help on function" cperl-info-on-command t]
@@ -473,7 +589,11 @@ Can be overwritten by `cperl-hairy' if nil.")
            ["C++" (cperl-set-style "C++") t]
            ["FSF" (cperl-set-style "FSF") t]
            ["BSD" (cperl-set-style "BSD") t]
-           ["Whitesmith" (cperl-set-style "Whitesmith") t]))))
+           ["Whitesmith" (cperl-set-style "Whitesmith") t])
+          ("Micro-docs"
+           ["Tips" (describe-variable 'cperl-tips) t]
+           ["Problems" (describe-variable 'cperl-problems) t]
+           ["Non-problems" (describe-variable 'cperl-non-problems) t]))))
   (error nil))
 
 (autoload 'c-macro-expand "cmacexp"
@@ -585,6 +705,11 @@ These keys run commands `cperl-info-on-current-command' and
 `cperl-info-on-command', which one is which is controlled by variable
 `cperl-info-on-command-no-prompt' (in turn affected by `cperl-hairy').
 
+Variables `cperl-pod-here-scan', `cperl-pod-here-fontify',
+`cperl-pod-face', `cperl-pod-head-face' control processing of pod and
+here-docs sections. In a future version results of scan may be used
+for indentation too, currently they are used for highlighting only.
+
 Variables controlling indentation style:
  `cperl-tab-always-indent'
     Non-nil means TAB in CPerl mode should always reindent the current line,
@@ -695,8 +820,17 @@ with no args."
   (make-local-variable 'imenu-create-index-function)
   (setq imenu-create-index-function
        (function imenu-example--create-perl-index))
+  (make-local-variable 'imenu-sort-function)
+  (setq imenu-sort-function nil)
   (make-local-variable 'vc-header-alist)
   (setq vc-header-alist cperl-vc-header-alist)
+  (make-local-variable 'font-lock-defaults)
+  (setq        font-lock-defaults
+       (if (string< emacs-version "19.30")
+           '(perl-font-lock-keywords-2)
+         '((perl-font-lock-keywords
+            perl-font-lock-keywords-1
+            perl-font-lock-keywords-2))))
   (or (fboundp 'cperl-old-auto-fill-mode)
       (progn
        (fset 'cperl-old-auto-fill-mode (symbol-function 'auto-fill-mode))
@@ -706,11 +840,15 @@ with no args."
          (and auto-fill-function (eq major-mode 'perl-mode)
               (setq auto-fill-function 'cperl-do-auto-fill)))))
   (if (cperl-enable-font-lock)
-      (if (cperl-val 'cperl-font-lock) (font-lock-mode 1)))
+      (if (cperl-val 'cperl-font-lock) 
+         (progn (or cperl-faces-init (cperl-init-faces))
+                (font-lock-mode 1))))
   (and (boundp 'msb-menu-cond)
        (not cperl-msb-fixed)
        (cperl-msb-fix))
-  (run-hooks 'cperl-mode-hook))
+  (run-hooks 'cperl-mode-hook)
+  ;; After hooks since fontification will break this
+  (if cperl-pod-here-scan (cperl-find-pods-heres)))
 \f
 ;; Fix for msb.el
 (defvar cperl-msb-fixed nil)
@@ -826,7 +964,7 @@ place (even in empty line), but not after."
           (skip-chars-backward "$")
           (looking-at "\\(\\$\\$\\)*\\$\\([^\\$]\\|$\\)"))
         (insert ? ))
-    (if (cperl-after-expr) nil (setq cperl-auto-newline nil))
+    (if (cperl-after-expr-p) nil (setq cperl-auto-newline nil))
     (cperl-electric-brace arg)
     (and (eq last-command-char ?{)
         (memq last-command-char 
@@ -844,7 +982,7 @@ place (even in empty line), but not after."
             (>= (save-excursion (cperl-to-comment-or-eol) (point)) (point))
             ;;(not (save-excursion (search-backward "#" beg t)))
             (if (eq last-command-char ?<)
-                (cperl-after-expr nil "{};(,:=")
+                (cperl-after-expr-p nil "{};(,:=")
               1))
        (progn
          (insert last-command-char)
@@ -861,7 +999,7 @@ place (even in empty line), but not after."
   (let ((beg (save-excursion (beginning-of-line) (point))))
     (and (save-excursion
           (backward-sexp 1)
-          (cperl-after-expr nil "{};:"))
+          (cperl-after-expr-p nil "{};:"))
         (save-excursion 
           (not 
            (re-search-backward
@@ -893,7 +1031,7 @@ place (even in empty line), but not after."
   (let ((beg (save-excursion (beginning-of-line) (point))))
     (and (save-excursion
           (backward-sexp 1)
-          (cperl-after-expr nil "{};:"))
+          (cperl-after-expr-p nil "{};:"))
         (save-excursion 
           (not 
            (re-search-backward
@@ -1008,22 +1146,23 @@ place (even in empty line), but not after."
             (not (save-excursion
                    (beginning-of-line)
                    (skip-chars-forward " \t")
-                   (or (= (following-char) ?#)
-                       ;; Colon is special only after a label, or case ....
-                       ;; So quickly rule out most other uses of colon
-                       ;; and do no indentation for them.
-                       (and (eq last-command-char ?:)
-                            (not (looking-at "case[ \t]"))
-                            (save-excursion
-                              (forward-word 1)
-                              (skip-chars-forward " \t")
-                              (and (< (point) end)
-                                  (progn (goto-char (- end 1))
-                                         (not (looking-at ":"))))))
-                       (progn
-                         (beginning-of-defun)
-                         (let ((pps (parse-partial-sexp (point) end)))
-                           (or (nth 3 pps) (nth 4 pps) (nth 5 pps))))))))
+                   (or
+                    ;; Ignore in comment lines
+                    (= (following-char) ?#)
+                    ;; Colon is special only after a label
+                    ;; So quickly rule out most other uses of colon
+                    ;; and do no indentation for them.
+                    (and (eq last-command-char ?:)
+                         (save-excursion
+                           (forward-word 1)
+                           (skip-chars-forward " \t")
+                           (and (< (point) end)
+                                (progn (goto-char (- end 1))
+                                       (not (looking-at ":"))))))
+                    (progn
+                      (beginning-of-defun)
+                      (let ((pps (parse-partial-sexp (point) end)))
+                        (or (nth 3 pps) (nth 4 pps) (nth 5 pps))))))))
        (progn
          (if cperl-auto-newline
              (setq insertpos (point)))
@@ -1112,11 +1251,6 @@ Return the amount the indentation changed by."
                  (and (> indent 0)
                       (setq indent (max cperl-min-label-indent
                                         (+ indent cperl-label-offset)))))
-                ;;((and (looking-at "els\\(e\\|if\\)\\b")
-                ;;      (not (looking-at "else\\s_")))
-                ;; (setq indent (save-excursion
-                ;;              (cperl-backward-to-start-of-if)
-                ;;              (current-indentation))))
                 ((= (following-char) ?})
                  (setq indent (- indent cperl-indent-level)))
                 ((memq (following-char) '(?\) ?\])) ; To line up with opening paren.
@@ -1136,7 +1270,7 @@ Return the amount the indentation changed by."
          (goto-char (- (point-max) pos))))
     shift-amt))
 
-(defsubst cperl-after-label ()
+(defun cperl-after-label ()
   ;; Returns true if the point is after label. Does not do save-excursion.
   (and (eq (preceding-char) ?:)
        (memq (char-syntax (char-after (- (point) 2)))
@@ -1145,210 +1279,257 @@ Return the amount the indentation changed by."
         (backward-sexp)
         (looking-at "[a-zA-Z_][a-zA-Z0-9_]*:"))))
 
-(defun cperl-calculate-indent (&optional parse-start symbol)
-  "Return appropriate indentation for current line as Perl code.
-In usual case returns an integer: the column to indent to.
-Returns nil if line starts inside a string, t if in a comment."
+(defun cperl-get-state (&optional parse-start start-state)
+  ;; returns list (START STATE DEPTH PRESTART), START is a good place
+  ;; to start parsing, STATE is what is returned by
+  ;; `parse-partial-sexp'. DEPTH is true is we are immediately after
+  ;; end of block which contains START. PRESTART is the position
+  ;; basing on which START was found.
   (save-excursion
-    (beginning-of-line)
-    (let ((indent-point (point))
-         (case-fold-search nil)
-         (char-after (save-excursion
-                       (skip-chars-forward " \t")
-                       (following-char)))
-         state start-indent start start-state moved
-         containing-sexp old-containing-sexp old-indent)
-      (or parse-start (null symbol)
-         (setq parse-start (symbol-value symbol) 
-               start-state (cadr parse-start)
-               start-indent (nth 2 parse-start) 
-               parse-start (car parse-start)
-               old-containing-sexp (nth 1 start-state)))
+    (let ((start-point (point)) depth state start prestart)
       (if parse-start
          (goto-char parse-start)
        (beginning-of-defun))
+      (setq prestart (point))
       (if start-state nil
-       ;; Try to go out
-       (while (< (point) indent-point)
-         (setq start (point) parse-start start moved nil
-               state (parse-partial-sexp start indent-point -1))
+       ;; Try to go out, if sub is not on the outermost level
+       (while (< (point) start-point)
+         (setq start (point) parse-start start depth nil
+               state (parse-partial-sexp start start-point -1))
          (if (> (car state) -1) nil
            ;; The current line could start like }}}, so the indentation
            ;; corresponds to a different level than what we reached
-           (setq moved t)
+           (setq depth t)
            (beginning-of-line 2)))     ; Go to the next line.
-       (if start                       ; Not at the start of file
-           (progn
-             (goto-char start)
-             (setq start-indent (current-indentation))
-             (if moved                 ; Should correct...
-                 (setq start-indent (- start-indent cperl-indent-level))))
-         (setq start-indent 0)))
-      (if (< (point) indent-point) (setq parse-start (point)))
-      (or state (setq state (parse-partial-sexp 
-                            (point) indent-point -1 nil start-state)))
-      (setq containing-sexp 
-           (or (car (cdr state)) 
-               (and (>= (nth 6 state) 0) old-containing-sexp))
-           old-containing-sexp nil start-state nil)
-;;      (while (< (point) indent-point)
-;;     (setq parse-start (point))
-;;     (setq state (parse-partial-sexp (point) indent-point -1 nil start-state))
-;;     (setq containing-sexp 
-;;           (or (car (cdr state)) 
-;;               (and (>= (nth 6 state) 0) old-containing-sexp))
-;;           old-containing-sexp nil start-state nil))
-      (if symbol (set symbol (list indent-point state start-indent)))
-      (goto-char indent-point)
-      (cond ((or (nth 3 state) (nth 4 state))
-            ;; return nil or t if should not change this line
-            (nth 4 state))
-           ((null containing-sexp)
-            ;; Line is at top level.  May be data or function definition,
-            ;; or may be function argument declaration.
-            ;; Indent like the previous top level line
-            ;; unless that ends in a closeparen without semicolon,
-            ;; in which case this line is the first argument decl.
-            (skip-chars-forward " \t")
-            (+ start-indent
-               (if (= (following-char) ?{) cperl-continued-brace-offset 0)
-               (progn
-                 (cperl-backward-to-noncomment (or parse-start (point-min)))
-                 (skip-chars-backward " \t\f\n")
-                 ;; Look at previous line that's at column 0
-                 ;; to determine whether we are in top-level decls
-                 ;; or function's arg decls.  Set basic-indent accordingly.
-                 ;; Now add a little if this is a continuation line.
-                 (if (or (bobp)
-                         (memq (preceding-char) (append ");}" nil))
-                         (memq char-after (append ")]}" nil))) 
-                     0
-                   cperl-continued-statement-offset))))
-           ((/= (char-after containing-sexp) ?{)
-            ;; line is expression, not statement:
-            ;; indent to just after the surrounding open.
-            (goto-char (1+ containing-sexp))
-            (current-column))
-           ((progn
-             ;; Containing-expr starts with \{. Check whether it is a hash.
-             (goto-char containing-sexp)
-             (cperl-backward-to-noncomment (or parse-start (point-min)))
-             (skip-chars-backward " \t\n\f")
-             (not 
-              (or (memq (preceding-char) (append ";)}$@&%" nil)) ; Or label!
+       (if start (goto-char start)))   ; Not at the start of file
+      (setq start (point))
+      (if (< start start-point) (setq parse-start start))
+      (or state (setq state (parse-partial-sexp start start-point -1 nil start-state)))
+      (list start state depth prestart))))
+
+(defun cperl-block-p ()                        ; Do not C-M-q ! One string contains ";" !
+  ;; Positions is before ?\{. Checks whether it starts a block.
+  ;; No save-excursion!
+  (cperl-backward-to-noncomment (point-min))
+  ;;(skip-chars-backward " \t\n\f")
+  (or (memq (preceding-char) (append ";){}$@&%\C-@" nil)) ; Or label! \C-@ at bobp
                                        ; Label may be mixed up with `$blah :'
-                  (save-excursion (cperl-after-label))
-                  (and (eq (char-syntax (preceding-char)) ?w)
-                   (progn
-                    (backward-sexp)
-                    (or (looking-at "\\sw+[ \t\n\f]*{") ; Method call syntax
-                        (progn
-                          (skip-chars-backward " \t\n\f")
-                          (and (eq (char-syntax (preceding-char)) ?w)
-                               (progn
-                                 (backward-sexp)
-                                 (looking-at 
-                                  "sub[ \t]+\\sw+[ \t\n\f]*{"))))))))))
-            (goto-char containing-sexp)
-            (+ (current-column) 1      ; Correct indentation of trailing ?\}
-               (if (eq char-after ?\}) (+ cperl-indent-level
-                                          cperl-close-paren-offset) 
-                 0)))
-           (t
-            ;; Statement level.  Is it a continuation or a new statement?
-            ;; Find previous non-comment character.
-            (goto-char indent-point)
-            (cperl-backward-to-noncomment containing-sexp)
-            ;; Back up over label lines, since they don't
-            ;; affect whether our line is a continuation.
-            (while (or (eq (preceding-char) ?\,)
-                       (and (eq (preceding-char) ?:)
-                            (or ;;(eq (char-after (- (point) 2)) ?\') ; ????
-                                (memq (char-syntax (char-after (- (point) 2)))
-                                      '(?w ?_)))))
-              (if (eq (preceding-char) ?\,)
-                  (cperl-backward-to-start-of-continued-exp containing-sexp))
-              (beginning-of-line)
-              (cperl-backward-to-noncomment containing-sexp))
-            ;; Now we get the answer.
-            (if (not (memq (preceding-char) (append ",;}{" '(nil)))) ; Was ?\,
-                ;; This line is continuation of preceding line's statement;
-                ;; indent  `cperl-continued-statement-offset'  more than the
-                ;; previous line of the statement.
+      (save-excursion (cperl-after-label))
+      (and (eq (char-syntax (preceding-char)) ?w)
+          (progn
+            (backward-sexp)
+            (or (looking-at "\\sw+[ \t\n\f]*[{#]") ; Method call syntax
                 (progn
-                  (cperl-backward-to-start-of-continued-exp containing-sexp)
-                  (+ (if (memq char-after (append "}])" nil))
-                         0 ; Closing parenth
-                         cperl-continued-statement-offset)
-                     (current-column)
-                     (if (eq char-after ?\{)
-                         cperl-continued-brace-offset 0)))
-              ;; This line starts a new statement.
-              ;; Position following last unclosed open.
-              (goto-char containing-sexp)
-              ;; Is line first statement after an open-brace?
-              (or
-               ;; If no, find that first statement and indent like
-               ;; it.  If the first statement begins with label, do
-               ;; not belive when the indentation of the label is too
-               ;; small.
-               (save-excursion
-                 (forward-char 1)
-                 (setq old-indent (current-indentation))
-                 (let ((colon-line-end 0))
-                   (while (progn (skip-chars-forward " \t\n")
-                                 (looking-at "#\\|[a-zA-Z0-9_$]*:[^:]"))
-                     ;; Skip over comments and labels following openbrace.
-                     (cond ((= (following-char) ?\#)
-                            (forward-line 1))
-                           ;; label:
-                           (t
-                            (save-excursion (end-of-line)
-                                            (setq colon-line-end (point)))
-                            (search-forward ":"))))
-                   ;; The first following code counts
-                   ;; if it is before the line we want to indent.
-                   (and (< (point) indent-point)
-                        (if (> colon-line-end (point)) ; After label
-                            (if (> (current-indentation) 
-                                   cperl-min-label-indent)
-                                (- (current-indentation) cperl-label-offset)
-                              ;; Do not belive: `max' is involved
-                              (+ old-indent cperl-indent-level))
-                          (current-column)))))
-               ;; If no previous statement,
-               ;; indent it relative to line brace is on.
-               ;; For open brace in column zero, don't let statement
-               ;; start there too.  If cperl-indent-level is zero,
-               ;; use cperl-brace-offset + cperl-continued-statement-offset instead.
-               ;; For open-braces not the first thing in a line,
-               ;; add in cperl-brace-imaginary-offset.
+                  (skip-chars-backward " \t\n\f")
+                  (and (eq (char-syntax (preceding-char)) ?w)
+                       (progn
+                         (backward-sexp)
+                         (looking-at 
+                          "sub[ \t]+\\sw+[ \t\n\f]*[#{]")))))))))
 
-               ;; If first thing on a line:  ?????
-               (+ (if (and (bolp) (zerop cperl-indent-level))
-                      (+ cperl-brace-offset cperl-continued-statement-offset)
-                    cperl-indent-level)
-                  ;; Move back over whitespace before the openbrace.
-                  ;; If openbrace is not first nonwhite thing on the line,
-                  ;; add the cperl-brace-imaginary-offset.
-                  (progn (skip-chars-backward " \t")
-                         (if (bolp) 0 cperl-brace-imaginary-offset))
-                  ;; If the openbrace is preceded by a parenthesized exp,
-                  ;; move to the beginning of that;
-                  ;; possibly a different line
+(defun cperl-calculate-indent (&optional parse-start symbol)
+  "Return appropriate indentation for current line as Perl code.
+In usual case returns an integer: the column to indent to.
+Returns nil if line starts inside a string, t if in a comment."
+  (save-excursion
+    (if (memq (get-text-property (point) 'syntax-type) '(pod here-doc)) nil
+      (beginning-of-line)
+      (let* ((indent-point (point))
+            (case-fold-search nil)
+            (s-s (cperl-get-state))
+            (start (nth 0 s-s))
+            (state (nth 1 s-s))
+            (containing-sexp (car (cdr state)))
+            (char-after (save-excursion
+                          (skip-chars-forward " \t")
+                          (following-char)))
+            (start-indent (save-excursion
+                            (goto-char start)
+                            (- (current-indentation)
+                               (if (nth 2 s-s) cperl-indent-level 0))))
+            old-indent)
+       ;;      (or parse-start (null symbol)
+       ;;        (setq parse-start (symbol-value symbol) 
+       ;;              start-indent (nth 2 parse-start) 
+       ;;              parse-start (car parse-start)))
+       ;;      (if parse-start
+       ;;        (goto-char parse-start)
+       ;;      (beginning-of-defun))
+       ;;      ;; Try to go out
+       ;;      (while (< (point) indent-point)
+       ;;      (setq start (point) parse-start start moved nil
+       ;;            state (parse-partial-sexp start indent-point -1))
+       ;;      (if (> (car state) -1) nil
+       ;;        ;; The current line could start like }}}, so the indentation
+       ;;        ;; corresponds to a different level than what we reached
+       ;;        (setq moved t)
+       ;;        (beginning-of-line 2)))       ; Go to the next line.
+       ;;      (if start                               ; Not at the start of file
+       ;;        (progn
+       ;;          (goto-char start)
+       ;;          (setq start-indent (current-indentation))
+       ;;          (if moved                   ; Should correct...
+       ;;              (setq start-indent (- start-indent cperl-indent-level))))
+       ;;      (setq start-indent 0))
+       ;;      (if (< (point) indent-point) (setq parse-start (point)))
+       ;;      (or state (setq state (parse-partial-sexp 
+       ;;                           (point) indent-point -1 nil start-state)))
+       ;;      (setq containing-sexp 
+       ;;          (or (car (cdr state)) 
+       ;;              (and (>= (nth 6 state) 0) old-containing-sexp))
+       ;;          old-containing-sexp nil start-state nil)
+;;;;      (while (< (point) indent-point)
+;;;;   (setq parse-start (point))
+;;;;   (setq state (parse-partial-sexp (point) indent-point -1 nil start-state))
+;;;;   (setq containing-sexp 
+;;;;         (or (car (cdr state)) 
+;;;;             (and (>= (nth 6 state) 0) old-containing-sexp))
+;;;;         old-containing-sexp nil start-state nil))
+       ;;      (if symbol (set symbol (list indent-point state start-indent)))
+       ;;      (goto-char indent-point)
+       (cond ((or (nth 3 state) (nth 4 state))
+              ;; return nil or t if should not change this line
+              (nth 4 state))
+             ((null containing-sexp)
+              ;; Line is at top level.  May be data or function definition,
+              ;; or may be function argument declaration.
+              ;; Indent like the previous top level line
+              ;; unless that ends in a closeparen without semicolon,
+              ;; in which case this line is the first argument decl.
+              (skip-chars-forward " \t")
+              (+ start-indent
+                 (if (= (following-char) ?{) cperl-continued-brace-offset 0)
+                 (progn
+                   (cperl-backward-to-noncomment (or parse-start (point-min)))
+                   ;;(skip-chars-backward " \t\f\n")
+                   ;; Look at previous line that's at column 0
+                   ;; to determine whether we are in top-level decls
+                   ;; or function's arg decls.  Set basic-indent accordingly.
+                   ;; Now add a little if this is a continuation line.
+                   (if (or (bobp)
+                           (memq (preceding-char) (append " ;}" nil)) ; Was ?\)
+                           (memq char-after (append ")]}" nil))) 
+                       0
+                     cperl-continued-statement-offset))))
+             ((/= (char-after containing-sexp) ?{)
+              ;; line is expression, not statement:
+              ;; indent to just after the surrounding open,
+              ;; skip blanks if we do not close the expression.
+              (goto-char (1+ containing-sexp))
+              (or (memq char-after (append ")]}" nil))
+                  (looking-at "[ \t]*\\(#\\|$\\)")
+                  (skip-chars-forward " \t"))
+              (current-column))
+             ((progn
+                ;; Containing-expr starts with \{. Check whether it is a hash.
+                (goto-char containing-sexp)
+                (not (cperl-block-p)))
+              (goto-char (1+ containing-sexp))
+              (or (eq char-after ?\})
+                  (looking-at "[ \t]*\\(#\\|$\\)")
+                  (skip-chars-forward " \t"))
+              (+ (current-column)      ; Correct indentation of trailing ?\}
+                 (if (eq char-after ?\}) (+ cperl-indent-level
+                                            cperl-close-paren-offset) 
+                   0)))
+             (t
+              ;; Statement level.  Is it a continuation or a new statement?
+              ;; Find previous non-comment character.
+              (goto-char indent-point)
+              (cperl-backward-to-noncomment containing-sexp)
+              ;; Back up over label lines, since they don't
+              ;; affect whether our line is a continuation.
+              (while (or (eq (preceding-char) ?\,)
+                         (and (eq (preceding-char) ?:)
+                              (or;;(eq (char-after (- (point) 2)) ?\') ; ????
+                               (memq (char-syntax (char-after (- (point) 2)))
+                                     '(?w ?_)))))
+                (if (eq (preceding-char) ?\,)
+                    ;; Will go to beginning of line, essentially.
+                    ;; Will ignore embedded sexpr XXXX.
+                    (cperl-backward-to-start-of-continued-exp containing-sexp))
+                (beginning-of-line)
+                (cperl-backward-to-noncomment containing-sexp))
+              ;; Now we get the answer.
+              (if (not (memq (preceding-char) (append ", ;}{" '(nil)))) ; Was ?\,
+                  ;; This line is continuation of preceding line's statement;
+                  ;; indent  `cperl-continued-statement-offset'  more than the
+                  ;; previous line of the statement.
                   (progn
-                    (if (eq (preceding-char) ?\))
-                        (forward-sexp -1))
-                    ;; Get initial indentation of the line we are on.
-                    ;; If line starts with label, calculate label indentation
-                    (if (save-excursion
-                          (beginning-of-line)
-                          (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_]*:[^:]"))
-                        (if (> (current-indentation) cperl-min-label-indent)
-                            (- (current-indentation) cperl-label-offset)
-                          (cperl-calculate-indent 
-                           (if (<= parse-start (point)) parse-start)))
-                      (current-indentation)))))))))))
+                    (cperl-backward-to-start-of-continued-exp containing-sexp)
+                    (+ (if (memq char-after (append "}])" nil))
+                           0           ; Closing parenth
+                         cperl-continued-statement-offset)
+                       (current-column)
+                       (if (eq char-after ?\{)
+                           cperl-continued-brace-offset 0)))
+                ;; This line starts a new statement.
+                ;; Position following last unclosed open.
+                (goto-char containing-sexp)
+                ;; Is line first statement after an open-brace?
+                (or
+                 ;; If no, find that first statement and indent like
+                 ;; it.  If the first statement begins with label, do
+                 ;; not belive when the indentation of the label is too
+                 ;; small.
+                 (save-excursion
+                   (forward-char 1)
+                   (setq old-indent (current-indentation))
+                   (let ((colon-line-end 0))
+                     (while (progn (skip-chars-forward " \t\n")
+                                   (looking-at "#\\|[a-zA-Z0-9_$]*:[^:]"))
+                       ;; Skip over comments and labels following openbrace.
+                       (cond ((= (following-char) ?\#)
+                              (forward-line 1))
+                             ;; label:
+                             (t
+                              (save-excursion (end-of-line)
+                                              (setq colon-line-end (point)))
+                              (search-forward ":"))))
+                     ;; The first following code counts
+                     ;; if it is before the line we want to indent.
+                     (and (< (point) indent-point)
+                          (if (> colon-line-end (point)) ; After label
+                              (if (> (current-indentation) 
+                                     cperl-min-label-indent)
+                                  (- (current-indentation) cperl-label-offset)
+                                ;; Do not belive: `max' is involved
+                                (+ old-indent cperl-indent-level))
+                            (current-column)))))
+                 ;; If no previous statement,
+                 ;; indent it relative to line brace is on.
+                 ;; For open brace in column zero, don't let statement
+                 ;; start there too.  If cperl-indent-level is zero,
+                 ;; use cperl-brace-offset + cperl-continued-statement-offset instead.
+                 ;; For open-braces not the first thing in a line,
+                 ;; add in cperl-brace-imaginary-offset.
+
+                 ;; If first thing on a line:  ?????
+                 (+ (if (and (bolp) (zerop cperl-indent-level))
+                        (+ cperl-brace-offset cperl-continued-statement-offset)
+                      cperl-indent-level)
+                    ;; Move back over whitespace before the openbrace.
+                    ;; If openbrace is not first nonwhite thing on the line,
+                    ;; add the cperl-brace-imaginary-offset.
+                    (progn (skip-chars-backward " \t")
+                           (if (bolp) 0 cperl-brace-imaginary-offset))
+                    ;; If the openbrace is preceded by a parenthesized exp,
+                    ;; move to the beginning of that;
+                    ;; possibly a different line
+                    (progn
+                      (if (eq (preceding-char) ?\))
+                          (forward-sexp -1))
+                      ;; Get initial indentation of the line we are on.
+                      ;; If line starts with label, calculate label indentation
+                      (if (save-excursion
+                            (beginning-of-line)
+                            (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_]*:[^:]"))
+                          (if (> (current-indentation) cperl-min-label-indent)
+                              (- (current-indentation) cperl-label-offset)
+                            (cperl-calculate-indent 
+                             (if (and parse-start (<= parse-start (point)))
+                                 parse-start)))
+                        (current-indentation))))))))))))
 
 (defvar cperl-indent-alist
   '((string nil)
@@ -1364,96 +1545,79 @@ The values mean:
 
 (defun cperl-where-am-i (&optional parse-start start-state)
   ;; Unfinished
-  "Return a list (TYPE POS) of the start of enclosing construction.
+  "Return a list of lists ((TYPE POS)...) of good points before the point.
 POS may be nil if it is hard to find, say, when TYPE is `string' or `comment'."
   (save-excursion
-    (let ((start-point (point))
-         (case-fold-search nil)
-         state start-indent start moved
-         containing-sexp old-containing-sexp old-indent)
-      (if parse-start
-         (goto-char parse-start)
-       (beginning-of-defun))
-      (if start-state nil
-       ;; Try to go out, if sub is not on the outermost level
-       (while (< (point) start-point)
-         (setq start (point) parse-start start moved nil
-               state (parse-partial-sexp start start-point -1))
-         (if (> (car state) -1) nil
-           ;; The current line could start like }}}, so the indentation
-           ;; corresponds to a different level than what we reached
-           (setq moved t)
-           (beginning-of-line 2)))     ; Go to the next line.
-       (if start (goto-char start)))   ; Not at the start of file
-      (skip-chars-forward " \t")
-      (setq start (point))
-      (if (< (point) start-point) (setq parse-start (point)))
-      (or state (setq state (parse-partial-sexp 
-                            (point) start-point -1 nil start-state)))
-      (setq containing-sexp 
-           (or (car (cdr state)) 
-               (and (>= (nth 6 state) 0) old-containing-sexp))
-           old-containing-sexp nil start-state nil)
-;;      (while (< (point) start-point)
-;;     (setq parse-start (point))
-;;     (setq state (parse-partial-sexp (point) start-point -1 nil start-state))
-;;     (setq containing-sexp 
-;;           (or (car (cdr state)) 
-;;               (and (>= (nth 6 state) 0) old-containing-sexp))
-;;           old-containing-sexp nil start-state nil))
-      (goto-char start-point)
+    (let* ((start-point (point))
+          (s-s (cperl-get-state))
+          (start (nth 0 s-s))
+          (state (nth 1 s-s))
+          (prestart (nth 3 s-s))
+          (containing-sexp (car (cdr state)))
+          (case-fold-search nil)
+          (res (list (list 'parse-start start) (list 'parse-prestart prestart))))
       (cond ((nth 3 state)             ; In string
-            (list 'string nil (nth 3 state))) ; What started string
+            (setq res (cons (list 'string nil (nth 3 state)) res))) ; What started string
            ((nth 4 state)              ; In comment
-            '(comment))
+            (setq res (cons '(comment) res)))
            ((null containing-sexp)
             ;; Line is at top level.  
             ;; Indent like the previous top level line
             ;; unless that ends in a closeparen without semicolon,
             ;; in which case this line is the first argument decl.
             (cperl-backward-to-noncomment (or parse-start (point-min)))
-            (skip-chars-backward " \t\f\n") ; Why???
+            ;;(skip-chars-backward " \t\f\n")
             (cond
              ((or (bobp)
                   (memq (preceding-char) (append ";}" nil)))
-              (list 'toplevel start))
+              (setq res (cons (list 'toplevel start) res)))
              ((eq (preceding-char) ?\) )
-              (list 'toplevel-after-parenth start))
-             (t (list 'toplevel-continued start))))
+              (setq res (cons (list 'toplevel-after-parenth start) res)))
+             (t 
+              (setq res (cons (list 'toplevel-continued start) res)))))
            ((/= (char-after containing-sexp) ?{)
             ;; line is expression, not statement:
             ;; indent to just after the surrounding open.
-            (list 'expression containing-sexp))
+            ;; skip blanks if we do not close the expression.
+            (setq res (cons (list 'expression-blanks
+                                  (progn
+                                    (goto-char (1+ containing-sexp))
+                                    (or (looking-at "[ \t]*\\(#\\|$\\)")
+                                        (skip-chars-forward " \t"))
+                                    (point)))
+                            (cons (list 'expression containing-sexp) res))))
            ((progn
              ;; Containing-expr starts with \{. Check whether it is a hash.
              (goto-char containing-sexp)
-             (cperl-backward-to-noncomment (or parse-start (point-min)))
-             (skip-chars-backward " \t\n\f")
-             (not 
-              (or (memq (preceding-char) (append ";)}$@&%" nil)) ; Or label!
-                                       ; Label may be mixed up with `$blah :'
-                  (save-excursion (cperl-after-label))
-                  (and (eq (char-syntax (preceding-char)) ?w)
-                   (progn
-                    (backward-sexp)
-                    (looking-at "\\sw+[ \t\n\f]*{")))))) ; Method call syntax
-            (list 'expression containing-sexp))
+             (not (cperl-block-p)))
+            (setq res (cons (list 'expression-blanks
+                                  (progn
+                                    (goto-char (1+ containing-sexp))
+                                    (or (looking-at "[ \t]*\\(#\\|$\\)")
+                                        (skip-chars-forward " \t"))
+                                    (point)))
+                            (cons (list 'expression containing-sexp) res))))
            (t
-            ;; Statement level.  Is it a continuation or a new statement?
+            ;; Statement level.
+            (setq res (cons (list 'in-block containing-sexp) res))
+            ;; Is it a continuation or a new statement?
             ;; Find previous non-comment character.
             (cperl-backward-to-noncomment containing-sexp)
             ;; Back up over label lines, since they don't
             ;; affect whether our line is a continuation.
+            ;; Back up comma-delimited lines too ?????
             (while (or (eq (preceding-char) ?\,)
-                       (cperl-after-label))
+                       (save-excursion (cperl-after-label)))
               (if (eq (preceding-char) ?\,)
+                  ;; Will go to beginning of line, essentially
+                    ;; Will ignore embedded sexpr XXXX.
                   (cperl-backward-to-start-of-continued-exp containing-sexp))
               (beginning-of-line)
               (cperl-backward-to-noncomment containing-sexp))
             ;; Now we get the answer.
             (if (not (memq (preceding-char) (append ";}{" '(nil)))) ; Was ?\,
                 ;; This line is continuation of preceding line's statement.
-                '(statement-continued containing-sexp)
+                (list (list 'statement-continued containing-sexp))
               ;; This line starts a new statement.
               ;; Position following last unclosed open.
               (goto-char containing-sexp)
@@ -1465,28 +1629,33 @@ POS may be nil if it is hard to find, say, when TYPE is `string' or `comment'."
                ;; small.
                (save-excursion
                  (forward-char 1)
-                 (setq old-indent (current-indentation))
                  (let ((colon-line-end 0))
-                   (while (progn (skip-chars-forward " \t\n")
-                                 (looking-at "#\\|[a-zA-Z0-9_$]*:[^:]"))
+                   (while (progn (skip-chars-forward " \t\n" start-point)
+                                 (and (< (point) start-point)
+                                      (looking-at
+                                       "#\\|[a-zA-Z_][a-zA-Z0-9_]*:[^:]")))
                      ;; Skip over comments and labels following openbrace.
                      (cond ((= (following-char) ?\#)
-                            (forward-line 1))
+                            ;;(forward-line 1)
+                            (end-of-line))
                            ;; label:
                            (t
                             (save-excursion (end-of-line)
                                             (setq colon-line-end (point)))
                             (search-forward ":"))))
-                   ;; The first following code counts
-                   ;; if it is before the line we want to indent.
+                   ;; Now at the point, after label, or at start 
+                   ;; of first statement in the block.
                    (and (< (point) start-point)
-                        (if (> colon-line-end (point)) ; After label
+                        (if (> colon-line-end (point)) 
+                            ;; Before statement after label
                             (if (> (current-indentation) 
                                    cperl-min-label-indent)
-                                (- (current-indentation) cperl-label-offset)
+                                (list (list 'label-in-block (point)))
                               ;; Do not belive: `max' is involved
-                              (+ old-indent cperl-indent-level))
-                          (current-column)))))
+                              (list
+                               (list 'label-in-block-min-indent (point))))
+                          ;; Before statement
+                          (list 'statement-in-block (point))))))
                ;; If no previous statement,
                ;; indent it relative to line brace is on.
                ;; For open brace in column zero, don't let statement
@@ -1518,8 +1687,10 @@ POS may be nil if it is hard to find, say, when TYPE is `string' or `comment'."
                         (if (> (current-indentation) cperl-min-label-indent)
                             (- (current-indentation) cperl-label-offset)
                           (cperl-calculate-indent 
-                           (if (<= parse-start (point)) parse-start)))
-                      (current-indentation)))))))))))
+                           (if (and parse-start (<= parse-start (point)))
+                               parse-start)))
+                      (current-indentation))))))))
+      res)))
 
 (defun cperl-calculate-indent-within-comment ()
   "Return the indentation amount for line, assuming that
@@ -1584,7 +1755,101 @@ Returns true if comment is found."
          )
        (nth 4 state))))
 
-(defun cperl-backward-to-noncomment (lim) 
+(defun cperl-find-pods-heres (&optional min max)
+  "Scans the buffer for POD sections and here-documents.
+If `cperl-pod-here-fontify' is not-nil after evaluation, will fontify 
+the sections using `cperl-pod-head-face', `cperl-pod-face', 
+`cperl-here-face'."
+  (interactive)
+  (or min (setq min (point-min)))
+  (or max (setq max (point-max)))
+  (let (face head-face here-face b e bb tag err
+            (cperl-pod-here-fontify (eval cperl-pod-here-fontify))
+            (case-fold-search nil) (inhibit-read-only t) (buffer-undo-list t)
+            (modified (buffer-modified-p)))
+    (unwind-protect
+       (progn
+         (save-excursion
+           (message "Scanning for pods and here-docs...")
+           (if cperl-pod-here-fontify
+               (setq face (eval cperl-pod-face) 
+                     head-face (eval cperl-pod-head-face)
+                     here-face (eval cperl-here-face)))
+           (remove-text-properties min max '(syntax-type t))
+           ;; Need to remove face as well...
+           (goto-char min)
+           (while (re-search-forward "^=" max t)
+             (if (looking-at "cut\\>")
+                 (progn
+                   (message "=cut is not preceeded by a pod section")
+                   (setq err (point)))
+               (beginning-of-line)
+               (setq b (point) bb b)
+               (re-search-forward "^=cut\\>" max 'toend)
+               (beginning-of-line 2)
+               (setq e (point))
+               (put-text-property b e 'in-pod t)
+               (goto-char b)
+               (while (re-search-forward "\n\n[ \t]" e t)
+                 (beginning-of-line)
+                 (put-text-property b (point) 'syntax-type 'pod)
+                 (put-text-property b (point) 'fontified t) ; Old lazy-lock
+                 (put-text-property b (point) 'lazy-lock t) ; New lazy-lock
+                 (if cperl-pod-here-fontify (put-text-property b (point) 'face face))
+                 (re-search-forward "\n\n[^ \t\f]" e 'toend)
+                 (beginning-of-line)
+                 (setq b (point)))
+               (put-text-property (point) e 'syntax-type 'pod)
+               (put-text-property (point) e 'fontified t)
+               (put-text-property (point) e 'lazy-lock t)
+               (if cperl-pod-here-fontify 
+                   (progn (put-text-property (point) e 'face face)
+                          (goto-char bb)
+                          (while (re-search-forward
+                                  ;; One paragraph
+                                  "^=[a-zA-Z0-9]+\\>[ \t]*\\(\\(\n?[^\n]\\)+\\)$"
+                                  e 'toend)
+                            (put-text-property 
+                             (match-beginning 1) (match-end 1)
+                             'face head-face))))
+               (goto-char e)))
+           (goto-char min)
+           (while (re-search-forward 
+                   "<<\\(\\([\"'`]\\)?\\)\\([a-zA-Z_][a-zA-Z_0-9]*\\)\\1"
+                   max t)
+             (setq tag (buffer-substring (match-beginning 3)
+                                         (match-end 3)))
+             (if cperl-pod-here-fontify 
+                 (put-text-property (match-beginning 3) (match-end 3) 
+                                    'face font-lock-reference-face))
+             (forward-line)
+             (setq b (point))
+             (and (re-search-forward (concat "^" tag "$") max 'toend)
+                  (progn
+                    (if cperl-pod-here-fontify 
+                        (progn
+                          (put-text-property (match-beginning 0) (match-end 0) 
+                                             'face font-lock-reference-face)
+                          (put-text-property (match-beginning 0) 
+                                             (1+ (match-end 0))
+                                             'lazy-lock t)
+                          (put-text-property (match-beginning 0) 
+                                             (1+ (match-end 0))
+                                             'fontified t)
+                          (put-text-property b (match-beginning 0) 
+                                             'face here-face)
+                          (put-text-property b (match-beginning 0) 
+                                             'lazy-lock t)))
+                    (put-text-property b (match-beginning 0) 
+                                       'syntax-type 'here-doc)))))
+         (if err (goto-char err)
+           (message "Scan for pods and here-docs completed.")))
+      (and (buffer-modified-p)
+          (not modified)
+          (set-buffer-modified-p nil)))))
+
+(defun cperl-backward-to-noncomment (lim)
+  ;; Stops at lim or after non-whitespace that is not in comment
   (let (stop p)
     (while (and (not stop) (> (point) (or lim 1)))
       (skip-chars-backward " \t\n\f" lim)
@@ -1597,7 +1862,7 @@ Returns true if comment is found."
        (if (< p (point)) (goto-char p))
        (setq stop t)))))
 
-(defun cperl-after-expr (&optional lim chars test)
+(defun cperl-after-expr-p (&optional lim chars test)
   "Returns true if the position is good for start of expression.
 TEST is the expression to evaluate at the found position. If absent,
 CHARS is a string that contains good characters to have before us."
@@ -1620,29 +1885,13 @@ CHARS is a string that contains good characters to have before us."
              (memq (following-char) (append (or chars "{};") nil))))))))
 
 (defun cperl-backward-to-start-of-continued-exp (lim)
-  (if (memq (preceding-char) (append ")]}" nil))
+  (if (memq (preceding-char) (append ")]}\"'`" nil))
       (forward-sexp -1))
   (beginning-of-line)
   (if (<= (point) lim)
       (goto-char (1+ lim)))
   (skip-chars-forward " \t"))
 
-(defun cperl-backward-to-start-of-if (&optional limit)
-  "Move to the start of the last ``unbalanced'' if."
-  (or limit (setq limit (save-excursion (beginning-of-defun) (point))))
-  (let ((if-level 1)
-       (case-fold-search nil))
-    (while (not (zerop if-level))
-      (backward-sexp 1)
-      (cond ((looking-at "else\\b")
-            (setq if-level (1+ if-level)))
-           ((looking-at "if\\b")
-            (setq if-level (1- if-level)))
-           ((<= (point) limit)
-            (setq if-level 0)
-            (goto-char limit))))))
-
-
 \f
 (defvar innerloop-done nil)
 (defvar last-depth nil)
@@ -1725,7 +1974,7 @@ inclusive."
     (and
      (not (memq (get-text-property (point) 'face)
                '(font-lock-string-face font-lock-comment-face)))
-     (cperl-after-expr nil nil '
+     (cperl-after-expr-p nil nil '
                       (or (looking-at "[^]a-zA-Z0-9_)}]")
                           (eq (get-text-property (point) 'face)
                               'font-lock-keyword-face))))))
@@ -1783,15 +2032,15 @@ indentation and initial hashes. Behaves usually outside of comment."
         (if start (progn (beginning-of-line) (point))
           (save-excursion
             (while (and (zerop (forward-line -1))
-                        (looking-at "^[ \t]*#+[ \t]*[^ \t\n]")))
+                        (looking-at "^[ \t]*#+[ \t]*[^ \t\n#]")))
             ;; We may have gone to far.  Go forward again.
-            (or (looking-at "^[ \t]*#+[ \t]*[^ \t\n]")
+            (or (looking-at "^[ \t]*#+[ \t]*[^ \t\n#]")
                 (forward-line 1))
             (point)))
         ;; Find the beginning of the first line past the region to fill.
         (save-excursion
           (while (progn (forward-line 1)
-                        (looking-at "^[ \t]*#+[ \t]*[^ \t\n]")))
+                        (looking-at "^[ \t]*#+[ \t]*[^ \t\n#]")))
           (point)))
        ;; Remove existing hashes
        (goto-char (point-min))
@@ -1840,12 +2089,14 @@ indentation and initial hashes. Behaves usually outside of comment."
       (or (memq (preceding-char) '(?\ ?\t)) (insert " "))))))
 
 (defvar imenu-example--function-name-regexp-perl
-      "^[ \t]*\\(sub\\|package\\)[ \t\n]+\\([a-zA-Z_0-9:']+\\)[ \t]*")
+      "^\\([ \t]*\\(sub\\|package\\)[ \t\n]+\\([a-zA-Z_0-9:']+\\)[ \t]*\\|=head\\([12]\\)[ \t]+\\([^\n]+\\)$\\)")
 
 (defun imenu-example--create-perl-index (&optional regexp)
   (require 'cl)
-  (let ((index-alist '()) (index-pack-alist '()) packages ends-ranges p
-       (prev-pos 0) char fchar index name (end-range 0) package)
+  (let ((index-alist '()) (index-pack-alist '()) (index-pod-alist '()) 
+       (index-unsorted-alist '()) (i-s-f (default-value 'imenu-sort-function))
+       packages ends-ranges p
+       (prev-pos 0) char fchar index index1 name (end-range 0) package)
     (goto-char (point-min))
     (imenu-progress-message prev-pos 0)
     ;; Search for the function
@@ -1855,44 +2106,72 @@ indentation and initial hashes. Behaves usually outside of comment."
              nil t)
        (imenu-progress-message prev-pos)
        ;;(backward-up-list 1)
-       (save-excursion
-         (goto-char (match-beginning 1))
-         (setq fchar (following-char))
-         )
-       (setq char (following-char))
-       (setq p (point))
-       (while (and ends-ranges (>= p (car ends-ranges)))
-               ;; delete obsolete entries
-               (setq ends-ranges (cdr ends-ranges) packages (cdr packages)))
-       (setq package (or (car packages) "")
-             end-range (or (car ends-ranges) 0))
-       (if (eq fchar ?p)
-           (progn 
-             (setq name (buffer-substring (match-beginning 2) (match-end 2))
-                   package (concat name "::") 
-                   name (concat "package " name)
-                   end-range 
-                   (save-excursion
-                     (parse-partial-sexp (point) (point-max) -1) (point))
-                   ends-ranges (cons end-range ends-ranges)
-                   packages (cons package packages))))
-       ;;   )
-       ;; Skip this function name if it is a prototype declaration.
-       (if (and (eq fchar ?s) (eq char ?\;)) nil
-         (if (eq fchar ?p) nil
-           (setq name (buffer-substring (match-beginning 2) (match-end 2)))
-           (if (or (> p end-range) (string-match "[:']" name)) nil
-             (setq name (concat package name))))
-         (setq index (imenu-example--name-and-position))
+       (cond
+        ((match-beginning 2)           ; package or sub
+         (save-excursion
+           (goto-char (match-beginning 2))
+           (setq fchar (following-char))
+           )
+         (setq char (following-char))
+         (setq p (point))
+         (while (and ends-ranges (>= p (car ends-ranges)))
+           ;; delete obsolete entries
+           (setq ends-ranges (cdr ends-ranges) packages (cdr packages)))
+         (setq package (or (car packages) "")
+               end-range (or (car ends-ranges) 0))
+         (if (eq fchar ?p)
+             (progn 
+               (setq name (buffer-substring (match-beginning 3) (match-end 3))
+                     package (concat name "::") 
+                     name (concat "package " name)
+                     end-range 
+                     (save-excursion
+                       (parse-partial-sexp (point) (point-max) -1) (point))
+                     ends-ranges (cons end-range ends-ranges)
+                     packages (cons package packages))))
+         ;;   )
+         ;; Skip this function name if it is a prototype declaration.
+         (if (and (eq fchar ?s) (eq char ?\;)) nil
+           (if (eq fchar ?p) nil
+             (setq name (buffer-substring (match-beginning 3) (match-end 3)))
+             (if (or (> p end-range) (string-match "[:']" name)) nil
+               (setq name (concat package name))))
+           (setq index (imenu-example--name-and-position))
+           (setcar index name)
+           (if (eq fchar ?p) 
+               (push index index-pack-alist)
+             (push index index-alist))
+           (push index index-unsorted-alist)))
+        (t                             ; Pod section
+         ;; (beginning-of-line)
+         (setq index (imenu-example--name-and-position)
+               name (buffer-substring (match-beginning 5) (match-end 5)))
+         (if (eq (char-after (match-beginning 4)) ?2)
+             (setq name (concat "   " name)))
          (setcar index name)
-         (if (eq fchar ?p) 
-           (push index index-pack-alist)
-           (push index index-alist)))))
+         (setq index1 (cons (concat "=" name) (cdr index)))
+         (push index index-pod-alist)
+         (push index1 index-unsorted-alist)))))
     (imenu-progress-message prev-pos 100)
+    (setq index-alist 
+         (if (default-value 'imenu-sort-function)
+             (sort index-alist (default-value 'imenu-sort-function))
+             (nreverse index-alist)))
+    (and index-pod-alist
+        (push (cons (imenu-create-submenu-name "+POD headers+") 
+                    (nreverse index-pod-alist))
+              index-alist))
     (and index-pack-alist
-        (push (cons (imenu-create-submenu-name "Packages") index-pack-alist)
+        (push (cons (imenu-create-submenu-name "+Packages+") 
+                    (nreverse index-pack-alist))
+              index-alist))
+    (and (or index-pack-alist index-pod-alist 
+            (default-value 'imenu-sort-function))
+        index-unsorted-alist
+        (push (cons (imenu-create-submenu-name "+Unsorted List+") 
+                    (nreverse index-unsorted-alist))
               index-alist))
-    (nreverse index-alist)))
+    index-alist))
 
 (defvar cperl-compilation-error-regexp-alist 
   ;; This look like a paranoiac regexp: could anybody find a better one? (which WORK).
@@ -1918,17 +2197,27 @@ indentation and initial hashes. Behaves usually outside of comment."
                    (eq major-mode 'perl-mode)
                    (eq major-mode 'cperl-mode))
                   (progn
-                    (or cperl-faces-init (cperl-init-faces))
-                    (setq font-lock-keywords perl-font-lock-keywords
-                          cperl-faces-init t)))))))
+                    (or cperl-faces-init (cperl-init-faces))))))))
+
+(defvar perl-font-lock-keywords-1 nil
+  "Additional expressions to highlight in Perl mode. Minimal set.")
+(defvar perl-font-lock-keywords nil
+  "Additional expressions to highlight in Perl mode. Default set.")
+(defvar perl-font-lock-keywords-2 nil
+  "Additional expressions to highlight in Perl mode. Maximal set")
 
 (defun cperl-init-faces ()
   (condition-case nil
       (progn
        (require 'font-lock)
-       (let (t-font-lock-keywords)
+       (and (fboundp 'font-lock-fontify-anchored-keywords)
+            (featurep 'font-lock-extra)
+            (message "You have an obsolete package `font-lock-extra'. Install `choose-color'."))
+       (let (t-font-lock-keywords t-font-lock-keywords-1 font-lock-anchored)
          ;;(defvar cperl-font-lock-enhanced nil
          ;;  "Set to be non-nil if font-lock allows active highlights.")
+         (if (fboundp 'font-lock-fontify-anchored-keywords)
+             (setq font-lock-anchored t))
          (setq 
           t-font-lock-keywords
           (list
@@ -2036,64 +2325,78 @@ indentation and initial hashes. Behaves usually outside of comment."
            ;;                     "\\|")
            '("-[rwxoRWXOezsfdlpSbctugkTBMAC]\\>\\([ \t]+_\\>\\)?" 0
              font-lock-function-name-face) ; Not very good, triggers at "[a-z]"
-           '("\\<sub[ \t]+\\([^ \t{]+\\)[ \t]*[{\n]" 1
+           '("\\<sub[ \t]+\\([^ \t{;]+\\)[ \t]*[{\n]" 1
              font-lock-function-name-face)
-           '("\\<\\(package\\|require\\|use\\)[ \t]+\\([a-zA-z_][a-zA-z_0-9:]*\\)[ \t;]" ; require A if B;
+           '("\\<\\(package\\|require\\|use\\|import\\|no\\|bootstrap\\)[ \t]+\\([a-zA-z_][a-zA-z_0-9:]*\\)[ \t;]" ; require A if B;
              2 font-lock-function-name-face)
-           (if (featurep 'font-lock-extra)
-               '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\\([a-zA-Z0-9_:]+\\)[ \t]*}" 
-                 (2 font-lock-string-face t)
-                 (0 '(restart 2 t)))   ; To highlight $a{bc}{ef}
-             '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\\([a-zA-Z0-9_:]+\\)[ \t]*}"
-               2 font-lock-string-face t))
+           (cond ((featurep 'font-lock-extra)
+                  '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\\([a-zA-Z0-9_:]+\\)[ \t]*}" 
+                    (2 font-lock-string-face t)
+                    (0 '(restart 2 t)))) ; To highlight $a{bc}{ef}
+                 (font-lock-anchored
+                  '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\\([a-zA-Z0-9_:]+\\)[ \t]*}"
+                    (2 font-lock-string-face t)
+                    ("\\=[ \t]*{[ \t]*\\([a-zA-Z0-9_:]+\\)[ \t]*}"
+                     nil nil
+                     (1 font-lock-string-face t))))
+                 (t '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\\([a-zA-Z0-9_:]+\\)[ \t]*}"
+                      2 font-lock-string-face t)))
            '("[ \t{,(]\\([a-zA-Z0-9_:]+\\)[ \t]*=>" 1
              font-lock-string-face t)
            '("^[ \t]*\\([a-zA-Z0-9_]+[ \t]*:\\)[ \t]*\\($\\|{\\|\\<\\(until\\|while\\|for\\(each\\)?\\|do\\)\\>\\)" 1 
              font-lock-reference-face) ; labels
            '("\\<\\(continue\\|next\\|last\\|redo\\|goto\\)\\>[ \t]+\\([a-zA-Z0-9_:]+\\)" ; labels as targets
              2 font-lock-reference-face)
-           (if (featurep 'font-lock-extra)
-               '("^[ \t]*\\(my\\|local\\)[ \t]*\\(([ \t]*\\)?\\([$@%][a-zA-Z0-9_]+\\)\\([ \t]*,\\)?"
-                 (3 font-lock-variable-name-face)
-                 (4 '(another 4 nil
-                              ("[ \t]*,[ \t]*\\([$@%][a-zA-Z0-9_]+\\)\\([ \t]*,\\)?"
-                               (1 font-lock-variable-name-face)
-                               (2 '(restart 2 nil) nil t))) 
-                    nil t))            ; local variables, multiple
-             '("^[ \t]*\\(my\\|local\\)[ \t]*\\(([ \t]*\\)?\\([$@%][a-zA-Z0-9_]+\\)"
-               3 font-lock-variable-name-face))
+           (cond ((featurep 'font-lock-extra)
+                  '("^[ \t]*\\(my\\|local\\)[ \t]*\\(([ \t]*\\)?\\([$@%*][a-zA-Z0-9_:]+\\)\\([ \t]*,\\)?"
+                    (3 font-lock-variable-name-face)
+                    (4 '(another 4 nil
+                                 ("\\=[ \t]*,[ \t]*\\([$@%*][a-zA-Z0-9_:]+\\)\\([ \t]*,\\)?"
+                                  (1 font-lock-variable-name-face)
+                                  (2 '(restart 2 nil) nil t))) 
+                       nil t)))        ; local variables, multiple
+                 (font-lock-anchored
+                  '("^[ \t]*\\(my\\|local\\)[ \t]*\\(([ \t]*\\)?\\([$@%*][a-zA-Z0-9_:]+\\)"
+                    (3 font-lock-variable-name-face)
+                    ("\\=[ \t]*,[ \t]*\\([$@%*][a-zA-Z0-9_:]+\\)"
+                     nil nil
+                     (1 font-lock-variable-name-face))))
+                 (t '("^[ \t]*\\(my\\|local\\)[ \t]*\\(([ \t]*\\)?\\([$@%*][a-zA-Z0-9_:]+\\)"
+                      3 font-lock-variable-name-face)))
            '("\\<for\\(each\\)?[ \t]*\\(\\$[a-zA-Z_][a-zA-Z_0-9]*\\)[ \t]*("
              2 font-lock-variable-name-face)))
-         (if (and (fboundp 'turn-on-font-lock) ; Check for newer font-lock
-                  (not (cperl-xemacs-p))) ; not yet as of XEmacs 19.12
-             (setq t-font-lock-keywords
-                   (append 
-                    t-font-lock-keywords
-                    '(("\\(\\([$@]+\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)[ \t]*\\([[{]\\)"
-                       1
-                       (if (= (- (match-end 2) (match-beginning 2)) 1) 
-                           (if (eq (char-after (match-beginning 3)) ?{)
-                               font-lock-other-emphasized-face
-                             font-lock-emphasized-face) ; arrays and hashes
-                         font-lock-variable-name-face) ; Just to put something
-                       t)
-                      ("\\(\\([@%]\\|\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
-                       (if (eq (char-after (match-beginning 2)) ?%)
-                           font-lock-other-emphasized-face
-                         font-lock-emphasized-face)
-                       t)              ; arrays and hashes
-                      ;;("\\([smy]\\|tr\\)\\([^a-z_A-Z0-9]\\)\\(\\([^\n\\]*||\\)\\)\\2")
+         (setq 
+          t-font-lock-keywords-1
+          (and (fboundp 'turn-on-font-lock) ; Check for newer font-lock
+               (not (cperl-xemacs-p)) ; not yet as of XEmacs 19.12
+               '(("\\(\\([$@]+\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)[ \t]*\\([[{]\\)"
+                  1
+                  (if (= (- (match-end 2) (match-beginning 2)) 1) 
+                      (if (eq (char-after (match-beginning 3)) ?{)
+                          font-lock-other-emphasized-face
+                        font-lock-emphasized-face) ; arrays and hashes
+                    font-lock-variable-name-face) ; Just to put something
+                  t)
+                 ("\\(\\([@%]\\|\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
+                  (if (eq (char-after (match-beginning 2)) ?%)
+                      font-lock-other-emphasized-face
+                    font-lock-emphasized-face)
+                  t)                   ; arrays and hashes
+                 ;;("\\([smy]\\|tr\\)\\([^a-z_A-Z0-9]\\)\\(\\([^\n\\]*||\\)\\)\\2")
                       ;;; Too much noise from \s* @s[ and friends
-                      ;;("\\(\\<\\([msy]\\|tr\\)[ \t]*\\([^ \t\na-zA-Z0-9_]\\)\\|\\(/\\)\\)" 
-                       ;;(3 font-lock-function-name-face t t)
-                       ;;(4
-                       ;; (if (cperl-slash-is-regexp)
-                       ;;    font-lock-function-name-face 'default) nil t))
-                      ))))
-         (defconst perl-font-lock-keywords t-font-lock-keywords
-           "Additional expressions to highlight in Perl mode."))
+                 ;;("\\(\\<\\([msy]\\|tr\\)[ \t]*\\([^ \t\na-zA-Z0-9_]\\)\\|\\(/\\)\\)" 
+                 ;;(3 font-lock-function-name-face t t)
+                 ;;(4
+                 ;; (if (cperl-slash-is-regexp)
+                 ;;    font-lock-function-name-face 'default) nil t))
+                 )))
+         (setq perl-font-lock-keywords-1 t-font-lock-keywords
+               perl-font-lock-keywords perl-font-lock-keywords-1
+               perl-font-lock-keywords-2 (append
+                                          t-font-lock-keywords
+                                          t-font-lock-keywords-1)))
        (if (fboundp 'ps-print-buffer) (cperl-ps-print-init))
-       (if (featurep 'font-lock-extra)
+       (if (or (featurep 'choose-color) (featurep 'font-lock-extra))
            (font-lock-require-faces
             (list
              ;; Color-light    Color-dark      Gray-light      Gray-dark Mono
@@ -2319,7 +2622,8 @@ indentation and initial hashes. Behaves usually outside of comment."
            (if (is-face 'font-lock-variable-name-face) nil
              (copy-face 'italic 'font-lock-variable-name-face))
            (if (is-face 'font-lock-reference-face) nil
-             (copy-face 'italic 'font-lock-reference-face)))))
+             (copy-face 'italic 'font-lock-reference-face))))
+       (setq cperl-faces-init t))
     (error nil)))
 
 
@@ -2413,7 +2717,7 @@ Available styles are GNU, K&R, BSD and Whitesmith."
                 read))))
 
   (let ((buffer (current-buffer))
-       (cmd-desc (concat "^" (regexp-quote command) "[ \t\n]"))
+       (cmd-desc (concat "^" (regexp-quote command) "[^a-zA-Z_0-9]")) ; "tr///"
        pos)
     (if (string-match "^-[a-zA-Z]$" command)
        (setq cmd-desc "^-X[ \t\n]"))
@@ -2428,7 +2732,7 @@ Available styles are GNU, K&R, BSD and Whitesmith."
          (pop-to-buffer (cperl-info-buffer))
          (set-window-start (selected-window) pos))
       (message "No entry for %s found." command))
-      (pop-to-buffer buffer)))
+    (pop-to-buffer buffer)))
 
 (defun cperl-info-on-current-command ()
   "Shows documentation for Perl command at point in other window."
diff --git a/embed.h b/embed.h
index 983771e..396857b 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define oldbufptr      Perl_oldbufptr
 #define oldoldbufptr   Perl_oldoldbufptr
 #define op             Perl_op
+#define op_desc                Perl_op_desc
 #define op_name                Perl_op_name
 #define op_seqmax      Perl_op_seqmax
 #define opargs         Perl_opargs
 #define yysindex       Perl_yysindex
 #define yytable                Perl_yytable
 #define yyval          Perl_yyval
+#define Gv_AMupdate    Perl_Gv_AMupdate
+#define amagic_call    Perl_amagic_call
 #define append_elem    Perl_append_elem
 #define append_list    Perl_append_list
 #define apply          Perl_apply
+#define assertref      Perl_assertref
 #define av_clear       Perl_av_clear
+#define av_extend      Perl_av_extend
 #define av_fake                Perl_av_fake
 #define av_fetch       Perl_av_fetch
 #define av_fill                Perl_av_fill
 #define block_start    Perl_block_start
 #define calllist       Perl_calllist
 #define cando          Perl_cando
+#define cast_ulong     Perl_cast_ulong
 #define check_uni      Perl_check_uni
 #define checkcomma     Perl_checkcomma
+#define chsize         Perl_chsize
 #define ck_aelem       Perl_ck_aelem
 #define ck_concat      Perl_ck_concat
 #define ck_eof         Perl_ck_eof
 #define convert                Perl_convert
 #define cpytill                Perl_cpytill
 #define croak          Perl_croak
+#define cv_clone       Perl_cv_clone
 #define cv_undef       Perl_cv_undef
+#define cx_dump                Perl_cx_dump
 #define cxinc          Perl_cxinc
 #define deb            Perl_deb
 #define deb_growlevel  Perl_deb_growlevel
 #define debop          Perl_debop
+#define debprofdump    Perl_debprofdump
 #define debstack       Perl_debstack
 #define debstackptrs   Perl_debstackptrs
 #define deprecate      Perl_deprecate
 #define die            Perl_die
 #define die_where      Perl_die_where
 #define do_aexec       Perl_do_aexec
+#define do_chomp       Perl_do_chomp
 #define do_chop                Perl_do_chop
 #define do_close       Perl_do_close
 #define do_eof         Perl_do_eof
 #define do_pipe                Perl_do_pipe
 #define do_print       Perl_do_print
 #define do_readline    Perl_do_readline
-#define do_chomp       Perl_do_chomp
 #define do_seek                Perl_do_seek
 #define do_semop       Perl_do_semop
 #define do_shmio       Perl_do_shmio
 #define doeval         Perl_doeval
 #define dofindlabel    Perl_dofindlabel
 #define dopoptoeval    Perl_dopoptoeval
+#define dounwind       Perl_dounwind
 #define dowantarray    Perl_dowantarray
 #define dump_all       Perl_dump_all
 #define dump_eval      Perl_dump_eval
+#define dump_fds       Perl_dump_fds
+#define dump_form      Perl_dump_form
 #define dump_gv                Perl_dump_gv
+#define dump_mstats    Perl_dump_mstats
 #define dump_op                Perl_dump_op
 #define dump_packsubs  Perl_dump_packsubs
 #define dump_pm                Perl_dump_pm
 #define fbm_instr      Perl_fbm_instr
 #define fetch_gv       Perl_fetch_gv
 #define fetch_io       Perl_fetch_io
+#define filter_add     Perl_filter_add
+#define filter_del     Perl_filter_del
+#define filter_read    Perl_filter_read
 #define fold_constants Perl_fold_constants
 #define force_ident    Perl_force_ident
+#define force_list     Perl_force_list
 #define force_next     Perl_force_next
 #define force_word     Perl_force_word
 #define free_tmps      Perl_free_tmps
 #define gp_ref         Perl_gp_ref
 #define gv_AVadd       Perl_gv_AVadd
 #define gv_HVadd       Perl_gv_HVadd
+#define gv_IOadd       Perl_gv_IOadd
 #define gv_check       Perl_gv_check
 #define gv_efullname   Perl_gv_efullname
 #define gv_fetchfile   Perl_gv_fetchfile
 #define hv_delete      Perl_hv_delete
 #define hv_exists      Perl_hv_exists
 #define hv_fetch       Perl_hv_fetch
-#define hv_stashpv     Perl_hv_stashpv
 #define hv_iterinit    Perl_hv_iterinit
 #define hv_iterkey     Perl_hv_iterkey
 #define hv_iternext    Perl_hv_iternext
 #define hv_iternextsv  Perl_hv_iternextsv
 #define hv_iterval     Perl_hv_iterval
 #define hv_magic       Perl_hv_magic
+#define hv_stashpv     Perl_hv_stashpv
 #define hv_store       Perl_hv_store
 #define hv_undef       Perl_hv_undef
 #define ibcmp          Perl_ibcmp
 #define listkids       Perl_listkids
 #define localize       Perl_localize
 #define looks_like_number      Perl_looks_like_number
+#define magic_clearenv Perl_magic_clearenv
 #define magic_clearpack        Perl_magic_clearpack
+#define magic_existspack       Perl_magic_existspack
 #define magic_get      Perl_magic_get
 #define magic_getarylen        Perl_magic_getarylen
 #define magic_getglob  Perl_magic_getglob
 #define mod            Perl_mod
 #define modkids                Perl_modkids
 #define moreswitches   Perl_moreswitches
+#define mstats         Perl_mstats
 #define my             Perl_my
+#define my_bcopy       Perl_my_bcopy
+#define my_bzero       Perl_my_bzero
 #define my_exit                Perl_my_exit
+#define my_htonl       Perl_my_htonl
 #define my_lstat       Perl_my_lstat
+#define my_memcmp      Perl_my_memcmp
+#define my_ntohl       Perl_my_ntohl
 #define my_pclose      Perl_my_pclose
 #define my_popen       Perl_my_popen
 #define my_setenv      Perl_my_setenv
 #define my_stat                Perl_my_stat
+#define my_swap                Perl_my_swap
 #define my_unexec      Perl_my_unexec
 #define newANONHASH    Perl_newANONHASH
 #define newANONLIST    Perl_newANONLIST
+#define newANONSUB     Perl_newANONSUB
 #define newASSIGNOP    Perl_newASSIGNOP
 #define newAV          Perl_newAV
 #define newAVREF       Perl_newAVREF
 #define newBINOP       Perl_newBINOP
 #define newCONDOP      Perl_newCONDOP
-#define newCVOP                Perl_newCVOP
 #define newCVREF       Perl_newCVREF
 #define newFORM                Perl_newFORM
 #define newFOROP       Perl_newFOROP
 #define newLOGOP       Perl_newLOGOP
 #define newLOOPEX      Perl_newLOOPEX
 #define newLOOPOP      Perl_newLOOPOP
-#define newMETHOD      Perl_newMETHOD
 #define newNULLLIST    Perl_newNULLLIST
 #define newOP          Perl_newOP
-#define newPROG                Perl_newPROG
 #define newPMOP                Perl_newPMOP
+#define newPROG                Perl_newPROG
 #define newPVOP                Perl_newPVOP
 #define newRANGE       Perl_newRANGE
 #define newRV          Perl_newRV
 #define newSViv                Perl_newSViv
 #define newSVnv                Perl_newSVnv
 #define newSVpv                Perl_newSVpv
+#define newSVrv                Perl_newSVrv
 #define newSVsv                Perl_newSVsv
 #define newUNOP                Perl_newUNOP
 #define newWHILEOP     Perl_newWHILEOP
-#define newXSUB                Perl_newXSUB
 #define newXS          Perl_newXS
+#define newXSUB                Perl_newXSUB
 #define nextargv       Perl_nextargv
 #define ninstr         Perl_ninstr
 #define no_fh_allowed  Perl_no_fh_allowed
 #define pad_swipe      Perl_pad_swipe
 #define peep           Perl_peep
 #define pidgone                Perl_pidgone
+#define pmflag         Perl_pmflag
 #define pmruntime      Perl_pmruntime
 #define pmtrans                Perl_pmtrans
 #define pop_return     Perl_pop_return
 #define pp_caller      Perl_pp_caller
 #define pp_chdir       Perl_pp_chdir
 #define pp_chmod       Perl_pp_chmod
+#define pp_chomp       Perl_pp_chomp
 #define pp_chop                Perl_pp_chop
 #define pp_chown       Perl_pp_chown
 #define pp_chroot      Perl_pp_chroot
 #define pp_predec      Perl_pp_predec
 #define pp_preinc      Perl_pp_preinc
 #define pp_print       Perl_pp_print
+#define pp_prototype   Perl_pp_prototype
 #define pp_prtf                Perl_pp_prtf
 #define pp_push                Perl_pp_push
 #define pp_pushmark    Perl_pp_pushmark
 #define pp_rv2gv       Perl_pp_rv2gv
 #define pp_rv2hv       Perl_pp_rv2hv
 #define pp_rv2sv       Perl_pp_rv2sv
-#define pp_chomp       Perl_pp_chomp
 #define pp_sassign     Perl_pp_sassign
 #define pp_scalar      Perl_pp_scalar
+#define pp_schomp      Perl_pp_schomp
 #define pp_schop       Perl_pp_schop
 #define pp_scmp                Perl_pp_scmp
 #define pp_scope       Perl_pp_scope
 #define pp_sqrt                Perl_pp_sqrt
 #define pp_srand       Perl_pp_srand
 #define pp_srefgen     Perl_pp_srefgen
-#define pp_schomp      Perl_pp_schomp
 #define pp_sselect     Perl_pp_sselect
 #define pp_sservent    Perl_pp_sservent
 #define pp_ssockopt    Perl_pp_ssockopt
 #define pp_substcont   Perl_pp_substcont
 #define pp_substr      Perl_pp_substr
 #define pp_subtract    Perl_pp_subtract
-#define pp_sv2len      Perl_pp_sv2len
 #define pp_symlink     Perl_pp_symlink
 #define pp_syscall     Perl_pp_syscall
 #define pp_sysread     Perl_pp_sysread
 #define pp_tell                Perl_pp_tell
 #define pp_telldir     Perl_pp_telldir
 #define pp_tie         Perl_pp_tie
+#define pp_tied                Perl_pp_tied
 #define pp_time                Perl_pp_time
 #define pp_tms         Perl_pp_tms
 #define pp_trans       Perl_pp_trans
 #define pp_wantarray   Perl_pp_wantarray
 #define pp_warn                Perl_pp_warn
 #define pp_xor         Perl_pp_xor
+#define pregcomp       Perl_pregcomp
+#define pregexec       Perl_pregexec
+#define pregfree       Perl_pregfree
 #define prepend_elem   Perl_prepend_elem
 #define push_return    Perl_push_return
 #define push_scope     Perl_push_scope
 #define q              Perl_q
 #define ref            Perl_ref
 #define refkids                Perl_refkids
-#define pregcomp       Perl_pregcomp
 #define regdump                Perl_regdump
-#define pregexec       Perl_pregexec
-#define pregfree       Perl_pregfree
 #define regnext                Perl_regnext
 #define regprop                Perl_regprop
 #define repeatcpy      Perl_repeatcpy
 #define rninstr                Perl_rninstr
 #define run            Perl_run
-#define savepv         Perl_savepv
-#define savepvn                Perl_savepvn
+#define same_dirent    Perl_same_dirent
 #define save_I32       Perl_save_I32
 #define save_aptr      Perl_save_aptr
 #define save_ary       Perl_save_ary
 #define save_clearsv   Perl_save_clearsv
 #define save_delete    Perl_save_delete
+#define save_destructor        Perl_save_destructor
 #define save_freeop    Perl_save_freeop
 #define save_freepv    Perl_save_freepv
 #define save_freesv    Perl_save_freesv
 #define save_int       Perl_save_int
 #define save_item      Perl_save_item
 #define save_list      Perl_save_list
+#define save_long      Perl_save_long
 #define save_nogv      Perl_save_nogv
+#define save_pptr      Perl_save_pptr
 #define save_scalar    Perl_save_scalar
 #define save_sptr      Perl_save_sptr
 #define save_svref     Perl_save_svref
+#define savepv         Perl_savepv
+#define savepvn                Perl_savepvn
 #define savestack_grow Perl_savestack_grow
 #define sawparens      Perl_sawparens
 #define scalar         Perl_scalar
 #define screaminstr    Perl_screaminstr
 #define setdefout      Perl_setdefout
 #define setenv_getix   Perl_setenv_getix
+#define sighandler     Perl_sighandler
 #define skipspace      Perl_skipspace
 #define stack_grow     Perl_stack_grow
 #define start_subparse Perl_start_subparse
 #define sv_dump                Perl_sv_dump
 #define sv_eq          Perl_sv_eq
 #define sv_free                Perl_sv_free
+#define sv_free_arenas Perl_sv_free_arenas
 #define sv_gets                Perl_sv_gets
 #define sv_grow                Perl_sv_grow
 #define sv_inc         Perl_sv_inc
 #define sv_magic       Perl_sv_magic
 #define sv_mortalcopy  Perl_sv_mortalcopy
 #define sv_newmortal   Perl_sv_newmortal
+#define sv_newref      Perl_sv_newref
 #define sv_peek                Perl_sv_peek
+#define sv_pvn_force   Perl_sv_pvn_force
 #define sv_ref         Perl_sv_ref
+#define sv_reftype     Perl_sv_reftype
 #define sv_replace     Perl_sv_replace
 #define sv_report_used Perl_sv_report_used
 #define sv_reset       Perl_sv_reset
 #define sv_setpv       Perl_sv_setpv
 #define sv_setpvn      Perl_sv_setpvn
 #define sv_setref_iv   Perl_sv_setref_iv
+#define sv_setref_nv   Perl_sv_setref_nv
 #define sv_setref_pv   Perl_sv_setref_pv
+#define sv_setref_pvn  Perl_sv_setref_pvn
 #define sv_setsv       Perl_sv_setsv
 #define sv_unmagic     Perl_sv_unmagic
+#define sv_unref       Perl_sv_unref
 #define sv_upgrade     Perl_sv_upgrade
 #define sv_usepvn      Perl_sv_usepvn
 #define taint_env      Perl_taint_env
 #define taint_proper   Perl_taint_proper
 #define too_few_arguments      Perl_too_few_arguments
 #define too_many_arguments     Perl_too_many_arguments
+#define unlnk          Perl_unlnk
+#define utilize                Perl_utilize
 #define wait4pid       Perl_wait4pid
 #define warn           Perl_warn
 #define watch          Perl_watch
 #define xpv_root       Perl_xpv_root
 #define xrv_root       Perl_xrv_root
 #define yyerror                Perl_yyerror
-#define yyerror                Perl_yyerror
 #define yylex          Perl_yylex
 #define yyparse                Perl_yyparse
 #define yywarn         Perl_yywarn
 #define mystack_sp     (curinterp->Imystack_sp)
 #define mystrk         (curinterp->Imystrk)
 #define nrs            (curinterp->Inrs)
-#define nrschar                (curinterp->Inrschar)
-#define nrslen         (curinterp->Inrslen)
 #define ofmt           (curinterp->Iofmt)
 #define ofs            (curinterp->Iofs)
 #define ofslen         (curinterp->Iofslen)
 #define restartop      (curinterp->Irestartop)
 #define rightgv                (curinterp->Irightgv)
 #define rs             (curinterp->Irs)
-#define rschar         (curinterp->Irschar)
-#define rslen          (curinterp->Irslen)
-#define rspara         (curinterp->Irspara)
 #define runlevel       (curinterp->Irunlevel)
 #define sawampersand   (curinterp->Isawampersand)
 #define sawi           (curinterp->Isawi)
 #define Imystack_sp    mystack_sp
 #define Imystrk                mystrk
 #define Inrs           nrs
-#define Inrschar       nrschar
-#define Inrslen                nrslen
 #define Iofmt          ofmt
 #define Iofs           ofs
 #define Iofslen                ofslen
 #define Irestartop     restartop
 #define Irightgv       rightgv
 #define Irs            rs
-#define Irschar                rschar
-#define Irslen         rslen
-#define Irspara                rspara
 #define Irunlevel      runlevel
 #define Isawampersand  sawampersand
 #define Isawi          sawi
index 08463df..6ca011b 100644 (file)
@@ -170,12 +170,12 @@ sub CLEAR { croak "DB_File::BTREEINFO::CLEAR is not implemented" }
 package DB_File ;
 use Carp;
 
-$VERSION = 1.01 ;
+$VERSION = $VERSION = 1.01 ;
 
 #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
-$DB_BTREE = TIEHASH DB_File::BTREEINFO ;
-$DB_HASH  = TIEHASH DB_File::HASHINFO ;
-$DB_RECNO = TIEHASH DB_File::RECNOINFO ;
+$DB_BTREE = $DB_BTREE = TIEHASH DB_File::BTREEINFO ;
+$DB_HASH  = $DB_HASH  = TIEHASH DB_File::HASHINFO ;
+$DB_RECNO = $DB_RECNO = TIEHASH DB_File::RECNOINFO ;
 
 require TieHash;
 require Exporter;
@@ -233,11 +233,7 @@ sub AUTOLOAD {
     goto &$AUTOLOAD;
 }
 
-@liblist = ();
-@liblist = split ' ', $Config::Config{"DB_File_loadlibs"} 
-    if defined $Config::Config{"DB_File_loadlibs"};
-
-bootstrap DB_File @liblist;
+bootstrap DB_File ;
 
 # Preloaded methods go here.  Autoload methods go after __END__, and are
 # processed by the autosplit program.
index f67e6cd..4cda635 100644 (file)
@@ -5,7 +5,7 @@ WriteMakefile(
        LIBS    => ["-L/usr/local/lib -ldb"],
        MAN3PODS        => ' ',         # Pods will be built by installman.
        #INC    => '-I/usr/local/include',
-       VERSION => 1.01,
+       VERSION_FROM    => 'DB_File.pm',
        XSPROTOARG => '-noprototypes',          # XXX remove later?
 );
 
index 8de1808..d809b82 100644 (file)
@@ -18,6 +18,7 @@ require AutoLoader;
 
 @ISA=qw(AutoLoader);
 
+$VERSION = $VERSION = "1.00" ;
 
 sub import { }         # override import inherited from AutoLoader
 
index 1b1bf7e..3dd655d 100644 (file)
@@ -6,6 +6,7 @@ WriteMakefile(
     MAN3PODS   => ' ',         # Pods will be built by installman.
     SKIP       => [qw(dynamic dynamic_lib dynamic_bs)],
     XSPROTOARG => '-noprototypes',             # XXX remove later?
+    VERSION_FROM => 'DynaLoader.pm',
     clean      => {FILES => 'DynaLoader.c'},
 );
 
index b925150..aef7ad3 100644 (file)
@@ -27,6 +27,7 @@ require Exporter;
 use AutoLoader;
 require DynaLoader;
 @ISA = qw(Exporter DynaLoader);
+$VERSION = $VERSION = "1.00";
 # Items to export into callers namespace by default
 # (move infrequently used names to @EXPORT_OK below)
 @EXPORT =
index c432e1a..9dc0474 100644 (file)
@@ -2,5 +2,6 @@ use ExtUtils::MakeMaker;
 WriteMakefile(
     MAN3PODS   => ' ',         # Pods will be built by installman.
     XSPROTOARG => '-noprototypes',             # XXX remove later?
+    VERSION_FROM => 'Fcntl.pm',
 );
 
diff --git a/ext/FileHandle/FileHandle.pm b/ext/FileHandle/FileHandle.pm
new file mode 100644 (file)
index 0000000..93a3088
--- /dev/null
@@ -0,0 +1,426 @@
+package FileHandle;
+
+=head1 NAME
+
+FileHandle - supply object methods for filehandles
+
+=head1 SYNOPSIS
+
+    use FileHandle;
+
+    $fh = new FileHandle;
+    if ($fh->open "< file") {
+        print <$fh>;
+        $fh->close;
+    }
+
+    $fh = new FileHandle "> FOO";
+    if (defined $fh) {
+        print $fh "bar\n";
+        $fh->close;
+    }
+
+    $fh = new FileHandle "file", "r";
+    if (defined $fh) {
+        print <$fh>;
+        undef $fh;       # automatically closes the file
+    }
+
+    $fh = new FileHandle "file", O_WRONLY|O_APPEND;
+    if (defined $fh) {
+        print $fh "corge\n";
+        undef $fh;       # automatically closes the file
+    }
+
+    ($readfh, $writefh) = FileHandle::pipe;
+
+    autoflush STDOUT 1;
+  
+=head1 DESCRIPTION
+
+C<FileHandle::new> creates a C<FileHandle>, which is a reference to a
+newly created symbol (see the C<Symbol> package).  If it receives any
+parameters, they are passed to C<FileHandle::open>; if the open fails,
+the C<FileHandle> object is destroyed.  Otherwise, it is returned to
+the caller.
+
+C<FileHandle::new_from_fd> creates a C<FileHandle> like C<new> does.
+It requires two parameters, which are passed to C<FileHandle::fdopen>;
+if the fdopen fails, the C<FileHandle> object is destroyed.
+Otherwise, it is returned to the caller.
+
+C<FileHandle::open> accepts one parameter or two.  With one parameter,
+it is just a front end for the built-in C<open> function.  With two
+parameters, the first parameter is a filename that may include
+whitespace or other special characters, and the second parameter is
+the open mode in either Perl form (">", "+<", etc.) or POSIX form
+("w", "r+", etc.).
+
+C<FileHandle::fdopen> is like C<open> except that its first parameter
+is not a filename but rather a file handle name, a FileHandle object,
+or a file descriptor number.
+
+See L<perlfunc> for complete descriptions of each of the following
+supported C<FileHandle> methods, which are just front ends for the
+corresponding built-in functions:
+  
+    close
+    fileno
+    getc
+    gets
+    eof
+    clearerr
+    seek
+    tell
+
+See L<perlvar> for complete descriptions of each of the following
+supported C<FileHandle> methods:
+
+    autoflush
+    output_field_separator
+    output_record_separator
+    input_record_separator
+    input_line_number
+    format_page_number
+    format_lines_per_page
+    format_lines_left
+    format_name
+    format_top_name
+    format_line_break_characters
+    format_formfeed
+
+Furthermore, for doing normal I/O you might need these:
+
+=over 
+
+=item $fh->print
+
+See L<perlfunc/print>.
+
+=item $fh->printf
+
+See L<perlfunc/printf>.
+
+=item $fh->getline
+
+This works like <$fh> described in L<perlop/"I/O Operators">
+except that it's more readable and can be safely called in an
+array context but still returns just one line.
+
+=item $fh->getlines
+
+This works like <$fh> when called in an array context to
+read all the remaining lines in a file, except that it's more readable.
+It will also croak() if accidentally called in a scalar context.
+
+=back
+
+=head1 SEE ALSO
+
+L<perlfunc>, 
+L<perlop/"I/O Operators">,
+L<POSIX/"FileHandle">
+
+=head1 BUGS
+
+Due to backwards compatibility, all filehandles resemble objects
+of class C<FileHandle>, or actually classes derived from that class.
+They actually aren't.  Which means you can't derive your own 
+class from C<FileHandle> and inherit those methods.
+
+=cut
+
+require 5.000;
+use Carp;
+use Fcntl;
+use Symbol;
+use English;
+use SelectSaver;
+
+require Exporter;
+require DynaLoader;
+@ISA = qw(Exporter DynaLoader);
+
+@EXPORT = (@Fcntl::EXPORT,
+          qw(_IOFBF _IOLBF _IONBF));
+
+@EXPORT_OK = qw(
+    autoflush
+    output_field_separator
+    output_record_separator
+    input_record_separator
+    input_line_number
+    format_page_number
+    format_lines_per_page
+    format_lines_left
+    format_name
+    format_top_name
+    format_line_break_characters
+    format_formfeed
+
+    print
+    printf
+    getline
+    getlines
+);
+
+
+################################################
+## Interaction with the XS.
+##
+
+bootstrap FileHandle;
+
+sub AUTOLOAD {
+    if ($AUTOLOAD =~ /::(_?[a-z])/) {
+       $AutoLoader::AUTOLOAD = $AUTOLOAD;
+       goto &AutoLoader::AUTOLOAD
+    }
+    my $constname = $AUTOLOAD;
+    $constname =~ s/.*:://;
+    my $val = constant($constname);
+    defined $val or croak "$constname is not a valid FileHandle macro";
+    *$AUTOLOAD = sub { $val };
+    goto &$AUTOLOAD;
+}
+
+
+################################################
+## Constructors, destructors.
+##
+
+sub new {
+    @_ >= 1 && @_ <= 3 or croak 'usage: new FileHandle [FILENAME [,MODE]]';
+    my $class = shift;
+    my $fh = gensym;
+    if (@_) {
+       FileHandle::open($fh, @_)
+           or return undef;
+    }
+    bless $fh, $class;
+}
+
+sub new_from_fd {
+    @_ == 3 or croak 'usage: new_from_fd FileHandle FD, MODE';
+    my $class = shift;
+    my $fh = gensym;
+    FileHandle::fdopen($fh, @_)
+       or return undef;
+    bless $fh, $class;
+}
+
+sub DESTROY {
+    my ($fh) = @_;
+    close($fh);
+}
+
+################################################
+## Open and close.
+##
+
+sub pipe {
+    @_ and croak 'usage: FileHandle::pipe()';
+    my $readfh = new FileHandle;
+    my $writefh = new FileHandle;
+    pipe($readfh, $writefh)
+       or return undef;
+    ($readfh, $writefh);
+}
+
+sub _open_mode_string {
+    my ($mode) = @_;
+    $mode =~ /^\+?(<|>>?)$/
+      or $mode =~ s/^r(\+?)$/$1</
+      or $mode =~ s/^w(\+?)$/$1>/
+      or $mode =~ s/^a(\+?)$/$1>>/
+      or croak "FileHandle: bad open mode: $mode";
+    $mode;
+}
+
+sub open {
+    @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
+    my ($fh, $file) = @_;
+    if (@_ > 2) {
+       my ($mode, $perms) = @_[2, 3];
+       if ($mode =~ /^\d+$/) {
+           defined $perms or $perms = 0666;
+           return sysopen($fh, $file, $mode, $perms);
+       }
+        $file = "./" . $file unless $file =~ m#^/#;
+       $file = _open_mode_string($mode) . " $file\0";
+    }
+    open($fh, $file);
+}
+
+sub fdopen {
+    @_ == 3 or croak 'usage: $fh->fdopen(FD, MODE)';
+    my ($fh, $fd, $mode) = @_;
+    if (ref($fd) =~ /GLOB\(/) {
+       # It's a glob reference; remove the star from its name.
+       ($fd = "".$$fd) =~ s/^\*//;
+    } elsif ($fd =~ m#^\d+$#) {
+       # It's an FD number; prefix with "=".
+       $fd = "=$fd";
+    }
+    open($fh, _open_mode_string($mode) . '&' . $fd);
+}
+
+sub close {
+    @_ == 1 or croak 'usage: $fh->close()';
+    close($_[0]);
+}
+
+################################################
+## Normal I/O functions.
+##
+
+sub fileno {
+    @_ == 1 or croak 'usage: $fh->fileno()';
+    fileno($_[0]);
+}
+
+sub getc {
+    @_ == 1 or croak 'usage: $fh->getc()';
+    getc($_[0]);
+}
+
+sub gets {
+    @_ == 1 or croak 'usage: $fh->gets()';
+    my ($handle) = @_;
+    scalar <$handle>;
+}
+
+sub eof {
+    @_ == 1 or croak 'usage: $fh->eof()';
+    eof($_[0]);
+}
+
+sub clearerr {
+    @_ == 1 or croak 'usage: $fh->clearerr()';
+    seek($_[0], 0, 1);
+}
+
+sub seek {
+    @_ == 3 or croak 'usage: $fh->seek(POS, WHENCE)';
+    seek($_[0], $_[1], $_[2]);
+}
+
+sub tell {
+    @_ == 1 or croak 'usage: $fh->tell()';
+    tell($_[0]);
+}
+
+sub print {
+    @_ or croak 'usage: $fh->print([ARGS])';
+    my $this = shift;
+    print $this @_;
+}
+
+sub printf {
+    @_ or croak 'usage: $fh->printf([ARGS])';
+    my $this = shift;
+    printf $this @_;
+}
+
+sub getline {
+    @_ == 1 or croak 'usage: $fh->getline';
+    my $this = shift;
+    return scalar <$this>;
+} 
+
+sub getlines {
+    @_ == 1 or croak 'usage: $fh->getline()';
+    my $this = shift;
+    wantarray or croak "Can't call FileHandle::getlines in a scalar context";
+    return <$this>;
+}
+
+################################################
+## State modification functions.
+##
+
+sub autoflush {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $OUTPUT_AUTOFLUSH;
+    $OUTPUT_AUTOFLUSH = @_ > 1 ? $_[1] : 1;
+    $prev;
+}
+
+sub output_field_separator {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $OUTPUT_FIELD_SEPARATOR;
+    $OUTPUT_FIELD_SEPARATOR = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub output_record_separator {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $OUTPUT_RECORD_SEPARATOR;
+    $OUTPUT_RECORD_SEPARATOR = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub input_record_separator {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $INPUT_RECORD_SEPARATOR;
+    $INPUT_RECORD_SEPARATOR = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub input_line_number {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $INPUT_LINE_NUMBER;
+    $INPUT_LINE_NUMBER = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_page_number {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $FORMAT_PAGE_NUMBER;
+    $FORMAT_PAGE_NUMBER = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_lines_per_page {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $FORMAT_LINES_PER_PAGE;
+    $FORMAT_LINES_PER_PAGE = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_lines_left {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $FORMAT_LINES_LEFT;
+    $FORMAT_LINES_LEFT = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_name {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $FORMAT_NAME;
+    $FORMAT_NAME = qualify($_[1], caller) if @_ > 1;
+    $prev;
+}
+
+sub format_top_name {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $FORMAT_TOP_NAME;
+    $FORMAT_TOP_NAME = qualify($_[1], caller) if @_ > 1;
+    $prev;
+}
+
+sub format_line_break_characters {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $FORMAT_LINE_BREAK_CHARACTERS;
+    $FORMAT_LINE_BREAK_CHARACTERS = $_[1] if @_ > 1;
+    $prev;
+}
+
+sub format_formfeed {
+    my $old = new SelectSaver qualify($_[0], caller);
+    my $prev = $FORMAT_FORMFEED;
+    $FORMAT_FORMFEED = $_[1] if @_ > 1;
+    $prev;
+}
+
+1;
diff --git a/ext/FileHandle/FileHandle.xs b/ext/FileHandle/FileHandle.xs
new file mode 100644 (file)
index 0000000..d9c8b68
--- /dev/null
@@ -0,0 +1,159 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+#include <stdio.h>
+
+typedef int SysRet;
+typedef FILE * InputStream;
+typedef FILE * OutputStream;
+
+static bool
+constant(name, pval)
+char *name;
+IV *pval;
+{
+    switch (*name) {
+    case '_':
+       if (strEQ(name, "_IOFBF"))
+#ifdef _IOFBF
+           { *pval = _IOFBF; return TRUE; }
+#else
+           return FALSE;
+#endif
+       if (strEQ(name, "_IOLBF"))
+#ifdef _IOLBF
+           { *pval = _IOLBF; return TRUE; }
+#else
+           return FALSE;
+#endif
+       if (strEQ(name, "_IONBF"))
+#ifdef _IONBF
+           { *pval = _IONBF; return TRUE; }
+#else
+           return FALSE;
+#endif
+       break;
+    }
+
+    return FALSE;
+}
+
+
+MODULE = FileHandle    PACKAGE = FileHandle    PREFIX = f
+
+SV *
+constant(name)
+       char *          name
+    CODE:
+       IV i;
+       if (constant(name, &i))
+           RETVAL = newSViv(i);
+       else
+           RETVAL = &sv_undef;
+    OUTPUT:
+       RETVAL
+
+SV *
+fgetpos(handle)
+       InputStream     handle
+    CODE:
+       if (handle) {
+           Fpos_t pos;
+           fgetpos(handle, &pos);
+           ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
+       }
+       else {
+           ST(0) = &sv_undef;
+           errno = EINVAL;
+       }
+
+SysRet
+fsetpos(handle, pos)
+       InputStream     handle
+       SV *            pos
+    CODE:
+       if (handle)
+           RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
+       else {
+           RETVAL = -1;
+           errno = EINVAL;
+       }
+    OUTPUT:
+       RETVAL
+
+int
+ungetc(handle, c)
+       InputStream     handle
+       int             c
+    CODE:
+       if (handle)
+           RETVAL = ungetc(c, handle);
+       else {
+           RETVAL = -1;
+           errno = EINVAL;
+       }
+    OUTPUT:
+       RETVAL
+
+OutputStream
+new_tmpfile(packname = "FileHandle")
+    char *             packname
+    CODE:
+       RETVAL = tmpfile();
+    OUTPUT:
+       RETVAL
+
+int
+ferror(handle)
+       InputStream     handle
+    CODE:
+       if (handle)
+           RETVAL = ferror(handle);
+       else {
+           RETVAL = -1;
+           errno = EINVAL;
+       }
+    OUTPUT:
+       RETVAL
+
+SysRet
+fflush(handle)
+       OutputStream    handle
+    CODE:
+       if (handle)
+           RETVAL = fflush(handle);
+       else {
+           RETVAL = -1;
+           errno = EINVAL;
+       }
+    OUTPUT:
+       RETVAL
+
+void
+setbuf(handle, buf)
+       OutputStream    handle
+       char *          buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
+    CODE:
+       if (handle)
+           setbuf(handle, buf);
+
+
+#ifdef _IOFBF
+
+SysRet
+setvbuf(handle, buf, type, size)
+       OutputStream    handle
+       char *          buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
+       int             type
+       int             size
+    CODE:
+       if (handle)
+           RETVAL = setvbuf(handle, buf, type, size);
+       else {
+           RETVAL = -1;
+           errno = EINVAL;
+       }
+    OUTPUT:
+       RETVAL
+
+#endif /* _IOFBF */
diff --git a/ext/FileHandle/Makefile.PL b/ext/FileHandle/Makefile.PL
new file mode 100644 (file)
index 0000000..8424f4d
--- /dev/null
@@ -0,0 +1,5 @@
+use ExtUtils::MakeMaker;
+WriteMakefile(
+    MAN3PODS   => ' ',                 # Pods will be built by installman.
+    XSPROTOARG => '-noprototypes',     # XXX remove later?
+);
index 179f9a9..ed80aa9 100644 (file)
@@ -56,6 +56,8 @@ require DynaLoader;
        GDBM_WRITER
 );
 
+$VERSION = $VERSION = "1.00";
+
 sub AUTOLOAD {
     local($constname);
     ($constname = $AUTOLOAD) =~ s/.*:://;
index 5567020..a423c88 100644 (file)
@@ -233,7 +233,7 @@ gdbm_sync(db)
        GDBM_File       db
 
 int
-gdbm_exists(db, key)
+gdbm_EXISTS(db, key)
        GDBM_File       db
        datum           key
 
index 6278008..1925623 100644 (file)
@@ -3,4 +3,5 @@ WriteMakefile(
     LIBS => ["-L/usr/local/lib -lgdbm", "-ldbm"],
     MAN3PODS   => ' ',         # Pods will be built by installman.
     XSPROTOARG => '-noprototypes',             # XXX remove later?
+    VERSION_FROM => 'GDBM_File.pm',
 );
index c765dd5..9fd37eb 100644 (file)
@@ -3,4 +3,5 @@ WriteMakefile(
     LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"],
     MAN3PODS   => ' ',         # Pods will be built by installman.
     XSPROTOARG => '-noprototypes',             # XXX remove later?
+    VERSION_FROM => 'NDBM_File.pm',
 );
index e40fe85..53a136e 100644 (file)
@@ -4,6 +4,8 @@ require TieHash;
 require DynaLoader;
 @ISA = qw(TieHash DynaLoader);
 
+$VERSION = $VERSION = "1.00";
+
 bootstrap NDBM_File;
 
 1;
index 495df3a..9662f6e 100644 (file)
@@ -3,4 +3,5 @@ WriteMakefile(
     LIBS => ["-ldbm -lucb"],
     MAN3PODS   => ' ',         # Pods will be built by installman.
     XSPROTOARG => '-noprototypes',             # XXX remove later?
+    VERSION_FROM => 'ODBM_File.pm', 
 );
index d844c67..336af3d 100644 (file)
@@ -4,6 +4,8 @@ require TieHash;
 require DynaLoader;
 @ISA = qw(TieHash DynaLoader);
 
+$VERSION = $VERSION = "1.00";
+
 bootstrap ODBM_File;
 
 1;
diff --git a/ext/ODBM_File/hints/dec_osf.pl b/ext/ODBM_File/hints/dec_osf.pl
new file mode 100644 (file)
index 0000000..f041bf9
--- /dev/null
@@ -0,0 +1,5 @@
+# The -hidden option causes compilation to fail on Digital Unix.
+#   Andy Dougherty  <doughera@lafcol.lafayette.edu>
+#   Sat Jan 13 16:29:52 EST 1996
+$self->{LDDLFLAGS} = $Config{lddlflags};
+$self->{LDDLFLAGS} =~ s/-hidden//;
index 4a7eb9a..68bce13 100644 (file)
@@ -3,4 +3,5 @@ WriteMakefile(
     LIBS => ["-lm -lposix -lcposix"],
     MAN3PODS   => ' ',         # Pods will be built by installman.
     XSPROTOARG => '-noprototypes',             # XXX remove later?
+    VERSION_FROM => 'POSIX.pm', 
 );
index ee35ea2..ab309cc 100644 (file)
@@ -1,12 +1,16 @@
 package POSIX;
 
 use Carp;
-require Exporter;
 use AutoLoader;
-require DynaLoader;
 require Config;
+use Symbol;
+
+require Exporter;
+require DynaLoader;
 @ISA = qw(Exporter DynaLoader);
 
+$VERSION = $VERSION = "1.00" ;
+
 %EXPORT_TAGS = (
 
     assert_h =>        [qw(assert NDEBUG)],
@@ -78,8 +82,8 @@ require Config;
     stddef_h =>        [qw(NULL offsetof)],
 
     stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid
-               L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET STREAM_MAX
-               TMP_MAX stderr stdin stdout _IOFBF _IOLBF _IONBF
+               L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET
+               STREAM_MAX TMP_MAX stderr stdin stdout
                clearerr fclose fdopen feof ferror fflush fgetc fgetpos
                fgets fopen fprintf fputc fputs fread freopen
                fscanf fseek fsetpos ftell fwrite getchar gets
@@ -206,30 +210,21 @@ sub AUTOLOAD {
 }
 
 sub usage { 
-    local ($mess) = @_;
+    my ($mess) = @_;
     croak "Usage: POSIX::$mess";
 }
 
 sub redef { 
-    local ($mess) = @_;
+    my ($mess) = @_;
     croak "Use method $mess instead";
 }
 
 sub unimpl { 
-    local ($mess) = @_;
+    my ($mess) = @_;
     $mess =~ s/xxx//;
     croak "Unimplemented: POSIX::$mess";
 }
 
-sub gensym {
-    my $pkg = @_ ? ref($_[0]) || $_[0] : "";
-    local *{$pkg . "::GLOB" . ++$seq};
-    \delete ${$pkg . "::"}{'GLOB' . $seq};
-}
-
-sub ungensym {
-}
-
 ############################
 package POSIX::SigAction;
 
@@ -237,75 +232,6 @@ sub new {
     bless {HANDLER => $_[1], MASK => $_[2], FLAGS => $_[3]};
 }
 
-############################
-package FileHandle;
-
-sub new {
-    POSIX::usage "FileHandle->new(filename, posixmode)" if @_ != 3;
-    local($class,$filename,$mode) = @_;
-    local($sym) = $class->POSIX::gensym;
-    $mode =~ s/a.*/>>/ ||
-    $mode =~ s/w.*/>/ ||
-    ($mode = '<');
-    open($sym, "$mode $filename") and
-    bless $sym => $class;
-}
-
-sub new_from_fd {
-    POSIX::usage "FileHandle->new_from_fd(fd,mode)" if @_ != 3;
-    local($class,$fd,$mode) = @_;
-    local($sym) = $class->POSIX::gensym;
-    $mode =~ s/a.*/>>/ ||
-    $mode =~ s/w.*/>/ ||
-    ($mode = '<');
-    open($sym, "$mode&=$fd") and
-    bless $sym => $class;
-}
-
-sub clearerr {
-    POSIX::usage "clearerr(filehandle)" if @_ != 1;
-    seek($_[0], 0, 1);
-}
-
-sub close {
-    POSIX::usage "close(filehandle)" if @_ != 1;
-    close($_[0]);
-}
-
-sub DESTROY {
-    close($_[0]);
-}
-
-sub eof {
-    POSIX::usage "eof(filehandle)" if @_ != 1;
-    eof($_[0]);
-}
-
-sub getc {
-    POSIX::usage "getc(filehandle)" if @_ != 1;
-    getc($_[0]);
-}
-
-sub gets {
-    POSIX::usage "gets(filehandle)" if @_ != 1;
-    local($handle) = @_;
-    scalar <$handle>;
-}
-
-sub fileno {
-    POSIX::usage "fileno(filehandle)" if @_ != 1;
-    fileno($_[0]);
-}
-
-sub seek {
-    POSIX::usage "seek(filehandle,pos,whence)" if @_ != 3;
-    seek($_[0], $_[1], $_[2]);
-}
-
-sub tell {
-    POSIX::usage "tell(filehandle)" if @_ != 1;
-    tell($_[0]);
-}
 ############################
 package POSIX; # return to package POSIX so AutoSplit is happy
 1;
@@ -335,7 +261,7 @@ sub closedir {
 
 sub opendir {
     usage "opendir(directory)" if @_ != 1;
-    local($dirhandle) = POSIX->gensym;
+    my $dirhandle = gensym;
     opendir($dirhandle, $_[0])
        ? $dirhandle
        : undef;
@@ -807,9 +733,9 @@ sub chmod {
 
 sub fstat {
     usage "fstat(fd)" if @_ != 1;
-    local(*TMP);
+    local *TMP;
     open(TMP, "<&$_[0]");              # Gross.
-    local(@l) = stat(TMP);
+    my @l = stat(TMP);
     close(TMP);
     @l;
 }
@@ -922,7 +848,7 @@ sub getgid {
 
 sub getgroups {
     usage "getgroups()" if @_ != 0;
-    local(%seen) = ();
+    my %seen;
     grep(!$seen{$_}++, split(' ', $) ));
 }
 
index 2549a61..4b75851 100644 (file)
@@ -1230,144 +1230,6 @@ Returns C<undef> on failure.
 
 =head1 CLASSES
 
-=head2 FileHandle
-
-=over 8
-
-=item new
-
-Open a file and return a Perl filehandle.  The first parameter is the
-filename and the second parameter is the mode.  The mode should be specified
-as C<a> for append, C<w> for write, and E<lt> or C<""> for read.
-
-Open a file for reading.
-
-       $fh = FileHandle->new( "foo", "" );
-       die "Unable to open foo for reading" unless $fh;
-
-Open a file for writing.
-
-       $fh = FileHandle->new( "foo", "w" );
-       die "Unable to open foo for writing" unless $fh;
-
-Use C<FileHandle::close()> to close the file or let the FileHandle object's
-destructor perform the close.
-
-=item clearerr
-
-Resets the error indicator and EOF indicator to zero.
-
-       $fh->clearerr;
-
-=item close
-
-Close the file.
-
-       $fh->close;
-
-=item eof
-
-Tests for end of file.
-
-       if( $fh->eof ){
-               print "end of file\n";
-       }
-
-=item error
-
-Returns non-zero if there has been an error while reading or writing a file.
-
-       if( $fh->error ){
-               print "error\n";
-       }
-
-=item fileno
-
-Returns the integer file descriptor associated with the file.
-
-       $fileno = $fh->fileno;
-
-=item flush
-
-Flush the stream.
-
-       $fh->flush;
-
-Returns C<undef> on failure.
-
-=item getc
-
-Get a character from the stream.
-
-       $ch = $fh->getc;
-
-=item getpos
-
-Retrieve the file pointer position.  The returned value can be used as an
-argument to C<setpos()>.
-
-       $pos = $fh->getpos;
-
-=item gets
-
-Retrieve a line from the open file.
-
-       $line = $fh->gets;
-
-=item new_from_fd
-
-Open a file using a file descriptor.  Return a Perl filehandle.  The first
-parameter should be a file descriptor, which can come from C<POSIX::open()>.
-The second parameter, the mode, should be C<a> for append, C<w> for write,
-and E<lt> or C<""> for read.  The mode should match the mode which was used
-when the file descriptor was created.
-
-       $fd = POSIX::open( "typemap" );
-       $fh = FileHandle->new_from_fd( $fd, "<" );
-       die "FileHandle failed" unless $fh;
-
-=item new_tmpfile
-
-Creates a temporary file, opens it for writing, and returns a Perl
-filehandle.  Consult your system's C<tmpfile()> manpage for details.
-
-       $fh = FileHandle->new_tmpfile;
-       die "FileHandle failed" unless $fh;
-
-=item seek
-
-Reposition file pointer.
-
-       $fh->seek( 2, &POSIX::SEEK_SET );
-
-=item setbuf
-
-
-=item setpos
-
-Set the file pointer position.
-
-       $pos = $fh->getpos;
-       $fh->setpos( $pos );
-
-Returns C<undef> on failure.
-
-=item setvbuf
-
-
-Returns C<undef> on failure.
-
-=item tell
-
-Returns the current file position, in bytes.
-
-       $pos = $fh->tell;
-
-=item ungetc
-
-
-=back
-
 =head2 POSIX::SigAction
 
 =over 8
@@ -1733,7 +1595,7 @@ EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX RAND_MAX
 
 =item Constants
 
-BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid L_tmpname TMP_MAX _IOFBF _IOLBF _IONBF
+BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid L_tmpname TMP_MAX
 
 =back
 
@@ -1773,5 +1635,5 @@ WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG WIFSTOPPED WSTOPSIG
 
 =head1 CREATION
 
-This document generated by ./mkposixman.PL version 19951212.
+This document generated by ./mkposixman.PL version 19960129.
 
index 2a6244a..69db228 100644 (file)
@@ -52,8 +52,6 @@
 #include <utime.h>
 #endif
 
-typedef FILE * InputStream;
-typedef FILE * OutputStream;
 typedef int SysRet;
 typedef long SysRetLong;
 typedef sigset_t* POSIX__SigSet;
@@ -2123,25 +2121,6 @@ int arg;
 #endif
            break;
        }
-       if (strEQ(name, "_IOFBF"))
-#ifdef _IOFBF
-           return _IOFBF;
-#else
-           goto not_there;
-#endif
-       if (strEQ(name, "_IOLBF"))
-#ifdef _IOLBF
-           return _IOLBF;
-#else
-           goto not_there;
-#endif
-       if (strEQ(name, "_IONBF"))
-#ifdef _IONBF
-           return _IONBF;
-#else
-           goto not_there;
-#endif
-       break;
     }
     errno = EINVAL;
     return 0;
@@ -2382,65 +2361,6 @@ setcc(termios_ref, ccix, cc)
 #endif
 
 
-
-MODULE = FileHandle    PACKAGE = FileHandle    PREFIX = f
-
-SV *
-fgetpos(handle)
-       InputStream     handle
-    CODE:
-       {
-           Fpos_t pos;
-           fgetpos(handle, &pos);
-           ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
-       }
-
-SysRet
-fsetpos(handle, pos)
-       InputStream     handle
-       SV *            pos
-    CODE:
-       RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
-    OUTPUT:
-       RETVAL
-
-int
-ungetc(handle, c)
-       InputStream     handle
-       int             c
-    CODE:
-       RETVAL = ungetc(c, handle);
-    OUTPUT:
-       RETVAL
-
-OutputStream
-new_tmpfile(packname = "FileHandle")
-    char *             packname
-    CODE:
-       RETVAL = tmpfile();
-    OUTPUT:
-       RETVAL
-
-int
-ferror(handle)
-       InputStream     handle
-
-SysRet
-fflush(handle)
-       OutputStream    handle
-
-void
-setbuf(handle, buf)
-       OutputStream    handle
-       char *          buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
-
-SysRet
-setvbuf(handle, buf, type, size)
-       OutputStream    handle
-       char *          buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
-       int             type
-       int             size
-
 MODULE = POSIX         PACKAGE = POSIX
 
 double
index 634df7c..2ad5745 100644 (file)
@@ -9,6 +9,7 @@ WriteMakefile(
     MYEXTLIB => 'sdbm/libsdbm$(LIB_EXT)',
     MAN3PODS   => ' ',         # Pods will be built by installman.
     XSPROTOARG => '-noprototypes',             # XXX remove later?
+    VERSION_FROM => 'SDBM_File.pm',
 );
 
 
index 1f93e52..d8b80c7 100644 (file)
@@ -4,6 +4,8 @@ require TieHash;
 require DynaLoader;
 @ISA = qw(TieHash DynaLoader);
 
+$VERSION = $VERSION = "1.00" ;
+
 bootstrap SDBM_File;
 
 1;
index 2024998..77d3b73 100644 (file)
@@ -2,4 +2,5 @@ use ExtUtils::MakeMaker;
 WriteMakefile(
     MAN3PODS   => ' ',         # Pods will be built by installman.
     XSPROTOARG => '-noprototypes',             # XXX remove later?
+    VERSION_FROM => 'Safe.pm',
 );
index 5014b38..5f24d19 100644 (file)
@@ -2,8 +2,9 @@ package Safe;
 require Exporter;
 require DynaLoader;
 use Carp;
+$VERSION = $VERSION = "1.00";
 @ISA = qw(Exporter DynaLoader);
-@EXPORT_OK = qw(op_mask ops_to_mask mask_to_ops opcode opname
+@EXPORT_OK = qw(op_mask ops_to_mask mask_to_ops opcode opname opdesc
                MAXO emptymask fullmask);
 
 =head1 NAME
@@ -250,13 +251,6 @@ Malcolm Beattie, mbeattie@sable.ox.ac.uk.
 
 =cut
 
-my $safes = "1111111111111111111111101111111111111111111111111111111111111111"
-         . "1111111111111111111111111111111111111111111111111111111111111111"
-         . "1111110011111111111011111111111111111111111111111111111101001010"
-         . "0110111111111111111111110011111111100001000000000000000000000100"
-         . "0000000000000111110000001111111110100000000000001111111111111111"
-         . "11111111111111111110";
-
 my $default_root = 'Root000000000';
 
 my $default_mask;
@@ -392,7 +386,282 @@ EOT
 
 bootstrap Safe;
 
-$safes .= "0" x (MAXO() - length($safes));
-($default_mask = $safes) =~ tr/01/\1\0/;       # invert for mask
+$default_mask = fullmask;
+my $name;
+while (defined ($name = <DATA>)) {
+    chomp $name;
+    next if $name =~ /^#/;
+    my $code = opcode($name);
+    substr($default_mask, $code, 1) = "\0";
+}
 
 1;
+
+__DATA__
+null
+stub
+scalar
+pushmark
+wantarray
+const
+gvsv
+gv
+gelem
+padsv
+padav
+padhv
+padany
+pushre
+rv2gv
+rv2sv
+av2arylen
+rv2cv
+anoncode
+prototype
+refgen
+srefgen
+ref
+bless
+glob
+readline
+rcatline
+regcmaybe
+regcomp
+match
+subst
+substcont
+trans
+sassign
+aassign
+chop
+schop
+chomp
+schomp
+defined
+undef
+study
+pos
+preinc
+i_preinc
+predec
+i_predec
+postinc
+i_postinc
+postdec
+i_postdec
+pow
+multiply
+i_multiply
+divide
+i_divide
+modulo
+i_modulo
+repeat
+add
+i_add
+subtract
+i_subtract
+concat
+stringify
+left_shift
+right_shift
+lt
+i_lt
+gt
+i_gt
+le
+i_le
+ge
+i_ge
+eq
+i_eq
+ne
+i_ne
+ncmp
+i_ncmp
+slt
+sgt
+sle
+sge
+seq
+sne
+scmp
+bit_and
+bit_xor
+bit_or
+negate
+i_negate
+not
+complement
+atan2
+sin
+cos
+rand
+srand
+exp
+log
+sqrt
+int
+hex
+oct
+abs
+length
+substr
+vec
+index
+rindex
+sprintf
+formline
+ord
+chr
+crypt
+ucfirst
+lcfirst
+uc
+lc
+quotemeta
+rv2av
+aelemfast
+aelem
+aslice
+each
+values
+keys
+delete
+exists
+rv2hv
+helem
+hslice
+split
+join
+list
+lslice
+anonlist
+anonhash
+splice
+push
+pop
+shift
+unshift
+reverse
+grepstart
+grepwhile
+mapstart
+mapwhile
+range
+flip
+flop
+and
+or
+xor
+cond_expr
+andassign
+orassign
+method
+entersub
+leavesub
+caller
+warn
+die
+reset
+lineseq
+nextstate
+dbstate
+unstack
+enter
+leave
+scope
+enteriter
+iter
+enterloop
+leaveloop
+return
+last
+next
+redo
+goto
+close
+fileno
+tie
+untie
+dbmopen
+dbmclose
+sselect
+select
+getc
+read
+enterwrite
+leavewrite
+prtf
+print
+sysread
+syswrite
+send
+recv
+eof
+tell
+seek
+truncate
+fcntl
+ioctl
+sockpair
+bind
+connect
+listen
+accept
+shutdown
+gsockopt
+ssockopt
+getsockname
+ftrwrite
+ftsvtx
+open_dir
+readdir
+telldir
+seekdir
+rewinddir
+kill
+getppid
+getpgrp
+setpgrp
+getpriority
+setpriority
+time
+tms
+localtime
+alarm
+dofile
+entereval
+leaveeval
+entertry
+leavetry
+ghbyname
+ghbyaddr
+ghostent
+gnbyname
+gnbyaddr
+gnetent
+gpbyname
+gpbynumber
+gprotoent
+gsbyname
+gsbyport
+gservent
+shostent
+snetent
+sprotoent
+sservent
+ehostent
+enetent
+eprotoent
+eservent
+gpwnam
+gpwuid
+gpwent
+spwent
+epwent
+ggrnam
+ggrgid
+ggrent
+sgrent
+egrent
index ec7abce..8296262 100644 (file)
@@ -91,6 +91,18 @@ opname(...)
            XPUSHs(sv_2mortal(newSVpv(op_name[myopcode], 0)));
        }
 
+void
+opdesc(...)
+    PPCODE:
+       int i, myopcode;
+       for (i = 0; i < items; i++)
+       {
+           myopcode = SvIV(ST(i));
+           if (myopcode < 0 || myopcode >= maxo)
+               croak("opcode out of range");
+           XPUSHs(sv_2mortal(newSVpv(op_desc[myopcode], 0)));
+       }
+
 void
 opcode(...)
     PPCODE:
@@ -99,7 +111,10 @@ opcode(...)
        for (i = 0; i < items; i++)
        {
            op = SvPV(ST(i), na);
-           for (j = 0; j < maxo && strNE(op, op_name[j]); j++) /* nothing */ ;
+           for (j = 0; j < maxo; j++) {
+               if (strEQ(op, op_name[j]) || strEQ(op, op_desc[j]))
+                   break;
+           }
            if (j == maxo)
                croak("bad op name \"%s\"", op);
            XPUSHs(sv_2mortal(newSViv(j)));
index f4850a0..acf167e 100644 (file)
@@ -1,6 +1,6 @@
 use ExtUtils::MakeMaker;
 WriteMakefile(
-    VERSION => 1.5,
+    VERSION_FROM => 'Socket.pm',
     MAN3PODS   => ' ',         # Pods will be built by installman.
     XSPROTOARG => '-noprototypes',             # XXX remove later?
 );
index 6462713..9cc7585 100644 (file)
@@ -1,5 +1,5 @@
 package Socket;
-$VERSION = 1.5;
+$VERSION = $VERSION = "1.5";
 
 =head1 NAME
 
index 5f39849..463c387 100644 (file)
@@ -133,6 +133,7 @@ numer_amg
 oldbufptr
 oldoldbufptr
 op
+op_desc
 op_name
 op_seqmax
 opargs
@@ -268,10 +269,14 @@ yyval
 
 # Functions
 
+Gv_AMupdate
+amagic_call
 append_elem
 append_list
 apply
+assertref
 av_clear
+av_extend
 av_fake
 av_fetch
 av_fill
@@ -288,8 +293,10 @@ block_end
 block_start
 calllist
 cando
+cast_ulong
 check_uni
 checkcomma
+chsize
 ck_aelem
 ck_concat
 ck_eof
@@ -320,17 +327,21 @@ ck_trunc
 convert
 cpytill
 croak
+cv_clone
 cv_undef
+cx_dump
 cxinc
 deb
 deb_growlevel
 debop
+debprofdump
 debstack
 debstackptrs
 deprecate
 die
 die_where
 do_aexec
+do_chomp
 do_chop
 do_close
 do_eof
@@ -346,7 +357,6 @@ do_open
 do_pipe
 do_print
 do_readline
-do_chomp
 do_seek
 do_semop
 do_shmio
@@ -358,10 +368,14 @@ do_vop
 doeval
 dofindlabel
 dopoptoeval
+dounwind
 dowantarray
 dump_all
 dump_eval
+dump_fds
+dump_form
 dump_gv
+dump_mstats
 dump_op
 dump_packsubs
 dump_pm
@@ -370,8 +384,12 @@ fbm_compile
 fbm_instr
 fetch_gv
 fetch_io
+filter_add
+filter_del
+filter_read
 fold_constants
 force_ident
+force_list
 force_next
 force_word
 free_tmps
@@ -380,6 +398,7 @@ gp_free
 gp_ref
 gv_AVadd
 gv_HVadd
+gv_IOadd
 gv_check
 gv_efullname
 gv_fetchfile
@@ -398,13 +417,13 @@ hv_clear
 hv_delete
 hv_exists
 hv_fetch
-hv_stashpv
 hv_iterinit
 hv_iterkey
 hv_iternext
 hv_iternextsv
 hv_iterval
 hv_magic
+hv_stashpv
 hv_store
 hv_undef
 ibcmp
@@ -422,7 +441,9 @@ list
 listkids
 localize
 looks_like_number
+magic_clearenv
 magic_clearpack
+magic_existspack
 magic_get
 magic_getarylen
 magic_getglob
@@ -463,22 +484,29 @@ mg_set
 mod
 modkids
 moreswitches
+mstats
 my
+my_bcopy
+my_bzero
 my_exit
+my_htonl
 my_lstat
+my_memcmp
+my_ntohl
 my_pclose
 my_popen
 my_setenv
 my_stat
+my_swap
 my_unexec
 newANONHASH
 newANONLIST
+newANONSUB
 newASSIGNOP
 newAV
 newAVREF
 newBINOP
 newCONDOP
-newCVOP
 newCVREF
 newFORM
 newFOROP
@@ -492,11 +520,10 @@ newLISTOP
 newLOGOP
 newLOOPEX
 newLOOPOP
-newMETHOD
 newNULLLIST
 newOP
-newPROG
 newPMOP
+newPROG
 newPVOP
 newRANGE
 newRV
@@ -509,11 +536,12 @@ newSVREF
 newSViv
 newSVnv
 newSVpv
+newSVrv
 newSVsv
 newUNOP
 newWHILEOP
-newXSUB
 newXS
+newXSUB
 nextargv
 ninstr
 no_fh_allowed
@@ -533,6 +561,7 @@ pad_sv
 pad_swipe
 peep
 pidgone
+pmflag
 pmruntime
 pmtrans
 pop_return
@@ -559,6 +588,7 @@ pp_bless
 pp_caller
 pp_chdir
 pp_chmod
+pp_chomp
 pp_chop
 pp_chown
 pp_chroot
@@ -742,6 +772,7 @@ pp_pow
 pp_predec
 pp_preinc
 pp_print
+pp_prototype
 pp_prtf
 pp_push
 pp_pushmark
@@ -774,9 +805,9 @@ pp_rv2cv
 pp_rv2gv
 pp_rv2hv
 pp_rv2sv
-pp_chomp
 pp_sassign
 pp_scalar
+pp_schomp
 pp_schop
 pp_scmp
 pp_scope
@@ -817,7 +848,6 @@ pp_spwent
 pp_sqrt
 pp_srand
 pp_srefgen
-pp_schomp
 pp_sselect
 pp_sservent
 pp_ssockopt
@@ -828,7 +858,6 @@ pp_subst
 pp_substcont
 pp_substr
 pp_subtract
-pp_sv2len
 pp_symlink
 pp_syscall
 pp_sysread
@@ -837,6 +866,7 @@ pp_syswrite
 pp_tell
 pp_telldir
 pp_tie
+pp_tied
 pp_time
 pp_tms
 pp_trans
@@ -858,28 +888,28 @@ pp_waitpid
 pp_wantarray
 pp_warn
 pp_xor
+pregcomp
+pregexec
+pregfree
 prepend_elem
 push_return
 push_scope
 q
 ref
 refkids
-pregcomp
 regdump
-pregexec
-pregfree
 regnext
 regprop
 repeatcpy
 rninstr
 run
-savepv
-savepvn
+same_dirent
 save_I32
 save_aptr
 save_ary
 save_clearsv
 save_delete
+save_destructor
 save_freeop
 save_freepv
 save_freesv
@@ -888,10 +918,14 @@ save_hptr
 save_int
 save_item
 save_list
+save_long
 save_nogv
+save_pptr
 save_scalar
 save_sptr
 save_svref
+savepv
+savepvn
 savestack_grow
 sawparens
 scalar
@@ -916,6 +950,7 @@ scope
 screaminstr
 setdefout
 setenv_getix
+sighandler
 skipspace
 stack_grow
 start_subparse
@@ -943,6 +978,7 @@ sv_dec
 sv_dump
 sv_eq
 sv_free
+sv_free_arenas
 sv_gets
 sv_grow
 sv_inc
@@ -953,8 +989,11 @@ sv_len
 sv_magic
 sv_mortalcopy
 sv_newmortal
+sv_newref
 sv_peek
+sv_pvn_force
 sv_ref
+sv_reftype
 sv_replace
 sv_report_used
 sv_reset
@@ -964,9 +1003,12 @@ sv_setptrobj
 sv_setpv
 sv_setpvn
 sv_setref_iv
+sv_setref_nv
 sv_setref_pv
+sv_setref_pvn
 sv_setsv
 sv_unmagic
+sv_unref
 sv_upgrade
 sv_usepvn
 taint_env
@@ -974,6 +1016,8 @@ taint_not
 taint_proper
 too_few_arguments
 too_many_arguments
+unlnk
+utilize
 wait4pid
 warn
 watch
@@ -984,7 +1028,6 @@ xnv_root
 xpv_root
 xrv_root
 yyerror
-yyerror
 yylex
 yyparse
 yywarn
diff --git a/gv.c b/gv.c
index b3faf16..5b61bcc 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -284,6 +284,8 @@ char* name;
                sv_catpvn(tmpstr,"::", 2);
                sv_catpvn(tmpstr, name, nend - name);
                sv_setsv(GvSV(CvGV(cv)), tmpstr);
+               if (tainting)
+                   sv_unmagic(GvSV(CvGV(cv)), 't');
            }
        }
     }
@@ -338,6 +340,9 @@ I32 sv_type;
     bool global = FALSE;
     char *tmpbuf;
 
+    if (*name == '*' && isALPHA(name[1])) /* accidental stringify on a GV? */
+       name++;
+
     for (namend = name; *namend; namend++) {
        if ((*namend == '\'' && namend[1]) ||
            (*namend == ':' && namend[1] == ':'))
@@ -422,7 +427,8 @@ I32 sv_type;
                    sv_type != SVt_PVCV &&
                    sv_type != SVt_PVGV &&
                    sv_type != SVt_PVFM &&
-                   sv_type != SVt_PVIO)
+                   sv_type != SVt_PVIO &&
+                   !(len == 1 && sv_type == SVt_PV && index("ab",*name)) )
                {
                    gvp = (GV**)hv_fetch(stash,name,len,0);
                    if (!gvp ||
@@ -432,10 +438,7 @@ I32 sv_type;
                        stash = 0;
                    else if (sv_type == SVt_PVAV && !GvAV(*gvp) ||
                             sv_type == SVt_PVHV && !GvHV(*gvp) ||
-                            sv_type == SVt_PV &&
-                                (!GvSV(*gvp) ||
-                                   (!SvTYPE(GvSV(*gvp)) &&
-                                    SvREFCNT(GvSV(*gvp)) == 1) ))
+                            sv_type == SVt_PV   && !GvSV(*gvp) )
                    {
                        warn("Variable \"%c%s\" is not exported",
                            sv_type == SVt_PVAV ? '@' :
@@ -1074,7 +1077,7 @@ int flags;
       } else {
         if (off==-1) off=method;
        sprintf(buf, "Operation `%s': no method found,\n\tleft argument %s%.256s,\n\tright argument %s%.256s",
-                     ((char**)AMG_names)[method],
+                     ((char**)AMG_names)[method + assignshift],
                      SvAMAGIC(left)? 
                        "in overloaded package ":
                        "has no overloaded magic",
@@ -1113,7 +1116,7 @@ int flags;
      * to dublicate the contents, probably calling user-supplied
      * version of copy operator
      */
-    if ((method+assignshift==off 
+    if ((method + assignshift==off 
         && (assign || method==inc_amg || method==dec_amg))
        || inc_dec_ass) RvDEEPCP(left);
   }
@@ -1138,7 +1141,7 @@ int flags;
     PUSHs(lr>0? left: right);
     PUSHs( assign ? &sv_undef : (lr>0? &sv_yes: &sv_no));
     if (notfound) {
-      PUSHs( sv_2mortal(newSVpv(((char**)AMG_names)[off],0)) );
+      PUSHs( sv_2mortal(newSVpv(((char**)AMG_names)[method + assignshift],0)) );
     }
     PUSHs((SV*)cv);
     PUTBACK;
index 35fbb5e..6a4c585 100644 (file)
@@ -30,7 +30,7 @@ case "$osvers" in
 *)  # These hints at least work for 4.x, possibly other systems too.
     d_setregid='undef'
     d_setreuid='undef'
-    ccflags='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE'
+    ccflags='-qmaxmem=8192 -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE'
     nm_opt='-B'
     ;;
 esac
@@ -38,7 +38,8 @@ esac
 # The optimizer in 4.1.1 apparently generates bad code for scope.c.
 # Configure doesn't offer an easy way to propagate extra variables
 # only for certain cases, so the following contortion is required:
-scope_cflags='case "$osvers" in 4.1*) optimize=" ";; esac'
+# This is probably not needed in 5.002 and later.
+# scope_cflags='case "$osvers" in 4.1*) optimize=" ";; esac'
 
 # Changes for dynamic linking by Wayne Scott <wscott@ichips.intel.com>
 #
@@ -53,7 +54,12 @@ esac
 # -bI:$(PERL_INC)/perl.exp  Read the exported symbols from the perl binary
 # -bE:$(BASEEXT).exp        Export these symbols.  This file contains only one
 #                           symbol: boot_$(EXP)  can it be auto-generated?
+case "$osvers" in
+3*) 
 lddlflags='-H512 -T512 -bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -e _nostart -lc'
+    ;;
+*) 
+lddlflags='-H512 -T512 -bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -b noentry -lc'
 
-# The '-e _nostart' might not be needed on AIX 4.1, but appears to be
-# harmless.
+;;
+esac
index 733570b..bc54c94 100644 (file)
+# $Id: dgux.sh,v 1.4 1996/01/18 03:40:38 roderick Exp $
+
+# This is a hints file for DGUX, which is Data General's Unix.  It was
+# developed using version 5.4.3.10 of the OS.  I think the gross
+# features should work with versions 5.4.2 through 5.4.4.11 with perhaps
+# minor tweaking, but I don't have any older or newer versions installed
+# at the moment with which to test it.
 #
-# hints file for Data General DG/UX
-# these hints tweaked for perl5 on an AViiON mc88100, running DG/UX 5.4R2.01
+# DGUX is a SVR4 derivative.  It ships with gcc as the standard
+# compiler.  Since version 5.4.3.0 it has shipped with Perl 4.036
+# installed in /usr/bin, which is kind of neat.  Be careful when you
+# install that you don't overwrite the system version, though (by
+# answering yes to the question about installing perl as /usr/bin/perl),
+# as it would suck to try to get support if the vendor learned that you
+# were physically replacing the system binaries.
 #
+# Be aware that if you opt to use dynamic loading you'll need to set
+# your $LD_LIBRARY_PATH to include the source directory when you build,
+# test and install the software.
+#
+# -Roderick Schertler <roderick@gate.net>
 
-gidtype='gid_t'
-groupstype='gid_t'
-libswanted="dgc $libswanted"
-uidtype='uid_t'
-d_index='define'
-ccflags='-D_POSIX_SOURCE -D_DGUX_SOURCE'
-
-# this hasn't been tried with dynamic loading at all
-usedl='false'
 
+# Here are the things from some old DGUX hints files which are different
+# from what's in here now.  I don't know the exact reasons that most of
+# these settings were in the hints files, presumably they can be chalked
+# up to old Configure inadequacies and changes in the OS headers and the
+# like.  These settings might make a good place to start looking if you
+# have problems.
 #
-# an ugly hack, since the Configure test for "gcc -P -" hangs.
-# can't just use 'cppstdin', since our DG has a broken cppstdin :-(
+# This was specified the the 4.036 hints file.  That hints file didn't
+# say what version of the OS it was developed using.
 #
-cppstdin=`cd ..; pwd`/cppstdin
-cpprun=`cd ..; pwd`/cppstdin
-
+#     cppstdin='/lib/cpp'
+#
+# The 4.036 and 5.001 hints files both contained these.  The 5.001 hints
+# file said it was developed with version 5.4.2.01 of DGUX.
+#
+#     gidtype='gid_t'
+#     groupstype='gid_t'
+#     uidtype='uid_t'
+#     d_index='define'
+#     cc='gcc'
+#
+# These were peculiar to the 5.001 hints file.
+#
+#     ccflags='-D_POSIX_SOURCE -D_DGUX_SOURCE'
 #
-# you don't want to use /usr/ucb/cc
+#     # an ugly hack, since the Configure test for "gcc -P -" hangs.
+#     # can't just use 'cppstdin', since our DG has a broken cppstdin :-(
+#     cppstdin=`cd ..; pwd`/cppstdin
+#     cpprun=`cd ..; pwd`/cppstdin
 #
-cc='gcc'
+# One last note:  The 5.001 hints file said "you don't want to use
+# /usr/ucb/cc" in the place at which it set cc to gcc.  That in
+# particular baffles me, as I used to have 5.4.2.01 loaded and my memory
+# is telling me that even then /usr/ucb was a symlink to /usr/bin.
+
+
+# The standard system compiler is gcc, but invoking it as cc changes its
+# behavior.  I have to pick one name or the other so I can get the
+# dynamic loading switches right (they vary depending on this).  I'm
+# picking gcc because there's no way to get at the optimization options
+# and so on when you call it cc.
+case $cc in
+    '')
+       cc=gcc
+       case $optimize in
+           '') optimize=-O2;;
+       esac
+       ;;
+esac
+
+usevfork=true
+
+# DG has this thing set up with symlinks which point to different places
+# depending on environment variables (see elink(5)) and the compiler and
+# related tools use them to access different development environments
+# (COFF, ELF, m88k BCS and so on), see sde(5).  The upshot, however, is
+# that when a normal program tries to access one of these elinks it sees
+# no such file (like stat()ting a mis-directed symlink).  Setting
+# $plibpth to explicitly include the place to which the elinks point
+# allows Configure to find libraries which vary based on the development
+# environment.
+plibpth="$plibpth \
+    ${SDE_PATH:-/usr}/sde/${TARGET_BINARY_INTERFACE:-m88kdgux}/usr/lib"
+
+# Many functions (eg, gethostent(), killpg(), getpriority(), setruid()
+# dbm_*(), and plenty more) are defined in -ldgc.  Usually you don't
+# need to know this (it seems that libdgc.so is searched automatically
+# by ld), but Configure needs to check it otherwise it will report all
+# those functions as missing.
+libswanted="dgc $libswanted"
+
+# Dynamic loading works using the dlopen() functions.  Note that dlfcn.h
+# is broken, it declares _dl*() rather than dl*().  (This is in my
+# I'd-open-a-ticket-about-this-if-it-weren't-going-to-be-such-a-hassle
+# file.)  You can ignore the warnings caused by the missing
+# declarations, they're harmless.
+usedl=true
+# For cc rather than gcc the flags would be `-K PIC' for compiling and
+# -G for loading.  I haven't tested this.
+cccdlflags=-fpic
+lddlflags=-shared
+# The Perl library has to be built as a shared library so that dynamic
+# loading will work (otherwise code loaded with dlopen() won't be able
+# to reference symbols in the main part of perl).  Note that since
+# Configure doesn't normally prompt about $d_shrplib this will cause a
+# `Whoa there!'.  This is normal, just keep the recommended value.  A
+# consequence of all this is that you've got to include the source
+# directory in your LD_LIBRARY_PATH when you're building and testing
+# perl.
+d_shrplib=define
+
+# The system has a function called dg_flock() which is an flock()
+# emulation built using fcntl() locking.  Perl currently comes with an
+# flock() emulation which uses lockf(), it should eventually also
+# include an fcntl() emulation of its own.  Until that happens I
+# recommend using DG's emulation (and ignoring the `WHOA THERE!' this
+# causes), it provides semantics closer to the original than the lockf()
+# emulation.
+ccflags="$ccflags -Dflock=dg_flock"
+d_flock=define
index 3b759cb..4bdb804 100644 (file)
@@ -1,3 +1,7 @@
 # If this doesn't work, try specifying 'none' for hints.
 d_castneg=undef
 libswanted=`echo $libswanted | sed -e 's/socket /socket seq /'`
+
+# Reported by Craig Milo Rogers <Rogers@ISI.EDU>
+# Date: Tue, 30 Jan 96 15:29:26 PST
+d_casti32=undef
index 5b92cac..5027b15 100644 (file)
@@ -1,5 +1,8 @@
 # irix_5.sh
-# Last modified Tue Jan  2 14:52:36 EST 1996
+# Tue Jan  9 16:04:38 EST 1996
+#  Add note about socket patch.
+#
+# Tue Jan  2 14:52:36 EST 1996
 # Apparently, there's a stdio bug that can lead to memory
 # corruption using perl's malloc, but not SGI's malloc.
 usemymalloc='n'
@@ -18,3 +21,14 @@ lddlflags="-shared"
 set `echo X "$libswanted "|sed -e 's/ socket / /' -e 's/ nsl / /' -e 's/ dl / /'`
 shift
 libswanted="$*"
+
+# Date: Fri, 22 Dec 1995 11:49:17 -0800
+# From: Matthew Black <black@csulb.edu>
+# Subject: sockets broken under IRIX 5.3? YES...how to fix
+# Anyone attempting to use perl4 or perl5 with SGI IRIX 5.3 may discover
+# that sockets are essentially broken.  The syslog interface for perl also
+# fails because it uses the broken socket interface.  This problem was
+# reported to SGI as bug #255347 and it can be fixed by installing 
+# patchSG0000596.  The patch can be downloaded from Advantage OnLine (SGI's
+# WWW server) or from the Support Advantage 9/95 Patch CDROM.  Thanks to Tom 
+# Christiansen and others who provided assistance.
index b8dbc25..abe8bbc 100644 (file)
@@ -8,12 +8,8 @@
 #
 # Consolidated by Andy Dougherty <doughera@lafcol.lafayette.edu>
 #
-# Last updated Tue May 30 14:25:02 EDT 1995
-#
-# If you wish to use something other than 'gcc' for your compiler,
-# you should specify it on the Configure command line.  To use
-# gcc-elf, for exmample, type
-# ./Configure -Dcc=gcc-elf
+# Updated Tue May 30 14:25:02 EDT 1995
+# Add ability to use command-line overrides for optinal settings.
 
 # perl goes into the /usr tree.  See the Filesystem Standard
 # available via anonymous FTP at tsx-11.mit.edu in
@@ -23,28 +19,27 @@ case "$prefix" in
 '') prefix='/usr' ;;
 esac
 
-# Perl expects BSD style signal handling.
+# Perl users typically expect BSD style signal handling.
+# This may not be needed in 5.002 since sigaction is used.
 # gcc-2.6.3 defines _G_HAVE_BOOL to 1, but doesn't actually supply bool.
 ccflags="-D__USE_BSD_SIGNAL -Dbool=char -DHAS_BOOL $ccflags"
 
-# The following functions are gcc built-ins, but the Configure tests
-# may fail because they don't supply proper prototypes.
-# This should be fixed as of 5.001f.  I'd appreciate reports.
-d_memcmp=define
-d_memcpy=define
-
 # Configure may fail to find lstat() since it's a static/inline
 # function in <sys/stat.h>.
 d_lstat=define
 
 # Explanation?
-d_dosuid='define'
+case "$d_dosuid" in
+'') d_dosuid='define' ;;
+esac
 
 # I think Configure gets this right now, but I'd appreciate reports.
 malloctype='void *'
 
 # Explanation?
-usemymalloc='n'
+case "$usemymalloc" in
+'') usemymalloc='n' ;;
+esac
 
 case "$optimize" in
 '') optimize='-O2' ;;
@@ -89,6 +84,7 @@ EOM
     # Linux ELF values.
     ccdlflags=' '
     cccdlflags=' '
+    ccflags="-DOVR_DBL_DIG=14 $ccflags"
     so='sa'
     dlext='o'
     ## If you are using DLD 3.2.4 which does not support shared libs,
@@ -119,5 +115,7 @@ fi
 # This will generate a harmless message:
 # Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
 #      Propagating recommended variable d_dbm_open
-d_dbm_open=undef
+case "$d_dbm_open" in
+'') d_dbm_open=undef ;;
+esac
 
index cbf634a..d937128 100644 (file)
@@ -25,3 +25,26 @@ useposix=false
 
 #MachTen might have an incomplete Berkeley DB implementation.
 i_db=$undef
+
+#MachTen versions 2.X have no hard links.  This variable is used
+# by File::Find.
+# This will generate a harmless message:
+# Hmm...You had some extra variables I don't know about...I'll try to keep 'em.
+#      Propagating recommended variable dont_use_nlink
+case "$osver" in
+2*) dont_use_nlink=define ;;
+*) ;;
+esac
+
+case "$osvers" in
+2*)
+       cat <<'EOM' >&4
+
+Tests
+       io/fs test 4  and
+       op/stat test 3
+may fail since MachTen versions 2.X have no hard links.
+
+EOM
+    ;;
+esac
similarity index 92%
rename from hints/powerunix.sh
rename to hints/powerux.sh
index 0878e74..b1c0826 100644 (file)
@@ -1,9 +1,8 @@
-# Hints for the Power UNIX operating system running on Harris NightHawk
+# Hints for the PowerUX operating system running on Harris NightHawk
 # machines.  Written by Tom.Horsley@mail.hcsc.com
 #
 # This config uses dynamic linking and the Harris C compiler.  It has been
-# tested on a Harris 5800 running Power UNIX as well as a (prototype) Harris
-# 6800 running Power UNIX.
+# tested on a Harris 6800 running PowerUX.
 
 # Internally at Harris, we use a source management tool which winds up
 # giving us read-only copies of source trees that are mostly symbolic links.
diff --git a/hv.c b/hv.c
index 852ee16..d9cbe52 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -320,7 +320,9 @@ HV *hv;
     register HE **b;
     register HE *entry;
     register HE **oentry;
+#ifndef STRANGE_MALLOC
     I32 tmp;
+#endif
 
     a = (HE**)xhv->xhv_array;
     nomemok = TRUE;
@@ -337,11 +339,9 @@ HV *hv;
     assert(tmp >= newsize);
     New(2,a, tmp, HE*);
     Copy(xhv->xhv_array, a, oldsize, HE*);
-    if (oldsize >= 64 && *(char*)&xhv->xnv_nv == 0) {
-       sv_add_arena((char*)xhv->xhv_array, oldsize * sizeof(HE*), 0);
-       sv_add_arena(((char*)a) + newsize * sizeof(HE*),
-                    newsize * sizeof(HE*) - MALLOC_OVERHEAD,
-                    SVf_FAKE);
+    if (oldsize >= 64 && !nice_chunk) {
+       nice_chunk = (char*)xhv->xhv_array;
+       nice_chunk_size = oldsize * sizeof(HE*) * 2 - MALLOC_OVERHEAD;
     }
     else
        Safefree(xhv->xhv_array);
@@ -387,7 +387,6 @@ newHV()
     xhv->xhv_max = 7;          /* start with 8 buckets */
     xhv->xhv_fill = 0;
     xhv->xhv_pmroot = 0;
-    *(char*)&xhv->xnv_nv = 0;
     (void)hv_iterinit(hv);     /* so each() will start off right */
     return hv;
 }
@@ -475,14 +474,7 @@ HV *hv;
        return;
     xhv = (XPVHV*)SvANY(hv);
     hfreeentries(hv);
-#ifdef STRANGE_MALLOC
     Safefree(xhv->xhv_array);
-#else
-    if (xhv->xhv_max < 127 || *(char*)&xhv->xnv_nv)
-       Safefree(xhv->xhv_array);
-    else  /* We used last half, so use first half for SV arena too. */
-       sv_add_arena((char*)xhv->xhv_array, (xhv->xhv_max + 1) * sizeof(HE*),0);
-#endif
     if (HvNAME(hv)) {
        Safefree(HvNAME(hv));
        HvNAME(hv) = 0;
@@ -491,7 +483,6 @@ HV *hv;
     xhv->xhv_max = 7;          /* it's a normal associative array */
     xhv->xhv_fill = 0;
     xhv->xhv_keys = 0;
-    *(char*)&xhv->xnv_nv = 1;
 
     if (SvRMAGICAL(hv))
        mg_clear((SV*)hv); 
index 7d4611c..13cb75f 100755 (executable)
@@ -26,7 +26,7 @@ $usage =
        man3ext = $Config{'man3ext'};
        --notify (or -n) just lists commands that would be executed.\n";
 
-GetOptions( qw( man1dir=s man1ext=s man3dir=s man3ext=s notify help)) 
+GetOptions( qw( man1dir=s man1ext=s man3dir=s man3ext=s notify help)) 
        || die $usage;
 die $usage if $opt_help;
 
@@ -36,7 +36,7 @@ $man1ext = defined($opt_man1ext) ? $opt_man1ext : $Config{'man1ext'};
 $man3dir = defined($opt_man3dir) ? $opt_man3dir : $Config{'installman3dir'};
 $man3ext = defined($opt_man3ext) ? $opt_man3ext : $Config{'man3ext'};
 
-$notify = defined($opt_notify) ? $opt_notify : 0;
+$notify = $opt_notify || $opt_n;
 
 #Sanity checks
 
index d60a4dd..da71458 100755 (executable)
@@ -75,7 +75,7 @@ if ($d_shrplib) {
            "  (Installing other things anyway.)\n";
     } else {
        mkpath($shrpdir, 1, 0777);
-       -w $shrpdir     || die "$shrpdir is not writable by you\n";
+       -w $shrpdir     || $nonono || die "$shrpdir is not writable by you\n";
        &cmd("cp libperl*.$so* $shrpdir");
     }
 }
index 8cad64b..801eb41 100644 (file)
@@ -90,8 +90,6 @@ mystack_max
 mystack_sp
 mystrk
 nrs
-nrschar
-nrslen
 ofmt
 ofs
 ofslen
@@ -116,9 +114,6 @@ preprocess
 restartop
 rightgv
 rs
-rschar
-rslen
-rspara
 runlevel
 sawampersand
 sawi
index a764b10..8cb2748 100644 (file)
 #define KEY_pos                        143
 #define KEY_print              144
 #define KEY_printf             145
-#define KEY_push               146
-#define KEY_q                  147
-#define KEY_qq                 148
-#define KEY_quotemeta          149
-#define KEY_qw                 150
-#define KEY_qx                 151
-#define KEY_rand               152
-#define KEY_read               153
-#define KEY_readdir            154
-#define KEY_readline           155
-#define KEY_readlink           156
-#define KEY_readpipe           157
-#define KEY_recv               158
-#define KEY_redo               159
-#define KEY_ref                        160
-#define KEY_rename             161
-#define KEY_require            162
-#define KEY_reset              163
-#define KEY_return             164
-#define KEY_reverse            165
-#define KEY_rewinddir          166
-#define KEY_rindex             167
-#define KEY_rmdir              168
-#define KEY_s                  169
-#define KEY_scalar             170
-#define KEY_seek               171
-#define KEY_seekdir            172
-#define KEY_select             173
-#define KEY_semctl             174
-#define KEY_semget             175
-#define KEY_semop              176
-#define KEY_send               177
-#define KEY_setgrent           178
-#define KEY_sethostent         179
-#define KEY_setnetent          180
-#define KEY_setpgrp            181
-#define KEY_setpriority                182
-#define KEY_setprotoent                183
-#define KEY_setpwent           184
-#define KEY_setservent         185
-#define KEY_setsockopt         186
-#define KEY_shift              187
-#define KEY_shmctl             188
-#define KEY_shmget             189
-#define KEY_shmread            190
-#define KEY_shmwrite           191
-#define KEY_shutdown           192
-#define KEY_sin                        193
-#define KEY_sleep              194
-#define KEY_socket             195
-#define KEY_socketpair         196
-#define KEY_sort               197
-#define KEY_splice             198
-#define KEY_split              199
-#define KEY_sprintf            200
-#define KEY_sqrt               201
-#define KEY_srand              202
-#define KEY_stat               203
-#define KEY_study              204
-#define KEY_sub                        205
-#define KEY_substr             206
-#define KEY_symlink            207
-#define KEY_syscall            208
-#define KEY_sysread            209
-#define KEY_system             210
-#define KEY_syswrite           211
-#define KEY_tell               212
-#define KEY_telldir            213
-#define KEY_tie                        214
-#define KEY_time               215
-#define KEY_times              216
-#define KEY_tr                 217
-#define KEY_truncate           218
-#define KEY_uc                 219
-#define KEY_ucfirst            220
-#define KEY_umask              221
-#define KEY_undef              222
-#define KEY_unless             223
-#define KEY_unlink             224
-#define KEY_unpack             225
-#define KEY_unshift            226
-#define KEY_untie              227
-#define KEY_until              228
-#define KEY_use                        229
-#define KEY_utime              230
-#define KEY_values             231
-#define KEY_vec                        232
-#define KEY_wait               233
-#define KEY_waitpid            234
-#define KEY_wantarray          235
-#define KEY_warn               236
-#define KEY_while              237
-#define KEY_write              238
-#define KEY_x                  239
-#define KEY_xor                        240
-#define KEY_y                  241
+#define KEY_prototype          146
+#define KEY_push               147
+#define KEY_q                  148
+#define KEY_qq                 149
+#define KEY_quotemeta          150
+#define KEY_qw                 151
+#define KEY_qx                 152
+#define KEY_rand               153
+#define KEY_read               154
+#define KEY_readdir            155
+#define KEY_readline           156
+#define KEY_readlink           157
+#define KEY_readpipe           158
+#define KEY_recv               159
+#define KEY_redo               160
+#define KEY_ref                        161
+#define KEY_rename             162
+#define KEY_require            163
+#define KEY_reset              164
+#define KEY_return             165
+#define KEY_reverse            166
+#define KEY_rewinddir          167
+#define KEY_rindex             168
+#define KEY_rmdir              169
+#define KEY_s                  170
+#define KEY_scalar             171
+#define KEY_seek               172
+#define KEY_seekdir            173
+#define KEY_select             174
+#define KEY_semctl             175
+#define KEY_semget             176
+#define KEY_semop              177
+#define KEY_send               178
+#define KEY_setgrent           179
+#define KEY_sethostent         180
+#define KEY_setnetent          181
+#define KEY_setpgrp            182
+#define KEY_setpriority                183
+#define KEY_setprotoent                184
+#define KEY_setpwent           185
+#define KEY_setservent         186
+#define KEY_setsockopt         187
+#define KEY_shift              188
+#define KEY_shmctl             189
+#define KEY_shmget             190
+#define KEY_shmread            191
+#define KEY_shmwrite           192
+#define KEY_shutdown           193
+#define KEY_sin                        194
+#define KEY_sleep              195
+#define KEY_socket             196
+#define KEY_socketpair         197
+#define KEY_sort               198
+#define KEY_splice             199
+#define KEY_split              200
+#define KEY_sprintf            201
+#define KEY_sqrt               202
+#define KEY_srand              203
+#define KEY_stat               204
+#define KEY_study              205
+#define KEY_sub                        206
+#define KEY_substr             207
+#define KEY_symlink            208
+#define KEY_syscall            209
+#define KEY_sysopen            210
+#define KEY_sysread            211
+#define KEY_system             212
+#define KEY_syswrite           213
+#define KEY_tell               214
+#define KEY_telldir            215
+#define KEY_tie                        216
+#define KEY_tied               217
+#define KEY_time               218
+#define KEY_times              219
+#define KEY_tr                 220
+#define KEY_truncate           221
+#define KEY_uc                 222
+#define KEY_ucfirst            223
+#define KEY_umask              224
+#define KEY_undef              225
+#define KEY_unless             226
+#define KEY_unlink             227
+#define KEY_unpack             228
+#define KEY_unshift            229
+#define KEY_untie              230
+#define KEY_until              231
+#define KEY_use                        232
+#define KEY_utime              233
+#define KEY_values             234
+#define KEY_vec                        235
+#define KEY_wait               236
+#define KEY_waitpid            237
+#define KEY_wantarray          238
+#define KEY_warn               239
+#define KEY_while              240
+#define KEY_write              241
+#define KEY_x                  242
+#define KEY_xor                        243
+#define KEY_y                  244
index 8cbaa83..086a109 100755 (executable)
@@ -169,6 +169,7 @@ pop
 pos
 print
 printf
+prototype
 push
 q
 qq
@@ -232,12 +233,14 @@ sub
 substr
 symlink
 syscall
+sysopen
 sysread
 system
 syswrite
 tell
 telldir
 tie
+tied
 time
 times
 tr
index 2d857ba..f30bd24 100644 (file)
@@ -28,6 +28,7 @@ not where carp() was called.
 # exceptions outside of the current package.
 
 $CarpLevel = 0;                # How many extra package levels to skip on carp.
+$MaxEvalLen = 0;       # How much eval '...text...' to show. 0 = all.
 
 require Exporter;
 @ISA = Exporter;
@@ -37,11 +38,24 @@ sub longmess {
     my $error = shift;
     my $mess = "";
     my $i = 1 + $CarpLevel;
-    my ($pack,$file,$line,$sub);
-    while (($pack,$file,$line,$sub) = caller($i++)) {
+    my ($pack,$file,$line,$sub,$eval,$require);
+    while (($pack,$file,$line,$sub,undef,undef,$eval,$require) = caller($i++)) {
        if ($error =~ m/\n$/) {
            $mess .= $error;
        } else {
+           if (defined $eval) {
+               if ($require) {
+                   $sub = "require $eval";
+               } else {
+                   $eval =~ s/[\\\']/\\$&/g;
+            &