This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[inseparable changes from patch from perl5.003_11 to perl5.003_12]
authorPerl 5 Porters <perl5-porters@africa.nicoh.com>
Thu, 19 Dec 1996 04:44:00 +0000 (16:44 +1200)
committerChip Salzenberg <chip@atlantic.net>
Thu, 19 Dec 1996 04:44:00 +0000 (16:44 +1200)
 CORE LANGUAGE CHANGES

Subject: Support C<delete @hash{@keys}>
From: Chip Salzenberg <chip@atlantic.net>
Files: op.c op.h opcode.pl pod/perldiag.pod pod/perlfunc.pod pp.c t/op/delete.t

Subject: Autovivify scalars
From: Chip Salzenberg <chip@atlantic.net>
Files: dump.c op.c op.h pp.c pp_hot.c

 DOCUMENTATION

Subject: Update pods: perldelta -> perlnews, perli18n -> perllocale
From: Tom Christiansen <tchrist@perl.com>
Files: MANIFEST pod/perl.pod pod/perldelta.pod pod/perli18n.pod pod/perlnews.pod

Subject: perltoot.pod
Date: Mon, 09 Dec 1996 07:44:10 -0700
From: Tom Christiansen <tchrist@mox.perl.com>
Files: MANIFEST pod/perltoot.pod
Msg-ID: <199612091444.HAA09947@toy.perl.com>

    (applied based on p5p patch as commit 32e22efaa9ec59b73a208b6c532a0b435e2c6462)

Subject: Perlguts, version 25
Date: Fri, 6 Dec 96 11:40:27 PST
From: Jeff Okamoto <okamoto@hpcc123.corp.hp.com>
Files: pod/perlguts.pod

    private-msgid: <199612061940.AA055461228@hpcc123.corp.hp.com>

Subject: pod patches for English errors
Date: Mon, 09 Dec 1996 13:33:11 -0800
From: Steve Kelem <steve.kelem@xilinx.com>
Files: pod/*.pod
Msg-ID: <24616.850167191@castor>

    (applied based on p5p patch as commit 0135f10892ed8a21c4dbd1fca21fbcc365df99dd)

Subject: Misc doc updates
Date: Sat, 14 Dec 1996 18:56:33 -0700
From: Tom Christiansen <tchrist@mox.perl.com>
Files: pod/*

    Subject: Re: perldelta.pod

    Here are some diffs to the _11 pods.  I forgot to add perldelta to
    perl.pod though.

    And *PLEASE* fix the Artistic License so it no longer has the bogus
    "whomever" misdeclined in the nominative case:

        under the copyright of this Package, but belong to whomever generated
        them, and may be sold commercially, and may be aggregated with this

    It should obviously be "whoever".

    p5p-msgid: <199612150156.SAA12506@mox.perl.com>

 OTHER CORE CHANGES

Subject: Allow assignment to empty array values during foreach()
From: Chip Salzenberg <chip@atlantic.net>
Files: cop.h global.sym mg.c op.c perl.h pp_hot.c proto.h sv.c

Subject: Fix nested closures
From: Chip Salzenberg <chip@atlantic.net>
Files: op.c opcode.pl pp.c pp_ctl.c pp_hot.c

Subject: Fix core dump on auto-vivification
From: Chip Salzenberg <chip@atlantic.net>
Files: pp_hot.c

Subject: Fix core dump on C<open $undef_var, "X">
From: Chip Salzenberg <chip@atlantic.net>
Files: pp_sys.c

Subject: Fix -T/-B on globs and globrefs
From: Chip Salzenberg <chip@atlantic.net>
Files: pp_sys.c

Subject: Fix memory management of $`, $&, and $'
From: Chip Salzenberg <chip@atlantic.net>
Files: pp_hot.c regexec.c

Subject: Fix paren matching during backtracking
From: Chip Salzenberg <chip@atlantic.net>
Files: regexec.c

Subject: Fix memory leak and std{in,out,err} death in perl_{con,de}str
From: Chip Salzenberg <chip@atlantic.net>
Files: miniperlmain.c perl.c perl.h sv.c

Subject: Discard garbage bytes at end of prototype()
From: Chip Salzenberg <chip@atlantic.net>
Files: pp.c

Subject: Fix local($pack::{foo})
From: Chip Salzenberg <chip@atlantic.net>
Files: global.sym pp.c pp_hot.c proto.h scope.c

Subject: Disable warn, die, and parse hooks _before_ global destruction
From: Chip Salzenberg <chip@atlantic.net>
Files: perl.c

Subject: Re: Bug in formline
Date: Sun, 08 Dec 1996 14:58:32 -0500
From: Gurusamy Sarathy <gsar@engin.umich.edu>
Files: pp_ctl.c
Msg-ID: <199612081958.OAA26025@aatma.engin.umich.edu>

    (applied based on p5p patch as commit b386bda18108ba86d0b76ebe2d8745eafa80f39e)

Subject: Fix C<@a = ($a,$b,$c,$d) = (1,2)>
From: Chip Salzenberg <chip@atlantic.net>
Files: pp_hot.c

Subject: Properly support and document newRV{,_inc,_noinc}
From: Chip Salzenberg <chip@atlantic.net>
Files: global.sym pod/perlguts.pod sv.c sv.h

Subject: Allow lvalue pos inside recursive function
From: Chip Salzenberg <chip@atlantic.net>
Files: op.c pp.c pp_ctl.c pp_hot.c

 PORTABILITY

Subject: Make $privlib contents compatible with 5.003
From: Chip Salzenberg <chip@atlantic.net>
Files: INSTALL ext/Opcode/Safe.pm installperl lib/FileHandle.pm lib/Test/Harness.pm

Subject: Support $bincompat3 config variable; update metaconfig units
From: Chip Salzenberg <chip@atlantic.net>
Files: Configure MANIFEST compat3.sym config_h.SH embed.pl global.sym old_embed.pl old_global.sym old_perl_exp.SH perl_exp.SH

Subject: Look for gettimeofday() in Configure
Date: Wed, 11 Dec 1996 15:49:57 +0100
From: John Hughes <john@AtlanTech.COM>
Files: Configure config_H config_h.SH pp.c

    Subject: perl5.003_11, Should base use of gettimeofday on HAS_GETTIMEOFDAY, not I_SYS_TIME

    I've been installing perl5.003_11 on a SCO system that has the TCP/IP runtime
    installed but not the TCP/IP development system.

    Unfortunately the <sys/time.h> include file is included in the TCP/IP runtime
    while libsocket.a is in the development system.

    This means that pp.c decides to use "gettimeofday" because <sys/time.h> is
    present but I can't link the perl that gets compiled.

    So, here's a patch to base the use of "gettimeofday" on "HAS_GETTIMEOFDAY"
    instead of "I_SYS_TIME".  I also took the liberty of removing the special
    case for plan9 (I assume plan9 has <sys/time.h> but no gettimeofday.  Am I
    right?).

    p5p-msgid: <01BBE77A.F6F37F80@malvinas.AtlanTech.COM>

Subject: Make $startperl a relative path if people want portable scrip
From: Chip Salzenberg <chip@atlantic.net>
Files: Configure

Subject: Homogenize use of "eval exec" hack
From: Chip Salzenberg <chip@atlantic.net>
Files: Porting/Glossary eg/README eg/nih eg/sysvipc/ipcmsg eg/sysvipc/ipcsem eg/sysvipc/ipcshm lib/diagnostics.pm makeaperl.SH pod/checkpods.PL pod/perlrun.pod pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL utils/c2ph.PL utils/h2ph.PL utils/h2xs.PL utils/perlbug.PL utils/perldoc.PL utils/pl2pm.PL x2p/a2py.c x2p/find2perl.PL x2p/s2p.PL

Subject: LynxOS support
Date: Thu, 12 Dec 1996 09:25:00 PST
From: Greg Seibert <seibert@Lynx.COM>
Files: Configure MANIFEST hints/lynxos.sh t/op/stat.t
Msg-ID: <m0vYEsY-0000IZC@kzinti.lynx.com>

    (applied based on p5p patch as commit 6693373533b15e559fd8f0f1877e5e6ec15483cc)

Subject: Re: db-recno.t failures with _11 on Freebsd 2.1-stable
Date: 11 Dec 1996 18:58:56 -0500
From: Roderick Schertler <roderick@gate.net>
Files: INSTALL hints/freebsd.sh
Msg-ID: <pzohg0r5tr.fsf@eeyore.ibcinc.com>

    (applied based on p5p patch as commit 10e40321ee752c58e3407b204c74c8049894cb51)

Subject: VMS patches to 5.003_11
Date: Mon, 09 Dec 1996 23:16:10 -0500 (EST)
From: Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
Files: MANIFEST regexec.c t/lib/filehand.t util.c vms/*

    private-msgid: <01ICTR32LCZG001A1D@hmivax.humgen.upenn.edu>

 TESTING

Subject: recurse recurse recurse ...
Date: Mon, 9 Dec 1996 23:44:27 +0200 (EET)
From: Jarkko Hietaniemi <jhi@cc.hut.fi>
Files: MANIFEST t/op/recurse.t

    private-msgid: <199612092144.XAA29025@alpha.hut.fi>

 UTILITIES, LIBRARY, AND EXTENSIONS

Subject: Add CPAN and Net::FTP
From: Chip Salzenberg <chip@atlantic.net>
Files: MANIFEST lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm lib/Net/FTP.pm lib/Net/Netrc.pm lib/Net/Socket.pm pod/perlmod.pod

Subject: Add File::Compare
Date: Mon, 16 Dec 1996 18:44:59 GMT
From: Nick Ing-Simmons <nik@tiuk.ti.com>
Files: MANIFEST lib/File/Compare.pm pod/perlmod.pod
Msg-ID: <199612161844.SAA02152@pluto>

    (applied based on p5p patch as commit ec971c5c328aca84fb827f69f2cc1dc3be81f830)

Subject: Add Tie::RefHash
Date: Sun, 15 Dec 1996 18:58:08 -0500
From: Gurusamy Sarathy <gsar@engin.umich.edu>
Files: MANIFEST lib/Tie/RefHash.pm pod/perlmod.pod
Msg-ID: <199612152358.SAA28665@aatma.engin.umich.edu>

    (applied based on p5p patch as commit 9a079709134ebbf4c935cc8752fdb564e5c82b94)

Subject: Put "splain" in utils.
From: Chip Salzenberg <chip@atlantic.net>
Files: Makefile.SH installperl utils/Makefile utils/splain.PL

Subject: Some h2ph fixes
Date: Fri, 13 Dec 1996 11:34:12 -0800
From: Jeff Okamoto <okamoto@hpcc123.corp.hp.com>
Files: utils/h2ph.PL

    Here is a message regarding changes to h2ph that should probably be folded
    into the 5.004 release.

    p5p-msgid: <199612131934.AA289845652@hpcc123.corp.hp.com>

134 files changed:
Artistic
Changes
Configure
INSTALL
MANIFEST
Makefile.SH
Porting/Glossary
compat3.sym [new file with mode: 0644]
config_H
config_h.SH
cop.h
dump.c
eg/README
eg/nih
eg/sysvipc/ipcmsg
eg/sysvipc/ipcsem
eg/sysvipc/ipcshm
emacs/cperl-mode.el
embed.h
embed.pl
ext/IO/lib/IO/Handle.pm
ext/Opcode/Safe.pm
ext/POSIX/POSIX.xs
global.sym
hints/freebsd.sh
hints/lynxos.sh [new file with mode: 0644]
installperl
lib/CPAN.pm [new file with mode: 0644]
lib/CPAN/FirstTime.pm [new file with mode: 0644]
lib/CPAN/Nox.pm [new file with mode: 0644]
lib/Fatal.pm
lib/File/Compare.pm [new file with mode: 0644]
lib/FileHandle.pm
lib/Getopt/Long.pm
lib/Net/FTP.pm [new file with mode: 0644]
lib/Net/Netrc.pm [new file with mode: 0644]
lib/Net/Socket.pm [new file with mode: 0644]
lib/Test/Harness.pm
lib/Tie/RefHash.pm [new file with mode: 0644]
lib/blib.pm
lib/diagnostics.pm
makeaperl.SH
malloc.c
mg.c
miniperlmain.c
op.c
op.h
opcode.h
opcode.pl
patchlevel.h
perl.c
perl.h
perl_exp.SH
perly.c
perly.c.diff
perly.y
pod/checkpods.PL
pod/perl.pod
pod/perlapio.pod
pod/perlbot.pod
pod/perlcall.pod
pod/perldata.pod
pod/perldebug.pod
pod/perldiag.pod
pod/perldsc.pod
pod/perlembed.pod
pod/perlform.pod
pod/perlfunc.pod
pod/perlguts.pod
pod/perllocale.pod [new file with mode: 0644]
pod/perllol.pod
pod/perlmod.pod
pod/perlnews.pod [new file with mode: 0644]
pod/perlobj.pod
pod/perlop.pod
pod/perlpod.pod
pod/perlre.pod
pod/perlref.pod
pod/perlrun.pod
pod/perlsec.pod
pod/perlstyle.pod
pod/perlsub.pod
pod/perlsyn.pod
pod/perltie.pod
pod/perltoc.pod
pod/perltoot.pod [new file with mode: 0644]
pod/perltrap.pod
pod/perlvar.pod
pod/perlxs.pod
pod/perlxstut.pod
pod/pod2html.PL
pod/pod2latex.PL
pod/pod2man.PL
pod/pod2text.PL
pp.c
pp_ctl.c
pp_hot.c
pp_sys.c
proto.h
regexec.c
scope.c
sv.c
sv.h
t/lib/filehand.t
t/op/delete.t
t/op/recurse.t
t/op/stat.t
util.c
utils/Makefile
utils/c2ph.PL
utils/h2ph.PL
utils/h2xs.PL
utils/perlbug.PL
utils/perldoc.PL
utils/pl2pm.PL
utils/splain.PL [new file with mode: 0644]
vms/Makefile
vms/descrip.mms
vms/ext/DCLsym/0README.txt [new file with mode: 0644]
vms/ext/DCLsym/DCLsym.pm [new file with mode: 0644]
vms/ext/DCLsym/DCLsym.xs [new file with mode: 0644]
vms/ext/DCLsym/Makefile.PL [new file with mode: 0644]
vms/ext/DCLsym/test.pl [new file with mode: 0644]
vms/ext/Stdio/Stdio.pm
vms/ext/Stdio/Stdio.xs
vms/ext/Stdio/test.pl
vms/genopt.com
vms/perly_c.vms
vms/perly_h.vms
vms/vms.c
vms/vmsish.h
x2p/a2py.c
x2p/find2perl.PL
x2p/s2p.PL

index 11f4d82..5f22124 100644 (file)
--- a/Artistic
+++ b/Artistic
@@ -97,7 +97,7 @@ interpreter is so embedded.
 
 6. The scripts and library files supplied as input to or produced as
 output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whomever generated
+under the copyright of this Package, but belong to whoever generated
 them, and may be sold commercially, and may be aggregated with this
 Package.  If such scripts or library files are aggregated with this
 Package via the so-called "undump" or "unexec" methods of producing a
diff --git a/Changes b/Changes
index 51d876d..dff8dff 100644 (file)
--- a/Changes
+++ b/Changes
@@ -8,6 +8,281 @@ or in the .../src/5/0/unsupported directory for sub-version
 releases.)
 
 ----------------
+Version 5.003_12
+----------------
+
+This patch is huge.  A multitude of bug fixes, new modules (especially
+CPAN and Net::FTP), a couple of new Configure variables, updated
+docs...  it's a long list.  And speaking of lists, here's a list of
+the more significant changes in 5.003_12:
+
+ CORE LANGUAGE CHANGES
+
+  Title:  "Support C<delete @hash{@keys}>"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  op.c op.h opcode.pl pod/perldiag.pod pod/perlfunc.pod pp.c
+          t/op/delete.t
+
+  Title:  "Autovivify scalars"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  dump.c op.c op.h pp.c pp_hot.c
+
+  Title:  "Allow any word, including keyword, as label"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  toke.c
+
+ OTHER CORE CHANGES
+
+  Title:  "Allow assignment to empty array values during foreach()"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  cop.h global.sym mg.c op.c perl.h pp_hot.c proto.h sv.c
+
+  Title:  "Fix nested closures"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  op.c opcode.pl pp.c pp_ctl.c pp_hot.c
+
+  Title:  "Fix core dump on auto-vivification"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  pp_hot.c
+
+  Title:  "Fix core dump on C<open $undef_var, "X">"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  pp_sys.c
+
+  Title:  "Fix -T/-B on globs and globrefs"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  pp_sys.c
+
+  Title:  "Fix memory management of $`, $&, and $'"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  pp_hot.c regexec.c
+
+  Title:  "Fix paren matching during backtracking"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  regexec.c
+
+  Title:  "Fix memory leak and std{in,out,err} death in perl_{con,de}str
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  miniperlmain.c perl.c perl.h sv.c
+
+  Title:  "Discard garbage bytes at end of prototype()"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  pp.c
+
+  Title:  "Fix local($pack::{foo})"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  global.sym pp.c pp_hot.c proto.h scope.c
+
+  Title:  "Fix for AmigaOS - inplace operation"
+   From:  "Norbert Pueschel" <pueschel@imsdd.meb.uni-bonn.de>
+ Msg-ID:  <77724601@Armageddon.meb.uni-bonn.de>
+   Date:  Sun, 08 Dec 1996 15:33:00 +0100
+  Files:  doio.c
+
+  Title:  "Disable warn, die, and parse hooks _before_ global destruction
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  perl.c
+
+  Title:  "Re: Bug in formline "
+   From:  Gurusamy Sarathy <gsar@engin.umich.edu>
+ Msg-ID:  <199612081958.OAA26025@aatma.engin.umich.edu>
+   Date:  Sun, 08 Dec 1996 14:58:32 -0500
+  Files:  pp_ctl.c
+
+  Title:  "Fix C<@a = ($a,$b,$c,$d) = (1,2)>"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  pp_hot.c
+
+  Title:  "Fix %ENV assignment when environment starts out empty"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  hv.c
+
+  Title:  "Properly support and document newRV{,_inc,_noinc}"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  global.sym pod/perlguts.pod sv.c sv.h
+
+  Title:  "Support SvREADONLY on arrays"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  av.c
+
+  Title:  "Allow lvalue pos inside recursive function"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  op.c pp.c pp_ctl.c pp_hot.c
+
+ PORTABILITY
+
+  Title:  "Eliminate PerlIO warnings when setting cnt to -1"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  perlio.c
+
+  Title:  "Make $privlib contents compatible with 5.003"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  INSTALL ext/Opcode/Safe.pm installperl lib/FileHandle.pm
+          lib/Test/Harness.pm
+
+  Title:  "Support $bincompat3 config variable; update metaconfig units"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  Configure MANIFEST compat3.sym config_h.SH embed.pl global.sym
+          old_embed.pl old_global.sym old_perl_exp.SH perl_exp.SH
+
+  Title:  "Look for gettimeofday() in Configure"
+   From:  John Hughes <john@AtlanTech.COM>
+ Msg-ID:  <01BBE77A.F6F37F80@malvinas.AtlanTech.COM>
+   Date:  Wed, 11 Dec 1996 15:49:57 +0100
+  Files:  Configure config_H config_h.SH pp.c
+
+  Title:  "Make $startperl a relative path if people want portable scrip
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  Configure
+
+  Title:  "Homogenize use of "eval exec" hack"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  Porting/Glossary eg/README eg/nih eg/sysvipc/ipcmsg
+          eg/sysvipc/ipcsem eg/sysvipc/ipcshm lib/diagnostics.pm
+          makeaperl.SH pod/checkpods.PL pod/perlrun.pod
+          pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL
+          pod/pod2text.PL utils/c2ph.PL utils/h2ph.PL utils/h2xs.PL
+          utils/perlbug.PL utils/perldoc.PL utils/pl2pm.PL x2p/a2py.c
+          x2p/find2perl.PL x2p/s2p.PL
+
+  Title:  "LynxOS support"
+   From:  seibert@Lynx.COM (Greg Seibert)
+ Msg-ID:  <m0vYEsY-0000IZC@kzinti.lynx.com>
+   Date:  Thu, 12 Dec 1996 09:25:00 PST
+  Files:  Configure MANIFEST hints/lynxos.sh t/op/stat.t
+
+  Title:  "In Linux hints, set suidsafe=no and dosuid=yes"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  hints/linux.sh
+
+  Title:  "5.003_11 on UnixWare 2.1.1 - Only one small UnixWare buglet"
+   From:  aburlison@cix.compulink.co.uk (Alan Burlison)
+ Msg-ID:  <memo.453720@cix.compulink.co.uk>
+   Date:  Wed, 11 Dec 96 18:34 GMT0
+  Files:  hints/svr4.sh
+
+  Title:  "Re: db-recno.t failures with _11 on Freebsd 2.1-stable"
+   From:  Roderick Schertler <roderick@gate.net>
+ Msg-ID:  <pzohg0r5tr.fsf@eeyore.ibcinc.com>
+   Date:  11 Dec 1996 18:58:56 -0500
+  Files:  INSTALL hints/freebsd.sh
+
+  Title:  "OS/2 updates from Ilya"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+  Files:  README.os2 os2/Changes os2/Makefile.SHs os2/os2.c os2/os2ish.h
+
+  Title:  "VMS patches to 5.003_11"
+   From:  Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
+ Msg-ID:  <01ICTR32LCZG001A1D@hmivax.humgen.upenn.edu>
+   Date:  Mon, 09 Dec 1996 23:16:10 -0500 (EST)
+  Files:  MANIFEST regexec.c t/lib/filehand.t util.c vms/*
+
+ TESTING
+
+  Title:  "recurse recurse recurse ..."
+   From:  Jarkko Hietaniemi <jhi@cc.hut.fi>
+ Msg-ID:  <199612092144.XAA29025@alpha.hut.fi>
+   Date:  Mon, 9 Dec 1996 23:44:27 +0200 (EET)
+  Files:  MANIFEST t/op/recurse.t
+
+ UTILITIES, LIBRARY, AND EXTENSIONS
+
+  Title:  "Add CPAN and Net::FTP"
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  MANIFEST lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm
+          lib/Net/FTP.pm lib/Net/Netrc.pm lib/Net/Socket.pm
+          pod/perlmod.pod
+
+  Title:  "Please update Text::Wrap and Text::Tabs"
+   From:  David Muir Sharnoff <muir@idiom.com>
+ Msg-ID:  <199612180659.WAA24957@idiom.com>
+   Date:  Tue, 17 Dec 1996 22:59:59 -0800 (PST)
+  Files:  lib/Text/Tabs.pm lib/Text/Wrap.pm
+
+  Title:  "Add File::Compare"
+   From:  Nick Ing-Simmons <nik@tiuk.ti.com>
+ Msg-ID:  <199612161844.SAA02152@pluto>
+   Date:  Mon, 16 Dec 1996 18:44:59 GMT
+  Files:  MANIFEST lib/File/Compare.pm pod/perlmod.pod
+
+  Title:  "Add Tie::RefHash"
+   From:  Gurusamy Sarathy <gsar@engin.umich.edu>
+ Msg-ID:  <199612152358.SAA28665@aatma.engin.umich.edu>
+   Date:  Sun, 15 Dec 1996 18:58:08 -0500
+  Files:  MANIFEST lib/Tie/RefHash.pm pod/perlmod.pod
+
+  Title:  "Put "splain" in utils."
+   From:  Chip Salzenberg <chip@atlantic.net>
+  Files:  Makefile.SH installperl utils/Makefile utils/splain.PL
+
+  Title:  "Some h2ph fixes"
+   From:  Jeff Okamoto <okamoto@hpcc123.corp.hp.com>
+ Msg-ID:  <199612131934.AA289845652@hpcc123.corp.hp.com>
+   Date:  Fri, 13 Dec 1996 11:34:12 -0800
+  Files:  utils/h2ph.PL
+
+  Title:  "xsubpp patch to add #line"
+   From:  nick@ni-s.u-net.com (Nick Ing-Simmons)
+ Msg-ID:  <199612162153.VAA03590@ni-s.u-net.com>
+   Date:  Mon, 16 Dec 1996 21:53:56 GMT
+  Files:  lib/ExtUtils/xsubpp
+
+  Title:  "Re: Proposed addition to File::Copy: move"
+   From:  Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>
+ Msg-ID:  <01ICZBN0LRC8001A1D@hmivax.humgen.upenn.edu>
+   Date:  Sat, 14 Dec 1996 00:27:29 -0500 (EST)
+  Files:  lib/File/Copy.pm t/lib/filecopy.t
+
+  Title:  "DB_File 1.09 patch"
+   From:  pmarquess@bfsec.bt.co.uk (Paul Marquess)
+ Msg-ID:  <9612181037.AA10123@claudius.bfsec.bt.co.uk>
+   Date:  Wed, 18 Dec 96 10:37:58 GMT
+  Files:  ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs
+
+  Title:  "Debugger update"
+   From:  Ilya Zakharevich <ilya@math.ohio-state.edu>
+ Msg-ID:  <199612111038.FAA24363@monk.mps.ohio-state.edu>
+   Date:  Wed, 11 Dec 1996 05:38:28 -0500 (EST)
+  Files:  lib/perl5db.pl
+
+ DOCUMENTATION
+
+  Title:  "Update pods: perldelta -> perlnews, perli18n -> perllocale"
+   From:  Tom Christiansen and Dominic Dunlop
+  Files:  MANIFEST pod/perl.pod pod/perldelta.pod pod/perli18n.pod
+          pod/perlnews.pod
+
+  Title:  "perltoot.pod"
+   From:  Tom Christiansen <tchrist@mox.perl.com>
+ Msg-ID:  <199612091444.HAA09947@toy.perl.com>
+   Date:  Mon, 09 Dec 1996 07:44:10 -0700
+  Files:  MANIFEST pod/perltoot.pod
+
+  Title:  "Perlguts, version 25"
+   From:  Jeff Okamoto <okamoto@hpcc123.corp.hp.com>
+ Msg-ID:  <199612061940.AA055461228@hpcc123.corp.hp.com>
+   Date:  Fri, 6 Dec 96 11:40:27 PST
+  Files:  pod/perlguts.pod
+
+  Title:  "pod/perlipc.pod patch"
+   From:  d-lewart@uiuc.edu (Daniel S. Lewart)
+ Msg-ID:  <199612090910.CAA20906@mox.perl.com>
+   Date:  Mon, 9 Dec 96 3:10:02 CST
+  Files:  pod/perlipc.pod
+
+  Title:  "pod patches for English errors"
+   From:  Steve Kelem <steve.kelem@xilinx.com>
+ Msg-ID:  <24616.850167191@castor>
+   Date:  Mon, 09 Dec 1996 13:33:11 -0800
+  Files:  pod/*.pod
+
+  Title:  "Misc doc updates"
+   From:  Tom Christiansen <tchrist@mox.perl.com>
+ Msg-ID:  <199612150156.SAA12506@mox.perl.com>
+   Date:  Sat, 14 Dec 1996 18:56:33 -0700
+  Files:  pod/*
+
+----------------
 Version 5.003_11
 ----------------
 
index f9bb490..c8ee9f6 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $
 #
-# Generated on Thu Oct 10 15:08:34 EDT 1996 [metaconfig 3.0 PL60]
+# Generated on Tue Dec 17 14:33:33 EST 1996 [metaconfig 3.0 PL60]
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -227,6 +227,8 @@ baserev=''
 bin=''
 binexp=''
 installbin=''
+bincompat3=''
+d_bincompat3=''
 byteorder=''
 cc=''
 gccversion=''
@@ -284,6 +286,8 @@ d_flexfnam=''
 d_flock=''
 d_fork=''
 d_fsetpos=''
+d_ftime=''
+d_gettimeod=''
 d_Gconvert=''
 d_getgrps=''
 d_gethent=''
@@ -773,7 +777,7 @@ case "$sh" in
 '')    cat <<EOM >&2
 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
 Usually it's in /bin/sh.  How did you even get this far?
-Please contact me (Andy Dougherty) at doughera@lafcol.lafayette.edu and 
+Please contact me (Chip Salzenberg) at chip@atlantic.net and 
 we'll try to straigten this all out.
 EOM
        exit 1
@@ -849,11 +853,11 @@ cat >>extract <<'EOS'
 CONFIG=true
 echo "Doing variable substitutions on .SH files..."
 if test -f MANIFEST; then
-       shlist=`awk '!/^old_/ {print $1}' <MANIFEST | grep '\.SH$'`
+       shlist=`awk '{print $1}' <MANIFEST | grep '\.SH'`
        : Pick up possible extension manifests.
        for dir in ext/* ; do
                if test -f $dir/MANIFEST; then
-                       xxx=`awk '!/^old_/ {print $1}' < $dir/MANIFEST | 
+                       xxx=`awk '{print $1}' < $dir/MANIFEST | 
                                sed -n "/\.SH$/ s@^@$dir/@p"`
                        shlist="$shlist $xxx"
                fi
@@ -861,7 +865,7 @@ if test -f MANIFEST; then
        set x $shlist
 else
        echo "(Looking for .SH files under the current directory.)"
-       set x `find . -name "*.SH" -print | grep -v '/old_'`
+       set x `find . -name "*.SH" -print`
 fi
 shift
 case $# in
@@ -1141,7 +1145,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 (doughera@lafcol.lafayette.edu).
+and contact the author (chip@atlantic.net).
 
 EOM
                echo $n "Continue? [n] $c" >&4
@@ -1341,7 +1345,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 (doughera@lafcol.lafayette.edu) know how I blew it.
+have, let me (chip@atlantic.net) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -1631,13 +1635,14 @@ 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 doughera@lafcol.lafayette.edu
+       : tests or hints, please send them to chip@atlantic.net
        : The metaconfig authors would also appreciate a copy...
        $test -f /irix && osname=irix
        $test -f /xenix && osname=sco_xenix
        $test -f /dynix && osname=dynix
        $test -f /dnix && osname=dnix
-       $test -f /unicos && osname=unicos && osvers=`$uname -r`
+       $test -f /lynx.os && osname=lynxos
+       $test -f /unicos && osname=unicos && osvers=`$uname -r`
        $test -f /bin/mips && /bin/mips && osname=mips
        $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
                $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
@@ -1781,7 +1786,7 @@ EOM
                $2) case "$osname" in
                        *isc*) ;;
                        *freebsd*) ;;
-                       svr*)
+                       svr*)
                                : svr4.x or possibly later
                                case "svr$3" in 
                                ${osname}*)
@@ -2020,7 +2025,8 @@ if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
        tarch=`arch`"-$osname"
 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
        if uname -m > tmparch 2>&1 ; then
-               tarch=`$sed -e 's/ /_/g' -e 's/_*$//' -e 's/$/'"-$osname/" tmparch`
+               tarch=`$sed -e 's/ *$//' -e 's/ /_/g'
+                       -e 's/$/'"-$osname/" tmparch`
        else
                tarch="$osname"
        fi
@@ -2418,7 +2424,7 @@ else
 fi
 
 : set the base revision
-baserev=5.0
+baserev=5
 
 : get the patchlevel
 echo " "
@@ -2430,7 +2436,12 @@ else
        patchlevel=0
        subversion=0
 fi
-$echo $n "(You have $package $baserev patchlevel $patchlevel" $c
+$echo $n "(You have $package" $c
+case "$package" in
+"*$baserev")   ;;
+*)             $echo $n " $baserev" $c ;;
+esac
+$echo $n " patchlevel $patchlevel" $c
 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
 echo ".)"
 
@@ -2523,6 +2534,33 @@ $undef$define) . ./whoa; eval "$var=\$tu";;
 *) eval "$var=$val";;
 esac'
 
+$cat <<EOM
+
+Perl 5.004 can be compiled for binary compatibility with 5.003.
+If you decide to do so, you will be able to continue using any
+extensions that were compiled for Perl 5.003.  However, binary
+compatibility forces Perl to expose some of its internal symbols
+in the same way that 5.003 did.  So you may have symbol conflicts
+if you embed a binary-compatible Perl in other programs.
+
+EOM
+case "$d_bincompat3" in
+"$undef") dflt=n ;;
+*) dflt=y ;;
+esac
+rp='Binary compatibility with Perl 5.003?'
+. ./myread
+case "$ans" in
+y*) val="$define" ;;
+*)  val="$undef" ;;
+esac
+set d_bincompat3
+eval $setvar
+case "$d_bincompat3" in
+"$define") bincompat3=y ;;
+*) bincompat3=n ;;
+esac
+
 : make some quick guesses about what we are up against
 echo " "
 $echo $n "Hmm...  $c"
@@ -3219,6 +3257,25 @@ none) libpth=' ';;
 *) libpth="$ans";;
 esac
 
+: Define several unixisms. Hints files or command line options
+: can be used to override them.
+case "$ar" in
+'') ar='ar';;
+esac
+case "$lib_ext" in
+'') lib_ext='.a';;
+esac
+case "$obj_ext" in
+'') obj_ext='.o';;
+esac
+case "$path_sep" in
+'') path_sep=':';;
+esac
+: Which makefile gets called first.  This is used by make depend.
+case "$firstmakefile" in
+'') firstmakefile='makefile';;
+esac
+
 : compute shared library extension
 case "$so" in
 '')
@@ -3241,11 +3298,6 @@ rp='What is the file extension used for shared libraries?'
 . ./myread
 so="$ans"
 
-: If no lib_ext yet, assume '.a'.
-case "$lib_ext" in
-'') lib_ext='.a';;
-esac
-
 : Looking for optional libraries
 echo " "
 echo "Checking for optional libraries..." >&4
@@ -3270,25 +3322,25 @@ for thislib in $libswanted; do
                *"-l$thislib "*);;
                *) dflt="$dflt -l$thislib";;
                esac
-       elif xxx=`./loc lib$thislib${lib_ext} X $libpth`; $test -f "$xxx"; then
+       elif xxx=`./loc lib$thislib$lib_ext X $libpth`; $test -f "$xxx"; then
                echo "Found -l$thislib."
                case " $dflt " in
                *"-l$thislib "*);;
                *) dflt="$dflt -l$thislib";;
                esac
-       elif xxx=`./loc $thislib${lib_ext} X $libpth`; $test -f "$xxx"; then
+       elif xxx=`./loc $thislib$lib_ext X $libpth`; $test -f "$xxx"; then
                echo "Found -l$thislib."
                case " $dflt " in
                *"-l$thislib "*);;
                *) dflt="$dflt -l$thislib";;
                esac
-       elif xxx=`./loc lib${thislib}_s${lib_ext} X $libpth`; $test -f "$xxx"; then
+       elif xxx=`./loc lib${thislib}_s$lib_ext X $libpth`; $test -f "$xxx"; then
                echo "Found -l${thislib}_s."
                case " $dflt " in
                *"-l$thislib "*);;
                *) dflt="$dflt -l${thislib}_s";;
                esac
-       elif xxx=`./loc Slib$thislib${lib_ext} X $xlibpth`; $test -f "$xxx"; then
+       elif xxx=`./loc Slib$thislib$lib_ext X $xlibpth`; $test -f "$xxx"; then
                echo "Found -l$thislib."
                case " $dflt " in
                *"-l$thislib "*);;
@@ -3546,7 +3598,6 @@ if ./osf1; then
 else
        set signal.h LANGUAGE_C; eval $inctest
 fi
-set signal.h NO_PROTOTYPE; eval $inctest
 set signal.h _NO_PROTO; eval $inctest
 
 case "$hint" in
@@ -3839,7 +3890,7 @@ echo " "
 case "$libc" in
 '') libc=unknown
        case "$libs" in
-       *-lc_s*) libc=`./loc libc_s${lib_ext} $libc $libpth`
+       *-lc_s*) libc=`./loc libc_s$lib_ext $libc $libpth`
        esac
        ;;
 esac
@@ -3857,15 +3908,13 @@ case "$libs" in
                        :
                elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
                        :
-               elif try=`./loc lib$thislib${lib_ext} X $libpth`; $test -f "$try"; then
-                       :
-               elif try=`./loc $thislib${lib_ext} X $libpth`; $test -f "$try"; then
+               elif try=`./loc lib$thislib$lib_ext X $libpth`; $test -f "$try"; then
                        :
                elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
                        :
                elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
                        :
-               elif try=`./loc Slib$thislib${lib_ext} X $xlibpth`; $test -f "$try"; then
+               elif try=`./loc Slib$thislib$lib_ext X $xlibpth`; $test -f "$try"; then
                        :
                else
                        try=''
@@ -3896,7 +3945,7 @@ unknown)
                eval set \$$#
        done
        $test -r $1 || set /usr/ccs/lib/libc.$so
-       $test -r $1 || set /lib/libsys_s.a
+       $test -r $1 || set /lib/libsys_s$lib_ext
        ;;
 *)
        set blurfl
@@ -3915,25 +3964,25 @@ elif $test -r /lib/libc && $test -r /lib/clib; then
        fi
 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
        echo "Your C library seems to be in $libc, as you said before."
-elif $test -r $incpath/usr/lib/libc${lib_ext}; then
-       libc=$incpath/usr/lib/libc${lib_ext};
+elif $test -r $incpath/usr/lib/libc$lib_ext; then
+       libc=$incpath/usr/lib/libc$lib_ext;
        echo "Your C library seems to be in $libc.  That's fine."
-elif $test -r /lib/libc${lib_ext}; then
-       libc=/lib/libc${lib_ext};
+elif $test -r /lib/libc$lib_ext; then
+       libc=/lib/libc$lib_ext;
        echo "Your C library seems to be in $libc.  You're normal."
 else
-       if tans=`./loc libc${lib_ext} blurfl/dyick $libpth`; $test -r "$tans"; then
+       if tans=`./loc libc$lib_ext blurfl/dyick $libpth`; $test -r "$tans"; then
                :
        elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
                libnames="$libnames "`./loc clib blurfl/dyick $libpth`
        elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
                :
-       elif tans=`./loc Slibc${lib_ext} blurfl/dyick $xlibpth`; $test -r "$tans"; then
+       elif tans=`./loc Slibc$lib_ext blurfl/dyick $xlibpth`; $test -r "$tans"; then
                :
-       elif tans=`./loc Mlibc${lib_ext} blurfl/dyick $xlibpth`; $test -r "$tans"; then
+       elif tans=`./loc Mlibc$lib_ext blurfl/dyick $xlibpth`; $test -r "$tans"; then
                :
        else
-               tans=`./loc Llibc${lib_ext} blurfl/dyick $xlibpth`
+               tans=`./loc Llibc$lib_ext blurfl/dyick $xlibpth`
        fi
        if $test -r "$tans"; then
                echo "Your C library seems to be in $tans, of all places."
@@ -4087,22 +4136,6 @@ fi
 esac
 $rm -f libnames libpath
 
-: Define several unixisms. Hints files or command line options
-: can be used to override them.
-case "$ar" in
-'') ar='ar';;
-esac
-case "$obj_ext" in
-'') obj_ext='.o';;
-esac
-case "$path_sep" in
-'') path_sep=':';;
-esac
-: Which makefile gets called first.  This is used by make depend.
-case "$firstmakefile" in
-'') firstmakefile='makefile';;
-esac
-
 : determine filename position in cpp output
 echo " "
 echo "Computing filename position in cpp output for #include directives..." >&4
@@ -4608,7 +4641,7 @@ case "$shrpdir" in
 *)     $cat >&4 <<EOM
 WARNING:  Use of the shrpdir variable for the installation location of
 the shared $libperl is not supported.  It was never documented and
-will not work in this version.  Let me (doughera@lafcol.lafayette.edu)
+will not work in this version.  Let me (chip@atlantic.net)
 know of any problems this may cause.
 
 EOM
@@ -5216,6 +5249,63 @@ rp='Perl administrator e-mail address'
 . ./myread
 perladmin="$ans"
 
+: figure out how to guarantee perl startup
+case "$startperl" in
+'')
+       case "$sharpbang" in
+       *!)
+               $cat <<EOH
+
+I can use the #! construct to start perl on your system. This will
+make startup of perl scripts faster, but may cause problems if you
+want to share those scripts and perl is not in a standard place
+($binexp/perl) on all your platforms. The alternative is to force
+a shell by starting the script with a single ':' character.
+
+EOH
+               dflt="$binexp/perl"
+               rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
+               . ./myread
+               case "$ans" in
+               none) startperl=": # use perl";;
+               *) startperl="#!$ans";;
+               esac
+               ;;
+       *) startperl=": # use perl"
+               ;;
+       esac
+       ;;
+esac
+echo "I'll use $startperl to start perl scripts."
+
+: figure best path for perl in scripts
+case "$perlpath" in
+'')
+       perlpath="$binexp/perl"
+       case "$startperl" in
+       *!*) ;;
+       *)
+               $cat <<EOH
+
+I will use the "eval 'exec'" idiom to start Perl on your system.
+I can use the full path of your Perl binary for this purpose, but
+doing so may cause problems if you want to share those scripts and
+Perl is not always in a standard place ($binexp/perl).
+
+EOH
+               dflt="$binexp/perl"
+               rp="What path shall I use in \"eval 'exec'\"?"
+               . ./myread
+               perlpath="$ans"
+               ;;
+       esac
+       ;;
+esac
+case "$startperl" in
+*!*)   ;;
+*)     echo "I'll use $perlpath in \"eval 'exec'\"" ;;
+esac
+
 : determine where public executable scripts go
 set scriptdir scriptdir
 eval $prefixit
@@ -5269,40 +5359,6 @@ else
        installscript="$scriptdirexp"
 fi
 
-: determine perl absolute location
-case "$perlpath" in
-'')    perlpath=$binexp/perl ;;
-esac
-
-: figure out how to guarantee perl startup
-case "$startperl" in
-'')
-       case "$sharpbang" in
-       *!)
-               $cat <<EOH
-
-I can use the #! construct to start perl on your system. This will
-make startup of perl scripts faster, but may cause problems if you
-want to share those scripts and perl is not in a standard place
-($perlpath) on all your platforms. The alternative is to force
-a shell by starting the script with a single ':' character.
-
-EOH
-               dflt=$perlpath
-               rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
-               . ./myread
-               case "$ans" in
-               none) startperl=": # use perl";;
-               *) startperl="#!$ans";;
-               esac
-               ;;
-       *) startperl=": # use perl"
-               ;;
-       esac
-       ;;
-esac
-echo "I'll use $startperl to start perl scripts."
-
 cat <<EOM
 
 Previous version of $package used the standard IO mechanisms as defined in
@@ -5911,19 +5967,19 @@ if set crypt val -f d_crypt; eval $csym; $val; then
        val="$define"
        cryptlib=''
 else
-       cryptlib=`./loc Slibcrypt${lib_ext} "" $xlibpth`
+       cryptlib=`./loc Slibcrypt$lib_ext "" $xlibpth`
        if $test -z "$cryptlib"; then
-               cryptlib=`./loc Mlibcrypt${lib_ext} "" $xlibpth`
+               cryptlib=`./loc Mlibcrypt$lib_ext "" $xlibpth`
        else
                cryptlib=-lcrypt
        fi
        if $test -z "$cryptlib"; then
-               cryptlib=`./loc Llibcrypt${lib_ext} "" $xlibpth`
+               cryptlib=`./loc Llibcrypt$lib_ext "" $xlibpth`
        else
                cryptlib=-lcrypt
        fi
        if $test -z "$cryptlib"; then
-               cryptlib=`./loc libcrypt${lib_ext} "" $libpth`
+               cryptlib=`./loc libcrypt$lib_ext "" $libpth`
        else
                cryptlib=-lcrypt
        fi
@@ -6126,23 +6182,23 @@ main()
 #endif
     handle = dlopen("./dyna.$dlext", mode) ;
     if (handle == NULL) {
-        printf ("1\n") ;
-        fflush (stdout) ;
-           exit(0);
+       printf ("1\n") ;
+       fflush (stdout) ;
+       exit(0);
     }
     symbol = dlsym(handle, "fred") ;
     if (symbol == NULL) {
-               /* try putting a leading underscore */
-        symbol = dlsym(handle, "_fred") ;
-        if (symbol == NULL) {
-            printf ("2\n") ;
-            fflush (stdout) ;
-               exit(0);
-               }
-        printf ("3\n") ;
+       /* try putting a leading underscore */
+       symbol = dlsym(handle, "_fred") ;
+       if (symbol == NULL) {
+           printf ("2\n") ;
+           fflush (stdout) ;
+           exit(0);
+       }
+       printf ("3\n") ;
     }
     else
-        printf ("4\n") ;
+       printf ("4\n") ;
     fflush (stdout) ;
     exit(0);
 }
@@ -6460,6 +6516,25 @@ eval $inlibc
 set getpriority d_getprior
 eval $inlibc
 
+: see if gettimeofday or ftime exists
+set gettimeofday d_gettimeod
+eval $inlibc
+case "$d_gettimeod" in
+"$undef")
+       set ftime d_ftime 
+       eval $inlibc
+       ;;
+*)
+       val="$undef"; set d_ftime; eval $setvar
+       ;;
+esac
+case "$d_gettimeod$d_ftime" in
+"$undef$undef")
+       echo " "
+       echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
+       ;;
+esac
+
 : see if this is a netinet/in.h or sys/in.h system
 set netinet/in.h i_niin sys/in.h i_sysin
 eval $inhdr
@@ -7048,7 +7123,7 @@ val="$undef"
 case "$d_memcmp" in
 "$define")
        echo " "
-       echo "Checking to see if memcmp() can compare relative magnitude..." >&4
+       echo "Checking to see if your memcmp() can compare relative magnitude..." >&4
        $cat >foo.c <<EOCP
 #$i_memory I_MEMORY
 #$i_stdlib I_STDLIB
@@ -7390,10 +7465,10 @@ else
                : we will have to assume that it supports the 4.2 BSD interface
                d_oldsock="$undef"
        else
-               echo "You don't have Berkeley networking in libc${lib_ext}..." >&4
-               if test -f /usr/lib/libnet${lib_ext}; then
-                       ( (nm $nm_opt /usr/lib/libnet${lib_ext} | eval $nm_extract) ||  \
-                       ar t /usr/lib/libnet${lib_ext}) 2>/dev/null >> libc.list
+               echo "You don't have Berkeley networking in libc$lib_ext..." >&4
+               if test -f /usr/lib/libnet$lib_ext; then
+                       ( (nm $nm_opt /usr/lib/libnet$lib_ext | eval $nm_extract) ||  \
+                       ar t /usr/lib/libnet$lib_ext) 2>/dev/null >> libc.list
                        if $contains socket libc.list >/dev/null 2>&1; then
                        echo "...but the Wollongong group seems to have hacked it in." >&4
                                socketlib="-lnet"
@@ -7406,7 +7481,7 @@ else
                                        d_oldsock="$define"
                                fi
                        else
-                               echo "or even in libnet${lib_ext}, which is peculiar." >&4
+                               echo "or even in libnet$lib_ext, which is peculiar." >&4
                                d_socket="$undef"
                                d_oldsock="$undef"
                        fi
@@ -8480,14 +8555,14 @@ EOP
 $cc $ccflags -c bar1.c >/dev/null 2>&1
 $cc $ccflags -c bar2.c >/dev/null 2>&1
 $cc $ccflags -c foo.c >/dev/null 2>&1
-ar rc bar${lib_ext} bar2.o bar1.o >/dev/null 2>&1
-if $cc $ccflags $ldflags -o foobar foo.o bar${lib_ext} $libs > /dev/null 2>&1 &&
+ar rc bar$lib_ext bar2.o bar1.o >/dev/null 2>&1
+if $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $libs > /dev/null 2>&1 &&
        ./foobar >/dev/null 2>&1; then
        echo "ar appears to generate random libraries itself."
        orderlib=false
        ranlib=":"
-elif ar ts bar${lib_ext} >/dev/null 2>&1 &&
-       $cc $ccflags $ldflags -o foobar foo.o bar${lib_ext} $libs > /dev/null 2>&1 &&
+elif ar ts bar$lib_ext >/dev/null 2>&1 &&
+       $cc $ccflags $ldflags -o foobar foo.o bar$lib_ext $libs > /dev/null 2>&1 &&
        ./foobar >/dev/null 2>&1; then
                echo "a table of contents needs to be added with 'ar ts'."
                orderlib=false
@@ -8960,7 +9035,7 @@ main()
 }
 EOM
 echo " "
-if $cc $ccflags $ldflags -o ssize ssize.c > /dev/null 2>&1  &&
+if $cc $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1  &&
                ./ssize > /dev/null 2>&1 ; then
        ssizetype=`./ssize`
        echo "I'll be using $ssizetype for functions returning a byte count." >&4
@@ -9530,23 +9605,22 @@ known_extensions=''
 : some additional extensions into the source tree and expect them
 : to be built.
 for xxx in * ; do
-       case "$xxx" in
-       DynaLoader) ;;
-       *)
-               if $test -f $xxx/$xxx.xs; then
-                       known_extensions="$known_extensions $xxx"
-               else
-                       if $test -d $xxx; then
-                               cd $xxx
-                               for yyy in * ; do
-                                       if $test -f $yyy/$yyy.xs; then
-                                               known_extensions="$known_extensions $xxx/$yyy"
-                                       fi
-                               done
-                               cd ..
-                       fi
-               fi ;;
-       esac
+    case "$xxx" in
+    DynaLoader) ;;
+    *) if $test -f $xxx/$xxx.xs; then
+           known_extensions="$known_extensions $xxx"
+       else
+           if $test -d $xxx; then
+               cd $xxx
+               for yyy in * ; do
+                   if $test -f $yyy/$yyy.xs; then
+                       known_extensions="$known_extensions $xxx/$yyy"
+                   fi
+               done
+               cd ..
+           fi
+       fi ;;
+    esac
 done
 set X $known_extensions
 shift
@@ -9759,6 +9833,7 @@ awk='$awk'
 baserev='$baserev'
 bash='$bash'
 bin='$bin'
+bincompat3='$bincompat3'
 binexp='$binexp'
 bison='$bison'
 byacc='$byacc'
@@ -9798,6 +9873,7 @@ d_archlib='$d_archlib'
 d_attribut='$d_attribut'
 d_bcmp='$d_bcmp'
 d_bcopy='$d_bcopy'
+d_bincompat3='$d_bincompat3'
 d_bsd='$d_bsd'
 d_bsdgetpgrp='$d_bsdgetpgrp'
 d_bsdpgrp='$d_bsdpgrp'
@@ -9836,6 +9912,7 @@ d_flock='$d_flock'
 d_fork='$d_fork'
 d_fpathconf='$d_fpathconf'
 d_fsetpos='$d_fsetpos'
+d_ftime='$d_ftime'
 d_getgrps='$d_getgrps'
 d_gethent='$d_gethent'
 d_gethname='$d_gethname'
@@ -9845,6 +9922,7 @@ d_getpgrp2='$d_getpgrp2'
 d_getpgrp='$d_getpgrp'
 d_getppid='$d_getppid'
 d_getprior='$d_getprior'
+d_gettimeod='$d_gettimeod'
 d_gnulibc='$d_gnulibc'
 d_htonl='$d_htonl'
 d_index='$d_index'
diff --git a/INSTALL b/INSTALL
index 325509b..b629682 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -125,12 +125,12 @@ you can use the Configure command line option -Uusedl.
 By default, Configure will offer to build every extension which appears
 to be supported.  For example, Configure will offer to build GDBM_File
 only if it is able to find the gdbm library.  (See examples below.)
-DynaLoader, Fcntl, FileHandle and IO are always built by default.
-Configure does not contain code to test for POSIX compliance, so POSIX
-is always built by default as well.  If you wish to skip POSIX, you can
-set the Configure variable useposix=false either in a hint file or from
-the Configure command line.  Similarly, the Opcode extension is always
-built by default, but you can skip it by setting the Configure variable
+DynaLoader, Fcntl, and IO are always built by default.  Configure does
+not contain code to test for POSIX compliance, so POSIX is always built
+by default as well.  If you wish to skip POSIX, you can set the
+Configure variable useposix=false either in a hint file or from the
+Configure command line.  Similarly, the Opcode extension is always built
+by default, but you can skip it by setting the Configure variable
 useopcode=false either in a hint file for from the command line.
 
 Even if you do not have dynamic loading, you must still build the
@@ -143,7 +143,6 @@ to turn off each extension:
     DB_File            i_db
     DynaLoader         (Must always be included as a static extension)
     Fcntl              (Always included by default)
-    FileHandle         (Always included by default)
     GDBM_File          i_gdbm
     IO                 (Always included by default)
     NDBM_File          i_ndbm
@@ -885,6 +884,11 @@ If you get syntax errors on '(', try -DCRIPPLED_CC.
 
 Machines with half-implemented dbm routines will need to #undef I_ODBM
 
+db-recno failure on tests 51, 53 and 55:  Old versions of the DB library
+(including the DB library which comes with FreeBSD 2.1) had broken
+handling of recno databases with modified bval settings.  Upgrade your
+DB library or OS.
+
 =back
 
 =head1 make test
index 6c267a1..ce57721 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -4,8 +4,8 @@ Changes5.000            Differences from perl4.
 Changes5.001           Differences from 5.000.
 Changes5.002           Differences from 5.001.
 Changes5.003           Differences from 5.002.
-configure              Crude emulation of GNU configure
 Configure              Portability tool
+configure              Crude emulation of GNU configure
 Copying                        The GNU General Public License
 EXTERN.h               Included before foreign .h files
 INSTALL                        Detailed installation instructions.
@@ -23,6 +23,7 @@ XSUB.h                        Include file for extension subroutines
 av.c                   Array value code
 av.h                   Array value header
 cflags.SH              A script that emits C compilation flags per file
+compat3.sym            List of symbols for binary-compatibility with 5.003
 config_H               Sample config.h
 config_h.SH            Produces config.h
 configpm               Produces lib/Config.pm
@@ -225,6 +226,7 @@ hints/irix_6_2.sh   Hints for named architecture
 hints/isc.sh           Hints for named architecture
 hints/isc_2.sh         Hints for named architecture
 hints/linux.sh         Hints for named architecture
+hints/lynxos.sh                Hints for named architecture
 hints/machten.sh       Hints for named architecture
 hints/machten_2.sh     Hints for named architecture
 hints/mips.sh          Hints for named architecture
@@ -269,6 +271,9 @@ lib/AnyDBM_File.pm  Perl module to emulate dbmopen
 lib/AutoLoader.pm      Autoloader base class
 lib/AutoSplit.pm       A module to split up autoload functions
 lib/Benchmark.pm       A module to time pieces of code and such
+lib/CPAN.pm            Interface to Comprehensive Perl Archive Network
+lib/CPAN/FirstTime.pm  Utility for creating CPAN config files
+lib/CPAN/Nox.pm                Runs CPAN while avoiding compiled extensions
 lib/Carp.pm            Error message base class
 lib/Class/Template.pm  Structure/member template builder; makes nested types
 lib/Cwd.pm             Various cwd routines (getcwd, fastcwd, chdir)
@@ -293,6 +298,7 @@ lib/ExtUtils/xsubpp         External subroutine preprocessor
 lib/Fatal.pm           Make do-or-die equivalents of functions
 lib/File/Basename.pm   A module to emulate the basename program
 lib/File/CheckTree.pm  Perl module supporting wholesale file mode validation
+lib/File/Compare.pm    Emulation of cmp command
 lib/File/Copy.pm       Emulation of cp command
 lib/File/Find.pm       Routines to do a find
 lib/File/Path.pm       A module to do things like `mkdir -p' and `rm -r'
@@ -308,7 +314,10 @@ lib/IPC/Open3.pm   Open a three-ended pipe!
 lib/Math/BigFloat.pm   An arbitrary precision floating-point arithmetic package
 lib/Math/BigInt.pm     An arbitrary precision integer arithmetic package
 lib/Math/Complex.pm    A Complex package
+lib/Net/FTP.pm         File Transfer Protocol client
+lib/Net/Netrc.pm       Parser for ".netrc" file a la Berkeley UNIX
 lib/Net/Ping.pm                Ping methods
+lib/Net/Socket.pm      Support class for Net::FTP
 lib/Net/hostent.pm     Object-oriented wrapper around CORE::gethost*
 lib/Net/netent.pm      Object-oriented wrapper around CORE::getnet*
 lib/Net/protoent.pm    Object-oriented wrapper around CORE::getproto*
@@ -332,6 +341,7 @@ lib/Text/Soundex.pm Perl module to implement Soundex
 lib/Text/Tabs.pm       Do expand and unexpand
 lib/Text/Wrap.pm       Paragraph formatter
 lib/Tie/Hash.pm                Base class for tied hashes
+lib/Tie/RefHash.pm     Base class for tied hashes with references as keys
 lib/Tie/Scalar.pm      Base class for tied scalars
 lib/Tie/SubstrHash.pm  Compact hash for known key, value and table size
 lib/Time/Local.pm      Reverse translation of localtime, gmtime
@@ -379,7 +389,6 @@ lib/perl5db.pl              Perl debugging routines
 lib/pwd.pl             Routines to keep track of PWD environment variable
 lib/shellwords.pl      Perl library to split into words with shell quoting
 lib/sigtrap.pm         For trapping an abort and giving traceback
-lib/splain             Standalone program to print verbose diagnostics.
 lib/stat.pl            Perl library supporting stat function
 lib/strict.pm          For "use strict"
 lib/subs.pm            Declare overriding subs
@@ -400,9 +409,6 @@ miniperlmain.c              Basic perl w/o dynamic loading or extensions
 mv-if-diff             Script to mv a file if it changed
 myconfig               Prints summary of the current configuration
 nostdio.h              Cause compile error on stdio calls
-old_embed.pl           Produces embed.h using old_global.sym
-old_global.sym         Old list of symbols to hide when embedded
-old_perl_exp.SH                Creates old list of exported symbols for AIX.
 op.c                   Opcode syntax tree code
 op.h                   Opcode syntax tree header
 opcode.h               Automatically generated opcode header
@@ -494,10 +500,11 @@ pod/perlembed.pod Embedding info
 pod/perlform.pod       Format info
 pod/perlfunc.pod       Function info
 pod/perlguts.pod       Internals info
-pod/perli18n.pod       I18N info
 pod/perlipc.pod                IPC info
-pod/perllol.pod                How to use lists of lists.
+pod/perllocale.pod     Locale support info
+pod/perllol.pod                How to use lists of lists
 pod/perlmod.pod                Module info
+pod/perlnews.pod       News of changes since last version
 pod/perlobj.pod                Object info
 pod/perlop.pod         Operator info
 pod/perlovl.pod                Overloading info
@@ -511,6 +518,7 @@ pod/perlsub.pod             Subroutine info
 pod/perlsyn.pod                Syntax info
 pod/perltie.pod                Tieing an object class into a simple variable
 pod/perltoc.pod                Table of Contents info
+pod/perltoot.pod       Tom's object-oriented tutorial
 pod/perltrap.pod       Trap info
 pod/perlvar.pod                Variable info
 pod/perlxs.pod         XS api info
@@ -655,9 +663,10 @@ t/op/push.t                See if push and pop work
 t/op/quotemeta.t       See if quotemeta works
 t/op/rand.t            See if rand works
 t/op/range.t           See if .. works
-t/op/re_tests          Input file for op.regexp
+t/op/re_tests          Regular expressions for regexp.t
 t/op/read.t            See if read() works
 t/op/readdir.t         See if readdir() works
+t/op/recurse.t         See if deep recursion works
 t/op/ref.t             See if refs and objects work
 t/op/regexp.t          See if regular expressions work
 t/op/repeat.t          See if x operator works
@@ -676,7 +685,6 @@ t/op/undef.t                See if undef works
 t/op/unshift.t         See if unshift works
 t/op/vec.t             See if vectors work
 t/op/write.t           See if write works
-t/re_tests             Regular expressions for regexp.t
 taint.c                        Tainting code
 toke.c                 The tokener
 universal.c            The default UNIVERSAL package methods
@@ -690,9 +698,15 @@ utils/h2xs.PL              Program to make .xs files from C header files
 utils/perlbug.PL       A simple tool to submit a bug report
 utils/perldoc.PL       A simple tool to find & display perl's documentation
 utils/pl2pm.PL         A pl to pm translator
+utils/splain.PL                Stand-alone version of diagnostics.pm
 vms/Makefile           VMS port
 vms/config.vms         default config.h for VMS
 vms/descrip.mms                MM[SK] description file for build
+vms/ext/DCLsym/0README.txt     ReadMe file for VMS::DCLsym
+vms/ext/DCLsym/DCLsym.pm       Perl access to CLI symbols
+vms/ext/DCLsym/DCLsym.xs       Perl access to CLI symbols
+vms/ext/DCLsym/Makefile.PL     MakeMaker driver for VMS::DCLsym
+vms/ext/DCLsym/test.pl regression tests for VMS::DCLsym
 vms/ext/Filespec.pm    VMS-Unix file syntax interconversion
 vms/ext/Stdio/0README.txt      ReadMe file for VMS::Stdio
 vms/ext/Stdio/Makefile.PL      MakeMaker driver for VMS::Stdio
index 81d6589..db3b776 100755 (executable)
@@ -243,7 +243,7 @@ $(LIBPERL): $& perl$(OBJ_EXT) $(obj)
        case "$useshrplib" in
        true)
                $spitshell >>Makefile <<'!NO!SUBS!'
-       $(LD) $(LDDLFLAGS) -o $@ perl$(OBJ_EXT) $(obj)
+       $(LD) $(LDDLFLAGS) -o $@ perl$(OBJ_EXT) $(obj) $(libs)
 !NO!SUBS!
                ;;
        *)
index 4cd0099..da02084 100644 (file)
@@ -1318,7 +1318,7 @@ startperl (startperl.U):
        script to make sure (hopefully) that it runs with perl and not some
        shell. Of course, that leading line must be followed by the classical
        perl idiom:
-               eval 'exec perl -S $0 "$@"'
+               eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
                        if $running_under_some_shell;
        to guarantee perl startup should the shell execute the script. Note
        that this magic incatation is not understood by csh.
diff --git a/compat3.sym b/compat3.sym
new file mode 100644 (file)
index 0000000..db53dd6
--- /dev/null
@@ -0,0 +1,46 @@
+# Global symbols that should handled differently when Perl 5.004 is
+# compiled for binary compatibility with version 5.003.
+
+# Variables from "interp.sym" that _should_ be hidden.
+
+curcop
+curcopdb
+envgv
+siggv
+tainting
+
+# Variables from "global.sym" that should _not_ be hidden.
+
+Error
+block_type
+comppad_name_floor
+debug
+nice_chunk
+nice_chunk_size
+no_myglob
+no_symref
+no_wrongref
+pad_reset_pending
+padix_floor
+regflags
+warn_uninit
+
+# Functions from "global.sym" that should _not_ be hidden.
+
+SvIV
+SvNV
+SvTRUE
+SvUV
+boot_core_UNIVERSAL
+do_undump
+safecalloc
+safefree
+safemalloc
+saferealloc
+safexcalloc
+safexfree
+safexmalloc
+safexrealloc
+save_iv
+sv_pvn
+yydestruct
index 6146ce8..11e9033 100644 (file)
--- a/config_H
+++ b/config_H
  */
 #define HAS_FSETPOS    /**/
 
+/* HAS_GETTIMEOFDAY:
+ *     This symbol, if defined, indicates that the gettimeofday() system
+ *     call is available for a sub-second accuracy clock. Usually, the file
+ *     <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
+ *     The type "Timeval" should be used to refer to "struct timeval".
+ */
+/*#define HAS_GETTIMEOFDAY     / **/
+#ifdef HAS_GETTIMEOFDAY
+#define Timeval struct timeval /* Structure used by gettimeofday() */
+#endif
+
 /* HAS_GETGROUPS:
  *     This symbol, if defined, indicates that the getgroups() routine is
  *     available to get the list of process groups.  If unavailable, multiple
 /*#define HAS_SAFE_MEMCPY      / **/
 
 /* HAS_SANE_MEMCMP:
- *     This symbol, if defined, indicates that the memcmp() routine is
- *     available to compare memory blocks for relative magnitude. If this
- *     symbol is not defined, and if HAS_MEMCMP is defined, then memcmp()
- *     may be used only to compare memory blocks for equality.
+ *     This symbol, if defined, indicates that the memcmp routine is available
+ *     and can be used to compare relative magnitudes of chars with their high
+ *     bits set.  If it is not defined, roll your own version.
  */
 /*#define HAS_SANE_MEMCMP      / **/
 
 #define ARCHLIB "/opt/perl/lib/i86pc-solaris/5.00305"          /**/
 #define ARCHLIB_EXP "/opt/perl/lib/i86pc-solaris/5.00305"              /**/
 
+/* BINCOMPAT3:
+ *     This symbol, if defined, indicates that Perl 5.004 should be
+ *     binary-compatible with Perl 5.003.
+ */
+#define BINCOMPAT3             /**/
+
 /* BYTEORDER:
  *     This symbol holds the hexadecimal constant defined in byteorder,
  *     i.e. 0x1234 or 0x4321, etc...
index d2ff19c..dd73771 100755 (executable)
@@ -269,6 +269,17 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  */
 #$d_fsetpos HAS_FSETPOS        /**/
 
+/* HAS_GETTIMEOFDAY:
+ *     This symbol, if defined, indicates that the gettimeofday() system
+ *     call is available for a sub-second accuracy clock. Usually, the file
+ *     <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
+ *     The type "Timeval" should be used to refer to "struct timeval".
+ */
+#$d_gettimeod HAS_GETTIMEOFDAY /**/
+#ifdef HAS_GETTIMEOFDAY
+#define Timeval struct timeval /* Structure used by gettimeofday() */
+#endif
+
 /* HAS_GETGROUPS:
  *     This symbol, if defined, indicates that the getgroups() routine is
  *     available to get the list of process groups.  If unavailable, multiple
@@ -551,10 +562,9 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
 #$d_safemcpy HAS_SAFE_MEMCPY   /**/
 
 /* HAS_SANE_MEMCMP:
- *     This symbol, if defined, indicates that the memcmp() routine is
- *     available to compare memory blocks for relative magnitude. If this
- *     symbol is not defined, and if HAS_MEMCMP is defined, then memcmp()
- *     may be used only to compare memory blocks for equality.
+ *     This symbol, if defined, indicates that the memcmp routine is available
+ *     and can be used to compare relative magnitudes of chars with their high
+ *     bits set.  If it is not defined, roll your own version.
  */
 #$d_sanemcmp HAS_SANE_MEMCMP   /**/
 
@@ -810,19 +820,19 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
 
 /* HAS_STRTOD:
  *     This symbol, if defined, indicates that the strtod routine is
- *     available to translate strings to doubles.
+ *     available to provide better numeric string conversion than atof().
  */
 #$d_strtod HAS_STRTOD  /**/
 
 /* HAS_STRTOL:
- *     This symbol, if defined, indicates that the strtol routine is
- *     available to translate strings to integers.
+ *     This symbol, if defined, indicates that the strtol routine is available
+ *     to provide better numeric string conversion than atoi() and friends.
  */
 #$d_strtol HAS_STRTOL  /**/
 
 /* HAS_STRTOUL:
  *     This symbol, if defined, indicates that the strtoul routine is
- *     available to translate strings to integers.
+ *     available to provide conversion of strings to unsigned long.
  */
 #$d_strtoul HAS_STRTOUL        /**/
 
@@ -1376,6 +1386,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
 #$d_archlib ARCHLIB "$archlib"         /**/
 #$d_archlib ARCHLIB_EXP "$archlibexp"          /**/
 
+/* BINCOMPAT3:
+ *     This symbol, if defined, indicates that Perl 5.004 should be
+ *     binary-compatible with Perl 5.003.
+ */
+#$d_bincompat3 BINCOMPAT3                      /**/
+
 /* BYTEORDER:
  *     This symbol holds the hexadecimal constant defined in byteorder,
  *     i.e. 0x1234 or 0x4321, etc...
diff --git a/cop.h b/cop.h
index 6aa32df..299873b 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -93,6 +93,7 @@ struct block_loop {
     OP *       last_op;
     SV **      itervar;
     SV *       itersave;
+    SV *       iterlval;
     AV *       iterary;
     I32                iterix;
 };
@@ -103,12 +104,14 @@ struct block_loop {
        cx->blk_loop.redo_op = cLOOP->op_redoop;                        \
        cx->blk_loop.next_op = cLOOP->op_nextop;                        \
        cx->blk_loop.last_op = cLOOP->op_lastop;                        \
+       cx->blk_loop.iterlval = Nullsv;                                 \
        cx->blk_loop.itervar = ivar;                                    \
        if (ivar)                                                       \
            cx->blk_loop.itersave = *cx->blk_loop.itervar;
 
 #define POPLOOP(cx)                                                    \
-       newsp           = stack_base + cx->blk_loop.resetsp;
+       newsp           = stack_base + cx->blk_loop.resetsp;            \
+       SvREFCNT_dec(cx->blk_loop.iterlval)
 
 /* context common to subroutines, evals and loops */
 struct block {
diff --git a/dump.c b/dump.c
index 064641f..c0749b8 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -189,10 +189,17 @@ register OP *op;
                (void)strcat(buf,"AMPER,");
            if (op->op_private & OPpENTERSUB_DB)
                (void)strcat(buf,"DB,");
-           if (op->op_private & OPpDEREF_AV)
-               (void)strcat(buf,"AV,");
-           if (op->op_private & OPpDEREF_HV)
-               (void)strcat(buf,"HV,");
+           switch (op->op_private & OPpDEREF) {
+           case OPpDEREF_SV:
+               (void)strcat(buf, "SV,");
+               break;
+           case OPpDEREF_AV:
+               (void)strcat(buf, "AV,");
+               break;
+           case OPpDEREF_HV:
+               (void)strcat(buf, "HV,");
+               break;
+           }
            if (op->op_private & HINT_STRICT_REFS)
                (void)strcat(buf,"STRICT_REFS,");
        }
index 87cfc33..15eb655 100644 (file)
--- a/eg/README
+++ b/eg/README
@@ -13,7 +13,7 @@ of a system to check on and report various kinds of anomalies.
 If you machine doesn't support #!, the first thing you'll want to do is
 replace the #! with a couple of lines that look like this:
 
-       eval "exec /usr/bin/perl -S $0 $*"
+       eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
                if $running_under_some_shell;
 
 being sure to include any flags that were on the #! line.  A supplied script
diff --git a/eg/nih b/eg/nih
index 2066f4b..4475c49 100644 (file)
--- a/eg/nih
+++ b/eg/nih
@@ -1,4 +1,4 @@
-eval "exec /usr/bin/perl -Spi.bak $0 $*"
+eval 'exec /usr/bin/perl -Spi.bak $0 ${1+"$@"}'
        if $running_under_some_shell;
 
 # $RCSfile: nih,v $$Revision: 4.1 $$Date: 92/08/07 17:20:27 $
@@ -6,5 +6,6 @@ eval "exec /usr/bin/perl -Spi.bak $0 $*"
 # This script makes #! scripts directly executable on machines that don't
 # support #!.  It edits in place any scripts mentioned on the command line.
 
-s|^#!(.*)|#!$1\neval "exec $1 -S \$0 \$*"\n\tif \$running_under_some_shell;|
+s[^#!(.*)]
+ [#!$1\neval 'exec $1 -S \$0 \${1+"\$@"}'\n\tif \$running_under_some_shell;]
        if $. == 1;
index 317e027..646d8b6 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
-       if 0;
+       if $running_under_some_shell;
 
 require 'sys/ipc.ph';
 require 'sys/msg.ph';
index d72a2dd..4d871b9 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
-       if 0;
+       if $running_under_some_shell;
 
 require 'sys/ipc.ph';
 require 'sys/msg.ph';
index d40e46b..ecc1ba4 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
-       if 0;
+       if $running_under_some_shell;
 
 require 'sys/ipc.ph';
 require 'sys/shm.ph';
index ba4a863..6fa07ad 100644 (file)
@@ -32,7 +32,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.29 1996/11/18 23:10:26 ilya Exp ilya $
+;; $Id: cperl-mode.el,v 1.31+ 1996/12/09 08:03:14 ilya Exp ilya $
 
 ;;; To use this mode put the following into your .emacs file:
 
 ;;; in your .emacs file. (Emacs rulers do not consider it politically
 ;;; correct to make whistles enabled by default.)
 
+;;; DO NOT FORGET to read micro-docs. (available from `Perl' menu). <<<<<<
+;;; or as help on variables `cperl-tips', `cperl-problems',         <<<<<<
+;;; `cperl-non-problems'.                                           <<<<<<
+
 ;;; Additional useful commands to put into your .emacs file:
 
 ;; (setq auto-mode-alist
 ;;;  Minor updates to `cperl-short-docs'.
 ;;;  Will not consider <<= as start of here-doc.
 
+;;;; After 1.29
+;;;  Added an extra advice to look into Micro-docs. ;-).
+;;;  Enclosing of region when you press a closing parenth is regulated by
+;;;  `cperl-electric-parens-string'.
+;;;  Minor updates to `cperl-short-docs'.
+;;;  `initialize-new-tags-table' called only if present (Does this help
+;;;     with generation of tags under XEmacs?).
+;;;  When creating/updating tag files, new info is written at the old place,
+;;;     or at the end (is this a wanted behaviour? I need this in perl build directory).
+
+;;;; After 1.30
+;;;  All the keywords from keywords.pl included (maybe with dummy explanation).
+;;;  No auto-help inside strings, comment, here-docs, formats, and pods.
+;;;  Shrinkwrapping of info, regulated by `cperl-max-help-size'.
+;;;  Info on variables as well.
+;;;  Recognision of HERE-DOCS improved yet more.
+;;;  Autonewline works on `}' without warnings.
+;;;  Autohelp works again on $_[0].
+
+;;;; After 1.31
+;;;  perl-descr.el found its author - hi, Johan!
+
 (defvar cperl-extra-newline-before-brace nil
   "*Non-nil means that if, elsif, while, until, else, for, foreach
 and do constructs look like:
@@ -388,7 +414,7 @@ Can be overwritten by `cperl-hairy' if nil.")
   "*Non-nil (and non-null) means { after $ in CPerl buffers should be preceeded by ` '.
 Can be overwritten by `cperl-hairy' if nil.")
 
-(defvar cperl-electric-parens-string "({[<"
+(defvar cperl-electric-parens-string "({[]})<"
   "*String of parentheses that should be electric in CPerl.")
 
 (defvar cperl-electric-parens nil
@@ -455,6 +481,12 @@ You can always make lookup from menu or using \\[cperl-find-pods-heres].")
   "*Not-nil means add backreferences to generated `imenu's.
 May require patched `imenu' and `imenu-go'.")
 
+(defvar cperl-max-help-size 66
+  "*Non-nil means shrink-wrapping of info-buffer allowed up to these percents.")
+
+(defvar cperl-shrink-wrap-info-frame t
+  "*Non-nil means shrink-wrapping of info-buffer-frame allowed.")
+
 (defvar cperl-info-page "perl"
   "Name of the info page containing perl docs.
 Older version of this page was called `perl5', newer `perl'.")
@@ -548,6 +580,10 @@ will not break indentation, but
        1 if ( s#//#/# );
 will.
 
+By similar reasons
+       s\"abc\"def\";
+will confuse CPerl a lot.
+
 If you still get wrong indentation in situation that you think the
 code should be able to parse, try:
 
@@ -1194,10 +1230,10 @@ char is \"{\", insert extra newline before only if
                   (if cperl-auto-newline 
                       (progn (cperl-indent-line) (newline) t) nil)))
          (progn
-           (if cperl-auto-newline
-               (setq insertpos (point)))
            (insert last-command-char)
            (cperl-indent-line)
+           (if cperl-auto-newline
+               (setq insertpos (1- (point))))
            (if (and cperl-auto-newline (null only-before))
                (progn
                  (newline)
@@ -1282,6 +1318,9 @@ If not, or if we are not at the end of marking range, would self-insert."
   (interactive "P")
   (let ((beg (save-excursion (beginning-of-line) (point)))
        (other-end (if (and cperl-electric-parens-mark
+                           (cperl-val 'cperl-electric-parens)
+                           (memq last-command-char
+                                 (append cperl-electric-parens-string nil))
                            (cperl-mark-active) 
                            (< (mark) (point)))
                       (mark) 
@@ -2137,9 +2176,20 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
               "\\(\\`\n?\\|\n\n\\)=" 
               "\\|"
               ;; One extra () before this:
-              "<<\\(\\([\"'`]\\)\\([^\"'`\n]*\\)\\3\\|\\(\\([a-zA-Z_][a-zA-Z_0-9]*\\)?\\)[^=]\\)" ; [^=] to avoid <<=.
+              "<<" 
+                "\\(" 
+                ;; First variant "BLAH" or just ``.
+                   "\\([\"'`]\\)"
+                   "\\([^\"'`\n]*\\)"
+                   "\\3"
+                "\\|"
+                ;; Second variant: Identifier or empty
+                  "\\(\\([a-zA-Z_][a-zA-Z_0-9]*\\)?\\)"
+                  ;; Check that we do not have <<= or << 30 or << $blah.
+                  "\\([^= \t$@%&]\\|[ \t]+[^ \t\n0-9$@%&]\\)"
+                "\\)"
               "\\|"
-              ;; 1+5 extra () before this:
+              ;; 1+6 extra () before this:
               "^[ \t]*format[ \t]*\\([a-zA-Z0-9_]+\\)?[ \t]*=[ \t]*$")))
     (unwind-protect
        (progn
@@ -2240,12 +2290,12 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
                        (t (message "End of here-document `%s' not found." tag)))))
               ;; format
               (t
-               ;; 1+5=6 extra () before this:
+               ;; 1+6=7 extra () before this:
                ;; "^[ \t]*format[ \t]*\\([a-zA-Z0-9_]+\\)?[ \t]*=[ \t]*$")))
                (setq b (point)
-                     name (if (match-beginning 7) ; 6 + 1
-                              (buffer-substring (match-beginning 7) ; 6 + 1
-                                                (match-end 7)) ; 6 + 1
+                     name (if (match-beginning 8) ; 7 + 1
+                              (buffer-substring (match-beginning 8) ; 7 + 1
+                                                (match-end 8)) ; 7 + 1
                             ""))
                (setq argument nil)
                (if cperl-pod-here-fontify 
@@ -3295,34 +3345,52 @@ Available styles are GNU, K&R, BSD and Whitesmith."
   (let ((perl-dbg-flags "-wc"))
     (mode-compile)))
 
-(defun cperl-info-buffer ()
-  ;; Returns buffer with documentation. Creates if missing
-  (let ((info (get-buffer "*info-perl*")))
+(defun cperl-info-buffer (type)
+  ;; Returns buffer with documentation. Creates if missing.
+  ;; If TYPE, this vars buffer.
+  ;; Special care is taken to not stomp over an existing info buffer
+  (let* ((bname (if type "*info-perl-var*" "*info-perl*"))
+        (info (get-buffer bname))
+        (oldbuf (get-buffer "*info*")))
     (if info info
       (save-window-excursion
        ;; Get Info running
        (require 'info)
+       (cond (oldbuf
+              (set-buffer oldbuf)
+              (rename-buffer "*info-perl-tmp*")))
        (save-window-excursion
          (info))
-       (Info-find-node cperl-info-page "perlfunc")
+       (Info-find-node cperl-info-page (if type "perlvar" "perlfunc"))
        (set-buffer "*info*")
-       (rename-buffer "*info-perl*")
+       (rename-buffer bname)
+       (cond (oldbuf
+              (set-buffer "*info-perl-tmp*")
+              (rename-buffer "*info*")
+              (set-buffer bname)))
+       (make-variable-buffer-local 'window-min-height)
+       (setq window-min-height 2)
        (current-buffer)))))
 
 (defun cperl-word-at-point (&optional p)
   ;; Returns the word at point or at P.
   (save-excursion
     (if p (goto-char p))
-    (require 'etags)
-    (funcall (or (and (boundp 'find-tag-default-function)
-                     find-tag-default-function)
-                (get major-mode 'find-tag-default-function)
-                ;; XEmacs 19.12 has `find-tag-default-hook'; it is
-                ;; automatically used within `find-tag-default':
-                'find-tag-default))))
+    (or (cperl-word-at-point-hard)
+       (progn
+         (require 'etags)
+         (funcall (or (and (boundp 'find-tag-default-function)
+                           find-tag-default-function)
+                      (get major-mode 'find-tag-default-function)
+                      ;; XEmacs 19.12 has `find-tag-default-hook'; it is
+                      ;; automatically used within `find-tag-default':
+                      'find-tag-default))))))
 
 (defun cperl-info-on-command (command)
-  "Shows documentation for Perl command in other window."
+  "Shows documentation for Perl command in other window.
+If perl-info buffer is shown in some frame, uses this frame.
+Customized by setting variables `cperl-shrink-wrap-info-frame',
+`cperl-max-help-size'."
   (interactive 
    (let* ((default (cperl-word-at-point))
          (read (read-string 
@@ -3334,21 +3402,72 @@ Available styles are GNU, K&R, BSD and Whitesmith."
 
   (let ((buffer (current-buffer))
        (cmd-desc (concat "^" (regexp-quote command) "[^a-zA-Z_0-9]")) ; "tr///"
-       pos)
+       pos isvar height iniheight frheight buf win fr1 fr2 iniwin not-loner
+       max-height char-height buf-list)
     (if (string-match "^-[a-zA-Z]$" command)
        (setq cmd-desc "^-X[ \t\n]"))
-    (set-buffer (cperl-info-buffer))
+    (setq isvar (string-match "^[$@%]" command)
+         buf (cperl-info-buffer isvar)
+         iniwin (selected-window)
+         fr1 (window-frame iniwin))
+    (set-buffer buf)
     (beginning-of-buffer)
-    (re-search-forward "^-X[ \t\n]")
-    (forward-line -1)
+    (or isvar 
+       (progn (re-search-forward "^-X[ \t\n]")
+              (forward-line -1)))
     (if (re-search-forward cmd-desc nil t)
        (progn
-         (setq pos (progn (beginning-of-line)
-                          (point)))
-         (pop-to-buffer (cperl-info-buffer))
+         ;; Go back to beginning of the group (ex, for qq)
+         (if (re-search-backward "^[ \t\n\f]")
+             (forward-line 1))
+         (beginning-of-line)
+         ;; Get some of 
+         (setq pos (point)
+               buf-list (list buf "*info-perl-var*" "*info-perl*"))
+         (while (and (not win) buf-list)
+           (setq win (get-buffer-window (car buf-list) t))
+           (setq buf-list (cdr buf-list)))
+         (or (not win)
+             (eq (window-buffer win) buf)
+             (set-window-buffer win buf))
+         (and win (setq fr2 (window-frame win)))
+         (if (or (not fr2) (eq fr1 fr2))
+             (pop-to-buffer buf)
+           (special-display-popup-frame buf) ; Make it visible
+           (select-window win))
+         (goto-char pos)               ; Needed (?!).
+         ;; Resize
+         (setq iniheight (window-height)
+               frheight (frame-height)
+               not-loner (< iniheight (1- frheight))) ; Are not alone
+         (cond ((if not-loner cperl-max-help-size 
+                  cperl-shrink-wrap-info-frame)
+                (setq height 
+                      (+ 2 
+                         (count-lines 
+                          pos 
+                          (save-excursion
+                            (if (re-search-forward
+                                 "^[ \t][^\n]*\n+\\([^ \t\n\f]\\|\\'\\)" nil t)
+                                (match-beginning 0) (point-max)))))
+                      max-height 
+                      (if not-loner
+                          (/ (* (- frheight 3) cperl-max-help-size) 100)
+                        (setq char-height (frame-char-height))
+                        ;; Non-functioning under OS/2:
+                        (if (eq char-height 1) (setq char-height 18))
+                        ;; Title, menubar, + 2 for slack
+                        (- (/ (x-display-pixel-height) char-height) 4)
+                        ))
+                (if (> height max-height) (setq height max-height))
+                ;;(message "was %s doing %s" iniheight height)
+                (if not-loner
+                    (enlarge-window (- height iniheight))
+                  (set-frame-height (window-frame win) (1+ height)))))
          (set-window-start (selected-window) pos))
       (message "No entry for %s found." command))
-    (pop-to-buffer buffer)))
+    ;;(pop-to-buffer buffer)
+    (select-window iniwin)))
 
 (defun cperl-info-on-current-command ()
   "Shows documentation for Perl command at point in other window."
@@ -3373,7 +3492,7 @@ Available styles are GNU, K&R, BSD and Whitesmith."
         imenu-extract-index-name-function 
         (index-item (save-restriction
                       (save-window-excursion
-                        (set-buffer (cperl-info-buffer))
+                        (set-buffer (cperl-info-buffer nil))
                         (setq imenu-create-index-function 
                               'imenu-default-create-index-function
                               imenu-prev-index-position-function
@@ -3660,7 +3779,7 @@ in subdirectories too."
        )
        (t
        (setq xs (string-match "\\.xs$" file))
-       (cond ((eq erase 'ignore) nil)
+       (cond ((eq erase 'ignore) (goto-char (point-max)))
              (erase (erase-buffer))
              (t
               (goto-char 1)
@@ -3671,12 +3790,13 @@ in subdirectories too."
                                    (progn 
                                      (forward-char 1)
                                      (search-forward "\f\n" nil 'toend)
-                                     (point)))
-                    (goto-char 1)))))
+                                     (point))))
+                (goto-char (point-max)))))
        (insert (cperl-find-tags file xs))))
       (if inbuffer nil         ; Delegate to the caller
        (save-buffer 0)         ; No backup
-       (initialize-new-tags-table)))))
+       (if (fboundp 'initialize-new-tags-table) ; Do we need something special in XEmacs?
+           (initialize-new-tags-table))))))
 
 (defvar cperl-tags-hier-regexp-list
   "^\\(\\(package\\)\\>\\|sub\\>[^\n]+::\\|[a-zA-Z_][a-zA-Z_0-9:]*(\C-?[^\n]+::\\|[ \t]*BOOT:\C-?[^\n]+::\\)")
@@ -3971,11 +4091,12 @@ Currently it is tuned to C and Perl syntax."
   ;;(concat "\\("
   (mapconcat
    'identity
-   '("[$@%*&][0-9a-zA-Z_:]+          ; Usual variable
+   '("[$@%*&][0-9a-zA-Z_:]+\\([ \t]*[[{]\\)?"          ; Usual variable
      "[$@]\\^[a-zA-Z]"                 ; Special variable
      "[$@][^ \n\t]"                    ; Special variable
      "-[a-zA-Z]"                       ; File test
      "\\\\[a-zA-Z0]"                   ; Special chars
+     "^=[a-z][a-zA-Z0-9_]*"            ; Pod sections
      "[-!&*+,-./<=>?\\\\^|~]+"         ; Operator
      "[a-zA-Z_0-9:]+"                  ; symbol or number
      "x="
@@ -3989,6 +4110,58 @@ Currently it is tuned to C and Perl syntax."
   "Matches places in the buffer we can find help for.")
 
 (defvar cperl-message-on-help-error t)
+(defvar cperl-help-from-timer nil)
+
+(defun cperl-word-at-point-hard ()
+  ;; Does not save-excursion
+  ;; Get to the something meaningful
+  (or (eobp) (eolp) (forward-char 1))
+  (re-search-backward "[-a-zA-Z0-9_:!&*+,-./<=>?\\\\^|~$%@]" 
+                     (save-excursion (beginning-of-line) (point))
+                     'to-beg)
+  ;;  (cond
+  ;;   ((or (eobp) (looking-at "[][ \t\n{}();,]")) ; Not at a symbol
+  ;;    (skip-chars-backward " \n\t\r({[]});,")
+  ;;    (or (bobp) (backward-char 1))))
+  ;; Try to backtrace
+  (cond
+   ((looking-at "[a-zA-Z0-9_:]")       ; symbol
+    (skip-chars-backward "[a-zA-Z0-9_:]")
+    (cond 
+     ((and (eq (preceding-char) ?^)    ; $^I
+          (eq (char-after (- (point) 2)) ?\$))
+      (forward-char -2))
+     ((memq (preceding-char) (append "*$@%&\\" nil)) ; *glob
+      (forward-char -1))
+     ((and (eq (preceding-char) ?\=)
+          (eq (current-column) 1))
+      (forward-char -1)))              ; =head1
+    (if (and (eq (preceding-char) ?\<)
+            (looking-at "\\$?[a-zA-Z0-9_:]+>")) ; <FH>
+       (forward-char -1)))
+   ((and (looking-at "=") (eq (preceding-char) ?x)) ; x=
+    (forward-char -1))
+   ((and (looking-at "\\^") (eq (preceding-char) ?\$)) ; $^I
+    (forward-char -1))
+   ((looking-at "[-!&*+,-./<=>?\\\\^|~]")
+    (skip-chars-backward "[-!&*+,-./<=>?\\\\^|~]")
+    (cond
+     ((and (eq (preceding-char) ?\$)
+          (not (eq (char-after (- (point) 2)) ?\$))) ; $-
+      (forward-char -1))
+     ((and (eq (following-char) ?\>)
+          (string-match "[a-zA-Z0-9_]" (char-to-string (preceding-char)))
+          (save-excursion
+            (forward-sexp -1)
+            (and (eq (preceding-char) ?\<)
+                 (looking-at "\\$?[a-zA-Z0-9_:]+>")))) ; <FH>
+      (search-backward "<"))))
+   ((and (eq (following-char) ?\$)
+        (eq (preceding-char) ?\<)
+        (looking-at "\\$?[a-zA-Z0-9_:]+>")) ; <$fh>
+    (forward-char -1)))
+  (if (looking-at cperl-have-help-regexp)
+      (buffer-substring (match-beginning 0) (match-end 0))))
 
 (defun cperl-get-help ()
   "Get one-line docs on the symbol at the point.
@@ -3996,56 +4169,19 @@ The data for these docs is a little bit obsolete and may be in fact longer
 than a line. Your contribution to update/shorten it is appreciated."
   (interactive)
   (save-excursion
-    ;; Get to the something meaningful
-    (or (eobp) (eolp) (forward-char 1))
-    (re-search-backward "[-a-zA-Z0-9_:!&*+,-./<=>?\\\\^|~$%@]" 
-                       (save-excursion (beginning-of-line) (point))
-                       'to-beg)
-    ;;  (cond
-    ;;   ((or (eobp) (looking-at "[][ \t\n{}();,]")) ; Not at a symbol
-    ;;    (skip-chars-backward " \n\t\r({[]});,")
-    ;;    (or (bobp) (backward-char 1))))
-    ;; Try to backtrace
-    (cond
-     ((looking-at "[a-zA-Z0-9_:]")     ; symbol
-      (skip-chars-backward "[a-zA-Z0-9_:]")
-      (cond 
-       ((and (eq (preceding-char) ?^)  ; $^I
-            (eq (char-after (- (point) 2)) ?\$))
-       (forward-char -2))
-       ((memq (preceding-char) (append "*$@%&\\" nil)) ; *glob
-       (forward-char -1)))
-      (if (and (eq (preceding-char) ?\<)
-              (looking-at "\\$?[a-zA-Z0-9_:]+>")) ; <FH>
-         (forward-char -1)))
-     ((and (looking-at "=") (eq (preceding-char) ?x)) ; x=
-      (forward-char -1))
-     ((and (looking-at "\\^") (eq (preceding-char) ?\$)) ; $^I
-      (forward-char -1))
-     ((looking-at "[-!&*+,-./<=>?\\\\^|~]")
-      (skip-chars-backward "[-!&*+,-./<=>?\\\\^|~]")
-      (cond
-       ((and (eq (preceding-char) ?\$)
-              (not (eq (char-after (- (point) 2)) ?\$))) ; $-
-         (forward-char -1))
-       ((and (eq (following-char) ?\>)
-            (string-match "[a-zA-Z0-9_]" (char-to-string (preceding-char)))
-            (save-excursion
-              (forward-sexp -1)
-              (and (eq (preceding-char) ?\<)
-                   (looking-at "\\$?[a-zA-Z0-9_:]+>")))) ; <FH>
-       (search-backward "<"))))
-     ((and (eq (following-char) ?\$)
-          (eq (preceding-char) ?\<)
-          (looking-at "\\$?[a-zA-Z0-9_:]+>")) ; <$fh>
-      (forward-char -1)))
-    ;;(or (eobp) (forward-char 1))
-    (if (looking-at cperl-have-help-regexp)
-       (cperl-describe-perl-symbol 
-        (buffer-substring (match-beginning 0) (match-end 0)))
-      (if cperl-message-on-help-error
-         (message "Nothing found for %s..." 
-                  (buffer-substring (point) (+ 5 (point))))))))
+    (let ((word (cperl-word-at-point-hard)))
+      (if word
+         (if (and cperl-help-from-timer ; Bail out if not in mainland
+                  (not (string-match "^#!\\|\\\\\\|^=" word)) ; Show help even in comments/strings.
+                  (or (memq (get-text-property (point) 'face)
+                            '(font-lock-comment-face font-lock-string-face))
+                      (memq (get-text-property (point) 'syntax-type)
+                            '(pod here-doc format))))
+             nil
+           (cperl-describe-perl-symbol word))
+       (if cperl-message-on-help-error
+           (message "Nothing found for %s..." 
+                    (buffer-substring (point) (+ 5 (point)))))))))
 
 ;;; Stolen from perl-descr.el by Johan Vromans:
 
@@ -4054,46 +4190,27 @@ than a line. Your contribution to update/shorten it is appreciated."
 
 (defun cperl-describe-perl-symbol (val)
   "Display the documentation of symbol at point, a Perl operator."
-  ;; We suppose that the current position is at the start of the symbol
-  ;; when we convert $_[5] to @_
-  (let (;;(fn (perl-symbol-at-point))
-       (enable-recursive-minibuffers t)
-       ;;val 
+  (let ((enable-recursive-minibuffers t)
        args-file regexp)
-    ;;  (interactive
-    ;;    (let ((fn (perl-symbol-at-point))
-    ;;   (enable-recursive-minibuffers t)
-    ;;   val args-file regexp)
-    ;;      (setq val (read-from-minibuffer
-    ;;           (if fn
-    ;;               (format "Symbol (default %s): " fn)
-    ;;             "Symbol: ")))
-    ;;      (if (string= val "")
-    ;;   (setq val fn))
     (cond
        ((string-match "^[&*][a-zA-Z_]" val)
         (setq val (concat (substring val 0 1) "NAME")))
-       ((looking-at "[$@][a-zA-Z_:0-9]+\\([[{]\\)")
-        (if (= ?\[ (char-after (match-beginning 1)))
-             (setq val (concat "@" (substring val 1)))
-           (setq val (concat "%" (substring val 1)))))
-       ((and (string= val "x") (looking-at "x="))
+       ((string-match "^[$@]\\([a-zA-Z_:0-9]+\\)[ \t]*\\[" val)
+        (setq val (concat "@" (substring val 1 (match-end 1)))))
+       ((string-match "^[$@]\\([a-zA-Z_:0-9]+\\)[ \t]*{" val)
+        (setq val (concat "%" (substring val 1 (match-end 1)))))
+       ((and (string= val "x") (string-match "^x=" val))
         (setq val "x="))
        ((string-match "^\\$[\C-a-\C-z]" val)
         (setq val (concat "$^" (char-to-string (+ ?A -1 (aref val 1))))))
-       ((and (string= "<" val) (looking-at "<\\$?[a-zA-Z0-9_:]+>"))
+        ((string-match "^CORE::" val)
+        (setq val "CORE::"))
+        ((string-match "^SUPER::" val)
+        (setq val "SUPER::"))
+       ((and (string= "<" val) (string-match "^<\\$?[a-zA-Z0-9_:]+>" val))
         (setq val "<NAME>")))
-;;;    (if (string-match "^[&*][a-zA-Z_]" val)
-;;;    (setq val (concat (substring val 0 1) "NAME"))
-;;;      (if (looking-at "[$@][a-zA-Z_:0-9]+\\([[{]\\)")
-;;;      (if (= ?\[ (char-after (match-beginning 1)))
-;;;          (setq val (concat "@" (substring val 1)))
-;;;        (setq val (concat "%" (substring val 1))))
-;;;    (if (and (string= val "x") (looking-at "x="))
-;;;        (setq val "x=")
-;;;      (if (looking-at "[$@][a-zA-Z_:0-9]")
-;;;          ))))
-    (setq regexp (concat "^" "\\([^a-zA-Z0-9_:]+[ \t]\\)?"
+    (setq regexp (concat "^" 
+                        "\\([^a-zA-Z0-9_:]+[ \t]+\\)?"
                         (regexp-quote val) 
                         "\\([ \t([/]\\|$\\)"))
 
@@ -4114,14 +4231,15 @@ than a line. Your contribution to update/shorten it is appreciated."
             (message "No definition for %s" val)))))))
 
 (defvar cperl-short-docs "Ignore my value"
+  ;; Perl4 version was written by Johan Vromans (jvromans@squirrel.nl)
   "# based on '@(#)@ perl-descr.el 1.9 - describe-perl-symbol' [Perl 5]
-!      Logical negation.       
-!=     Numeric inequality.
-!~     Search pattern, substitution, or translation (negated).
+! ...  Logical negation.       
+... != ...     Numeric inequality.
+... !~ ...     Search pattern, substitution, or translation (negated).
 $!     In numeric context: errno. In a string context: error string.
 $\"    The separator which joins elements of arrays interpolated in strings.
 $#     The output format for printed numbers. Initial value is %.20g.
-$$     The process number of the perl running this script. Altered (in the child process) by fork().
+$$     Process number of this script. Changes in the fork()ed child process.
 $%     The current page number of the currently selected output channel.
 
        The following variables are always local to the current block:
@@ -4147,9 +4265,9 @@ $,        The output field separator for the print operator.
 $-     The number of lines left on the page.
 $.     The current input line number of the last filehandle that was read.
 $/     The input record separator, newline by default.
-$0     The name of the file containing the perl script being executed. May be set
-$:     The set of characters after which a string may be broken to fill continuation fields (starting with ^) in a format.
-$;     The subscript separator for multi-dimensional array emulation. Default is \"\\034\".
+$0     Name of the file containing the perl script being executed. May be set.
+$:     String may be broken after these characters to fill ^-lines in a format.
+$;     Subscript separator for multi-dim array emulation. Default \"\\034\".
 $<     The real uid of this process.
 $=     The page length of the current output channel. Default is 60 lines.
 $>     The effective uid of this process.
@@ -4173,28 +4291,28 @@ $^T     The time the script was started. Used by -A/-M/-C file tests.
 $^W    True if warnings are requested (perl -w flag).
 $^X    The name under which perl was invoked (argv[0] in C-speech).
 $_     The default input and pattern-searching space.
-$|     Flag for auto-flush after write/print on the currently selected output channel. Default is 0. 
+$|     Auto-flush after write/print on the current output channel? Default 0. 
 $~     The name of the current report format.
-%      Modulo division.
-%=     Modulo division assignment.
+... % ...      Modulo division.
+... %= ...     Modulo division assignment.
 %ENV   Contains the current environment.
 %INC   List of files that have been require-d or do-ne.
 %SIG   Used to set signal handlers for various signals.
-&      Bitwise and.
-&&     Logical and.
-&&=    Logical and assignment.
-&=     Bitwise and assignment.
-*      Multiplication.
-**     Exponentiation.
-*NAME  Refers to all objects represented by NAME. *NAM1 = *NAM2 makes NAM1 a reference to NAM2.
+... & ...      Bitwise and.
+... && ...     Logical and.
+... &&= ...    Logical and assignment.
+... &= ...     Bitwise and assignment.
+... * ...      Multiplication.
+... ** ...     Exponentiation.
+*NAME  Glob: all objects refered by NAME. *NAM1 = *NAM2 aliases NAM1 to NAM2.
 &NAME(arg0, ...)       Subroutine call. Arguments go to @_.
-+      Addition.
-++     Auto-increment (magical on strings).
-+=     Addition assignment.
+... + ...      Addition.               +EXPR   Makes EXPR into scalar context.
+++     Auto-increment (magical on strings).    ++EXPR  EXPR++
+... += ...     Addition assignment.
 ,      Comma operator.
--      Subtraction.
---     Auto-decrement.
--=     Subtraction assignment.
+... - ...      Subtraction.
+--     Auto-decrement (NOT magical on strings).        --EXPR  EXPR--
+... -= ...     Subtraction assignment.
 -A     Access time in days since script started.
 -B     File is a non-text (binary) file.
 -C     Inode change time in days since script started.
@@ -4225,54 +4343,54 @@ $~      The name of the current report format.
 .      Concatenate strings.
 ..     Alternation, also range operator.
 .=     Concatenate assignment strings
-/      Division.       /PATTERN/ioxsmg Pattern match
-/=     Division assignment.
+... / ...      Division.       /PATTERN/ioxsmg Pattern match
+... /= ...     Division assignment.
 /PATTERN/ioxsmg        Pattern match.
-<      Numeric less than.      <pattern>       Glob.   See <NAME>, <> as well.
+... < ...      Numeric less than.      <pattern>       Glob.   See <NAME>, <> as well.
 <NAME> Reads line from filehandle NAME. NAME must be bareword/dollar-bareword.
 <pattern>      Glob. (Unless pattern is bareword/dollar-bareword - see <NAME>)
 <>     Reads line from union of files in @ARGV (= command line) and STDIN.
-<<     Bitwise shift left.     <<      start of HERE-DOCUMENT.
-<=     Numeric less than or equal to.
-<=>    Numeric compare.
-=      Assignment.
-==     Numeric equality.
-=~     Search pattern, substitution, or translation
->      Numeric greater than.
->=     Numeric greater than or equal to.
->>     Bitwise shift right.
->>=    Bitwise shift right assignment.
-? :    Alternation (if-then-else) operator.    ?PAT? Backwards pattern match.
-?PATTERN?      Backwards pattern match.
+... << ...     Bitwise shift left.     <<      start of HERE-DOCUMENT.
+... <= ...     Numeric less than or equal to.
+... <=> ...    Numeric compare.
+... = ...      Assignment.
+... == ...     Numeric equality.
+... =~ ...     Search pattern, substitution, or translation
+... > ...      Numeric greater than.
+... >= ...     Numeric greater than or equal to.
+... >> ...     Bitwise shift right.
+... >>= ...    Bitwise shift right assignment.
+... ? ... : ...        Condition=if-then-else operator.   ?PAT? One-time pattern match.
+?PATTERN?      One-time pattern match.
 @ARGV  Command line arguments (not including the command name - see $0).
 @INC   List of places to look for perl scripts during do/include/use.
 @_     Parameter array for subroutines. Also used by split unless in array context.
 \\     Creates a reference to whatever follows, like \$var.
 \\0    Octal char, e.g. \\033.
 \\E    Case modification terminator. See \\Q, \\L, and \\U.
-\\L    Lowercase until \\E .
-\\U    Upcase until \\E .
-\\Q    Quote metacharacters until \\E .
+\\L    Lowercase until \\E . See also \l, lc.
+\\U    Upcase until \\E . See also \u, uc.
+\\Q    Quote metacharacters until \\E . See also quotemeta.
 \\a    Alarm character (octal 007).
 \\b    Backspace character (octal 010).
 \\c    Control character, e.g. \\c[ .
 \\e    Escape character (octal 033).
 \\f    Formfeed character (octal 014).
-\\l    Lowercase of next character. See also \\L and \\u,
+\\l    Lowercase the next character. See also \\L and \\u, lcfirst,
 \\n    Newline character (octal 012).
 \\r    Return character (octal 015).
 \\t    Tab character (octal 011).
-\\u    Upcase  of next character. See also \\U and \\l,
+\\u    Upcase the next character. See also \\U and \\l, ucfirst,
 \\x    Hex character, e.g. \\x1b.
-^      Bitwise exclusive or.
-__END__        End of program source.
-__DATA__       End of program source.
+^ ...  Bitwise exclusive or.
+__END__        Ends program source.
+__DATA__       Ends program source.
 __FILE__       Current (source) filename.
 __LINE__       Current line in current source.
 ARGV   Default multi-file input filehandle. <ARGV> is a synonym for <>.
 ARGVOUT        Output filehandle with -i flag.
-BEGIN { block }        Immediately executed (during compilation) piece of code.
-END { block }  Pseudo-subroutine executed after the script finishes.
+BEGIN { ... }  Immediately executed (during compilation) piece of code.
+END { ... }    Pseudo-subroutine executed after the script finishes.
 DATA   Input filehandle for what follows after __END__ or __DATA__.
 accept(NEWSOCKET,GENERICSOCKET)
 alarm(SECONDS)
@@ -4287,20 +4405,20 @@ chown(LIST)
 chroot(FILENAME)
 close(FILEHANDLE)
 closedir(DIRHANDLE)
-cmp    String compare.
+... cmp ...    String compare.
 connect(SOCKET,NAME)
 continue of { block } continue { block }. Is executed after `next' or at end.
 cos(EXPR)
 crypt(PLAINTEXT,SALT)
-dbmclose(ASSOC_ARRAY)
-dbmopen(ASSOC,DBNAME,MODE)
+dbmclose(%HASH)
+dbmopen(%HASH,DBNAME,MODE)
 defined(EXPR)
-delete($ASSOC{KEY})
+delete($HASH{KEY})
 die(LIST)
 do { ... }|SUBR while|until EXPR       executes at least once
 do(EXPR|SUBR([LIST]))
 dump LABEL
-each(ASSOC_ARRAY)
+each(%HASH)
 endgrent
 endhostent
 endnetent
@@ -4308,7 +4426,7 @@ endprotoent
 endpwent
 endservent
 eof[([FILEHANDLE])]
-eq     String equality.
+... eq ...     String equality.
 eval(EXPR) or eval { BLOCK }
 exec(LIST)
 exit(EXPR)
@@ -4319,7 +4437,7 @@ flock(FILEHANDLE,OPERATION)
 for (EXPR;EXPR;EXPR) { ... }
 foreach [VAR] (@ARRAY) { ... }
 fork
-ge     String greater than or equal.
+... ge ...     String greater than or equal.
 getc[(FILEHANDLE)]
 getgrent
 getgrgid(GID)
@@ -4349,17 +4467,17 @@ getsockopt(SOCKET,LEVEL,OPTNAME)
 gmtime(EXPR)
 goto LABEL
 grep(EXPR,LIST)
-gt     String greater than.
+... gt ...     String greater than.
 hex(EXPR)
 if (EXPR) { ... } [ elsif (EXPR) { ... } ... ] [ else { ... } ] or EXPR if EXPR
 index(STR,SUBSTR[,OFFSET])
 int(EXPR)
 ioctl(FILEHANDLE,FUNCTION,SCALAR)
 join(EXPR,LIST)
-keys(ASSOC_ARRAY)
+keys(%HASH)
 kill(LIST)
 last [LABEL]
-le     String less than or equal.
+... le ...     String less than or equal.
 length(EXPR)
 link(OLDFILE,NEWFILE)
 listen(SOCKET,QUEUESIZE)
@@ -4367,7 +4485,7 @@ local(LIST)
 localtime(EXPR)
 log(EXPR)
 lstat(EXPR|FILEHANDLE|VAR)
-lt     String less than.
+... lt ...     String less than.
 m/PATTERN/iogsmx
 mkdir(FILENAME,MODE)
 msgctl(ID,CMD,ARG)
@@ -4375,14 +4493,14 @@ msgget(KEY,FLAGS)
 msgrcv(ID,VAR,SIZE,TYPE.FLAGS)
 msgsnd(ID,MSG,FLAGS)
 my VAR or my (VAR1,...)        Introduces a lexical variable ($VAR, @ARR, or %HASH).
-ne     String inequality.
+... ne ...     String inequality.
 next [LABEL]
 oct(EXPR)
 open(FILEHANDLE[,EXPR])
 opendir(DIRHANDLE,EXPR)
 ord(EXPR)
 pack(TEMPLATE,LIST)
-package        Introduces package context.
+package NAME   Introduces package context.
 pipe(READHANDLE,WRITEHANDLE)
 pop(ARRAY)
 print [FILEHANDLE] [(LIST)]
@@ -4441,7 +4559,7 @@ sqrt(EXPR)
 srand(EXPR)
 stat(EXPR|FILEHANDLE|VAR)
 study[(SCALAR)]
-sub [NAME [(format)]] { BODY } or      sub [NAME [(format)]];
+sub [NAME [(format)]] { BODY } sub NAME [(format)];    sub [(format)] {...}
 substr(EXPR,OFFSET[,LEN])
 symlink(OLDFILE,NEWFILE)
 syscall(LIST)
@@ -4460,23 +4578,73 @@ unless (EXPR) { ... } [ else { ... } ] or EXPR unless EXPR
 unlink(LIST)
 unpack(TEMPLATE,EXPR)
 unshift(ARRAY,LIST)
-until (EXPR) { ... } or EXPR until EXPR
+until (EXPR) { ... }                                   EXPR until EXPR
 utime(LIST)
-values(ASSOC_ARRAY)
+values(%HASH)
 vec(EXPR,OFFSET,BITS)
 wait
 waitpid(PID,FLAGS)
 wantarray
 warn(LIST)
-while  (EXPR) { ... } or EXPR while EXPR
+while  (EXPR) { ... }                                  EXPR while EXPR
 write[(EXPR|FILEHANDLE)]
-x      Repeat string or array.
-x=     Repetition assignment.
+... x ...      Repeat string or array.
+x= ... Repetition assignment.
 y/SEARCHLIST/REPLACEMENTLIST/
-|      Bitwise or.
-||     Logical or.
-~      Unary bitwise complement.
+... | ...      Bitwise or.
+... || ...     Logical or.
+~ ...          Unary bitwise complement.
 #!     OS interpreter indicator. If contains `perl', used for options, and -x.
+AUTOLOAD {...} Shorthand for `sub AUTOLOAD {...}'.
+CORE::         Prefix to access builtin function if imported sub obscures it.
+SUPER::                Prefix to lookup for a method in @ISA classes.
+DESTROY                Shorthand for `sub DESTROY {...}'.
+... EQ ...     Obsolete synonym of `eq'.
+... GE ...     Obsolete synonym of `ge'.
+... GT ...     Obsolete synonym of `gt'.
+... LE ...     Obsolete synonym of `le'.
+... LT ...     Obsolete synonym of `lt'.
+... NE ...     Obsolete synonym of `ne'.
+abs [ EXPR ]   absolute value
+... and ...            Low-precedence synonym for &&.
+bless REFERENCE [, PACKAGE]    Makes reference into an object of a package.
+chomp          Docs missing
+chr            Docs missing
+else           Part of if/unless {BLOCK} elsif {BLOCK} else {BLOCK}.
+elsif          Part of if/unless {BLOCK} elsif {BLOCK} else {BLOCK}.
+exists $HASH{KEY}      True if the key exists.
+format         Docs missing
+formline       Docs missing
+glob EXPR      Synonym of <EXPR>.
+lc [ EXPR ]    Returns lowercased EXPR.
+lcfirst [ EXPR ]       Returns EXPR with lower-cased first letter.
+map            Docs missing
+no PACKAGE [SYMBOL1, ...]  Partial reverse for `use'. Runs `unimport' method.
+... not ...            Low-precedence synonym for ! - negation.
+... or ...             Low-precedence synonym for ||.
+pos STRING    Set/Get end-position of the last match over this string, see \\G.
+quotemeta [ EXPR ]     Quote metacharacters.
+qw             Docs missing
+readline FH    Synonym of <FH>.
+readpipe CMD   Synonym of `CMD`.
+ref [ EXPR ]   Type of EXPR when dereferenced.
+sysopen                Docs missing
+tie            Docs missing
+tied           Docs missing
+uc [ EXPR ]    Returns upcased EXPR.
+ucfirst [ EXPR ]       Returns EXPR with upcased first letter.
+untie          Docs missing
+use PACKAGE [SYMBOL1, ...]  Compile-time `require' with consequent `import'.
+... xor ...            Low-precedence synonym for exclusive or.
+prototype \&SUB        Returns prototype of the function given a reference.
+=head1         Top-level heading.
+=head2         Second-level heading.
+=head3         Third-level heading (is there such?).
+=over [ NUMBER ]       Start list.
+=item [ TITLE ]                Start new item in the list.
+=back          End list.
+=cut           Switch from POD to Perl.
+=pod           Switch from Perl to POD.
 ")
 
 (defun cperl-switch-to-doc-buffer ()
@@ -4522,7 +4690,7 @@ y/SEARCHLIST/REPLACEMENTLIST/
 
       (defun cperl-get-help-defer ()
        (if (not (eq major-mode 'perl-mode)) nil
-         (let ((cperl-message-on-help-error nil))
+         (let ((cperl-message-on-help-error nil) (cperl-help-from-timer t))
            (cperl-get-help)
            (setq cperl-help-shown t))))
       (cperl-lazy-install)))
diff --git a/embed.h b/embed.h
index da0c709..82cb97f 100644 (file)
--- a/embed.h
+++ b/embed.h
@@ -1,6 +1,6 @@
 /* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
-   This file is built by embed.pl from global.sym and interp.sym.
-   Any changes made here will be lost 
+   This file is built by embed.pl from global.sym, interp.sym,
+   and compat3.sym.  Any changes made here will be lost!
 */
 
 /* (Doing namespace management portably in C is really gross.) */
 #  define EMBED 1 
 #endif
 
+/* Hide global symbols? */
+
 #ifdef EMBED
 
-/* globals we need to hide from the world */
-#define AMG_names      Perl_AMG_names
-#define Error          Perl_Error
-#define He             Perl_He
-#define No             Perl_No
-#define Sv             Perl_Sv
-#define Xpv            Perl_Xpv
-#define Yes            Perl_Yes
-#define abs_amg                Perl_abs_amg
-#define add_amg                Perl_add_amg
-#define add_ass_amg    Perl_add_ass_amg
-#define additem                Perl_additem
+#define AMG_names              Perl_AMG_names
+#define Gv_AMupdate            Perl_Gv_AMupdate
+#define No                     Perl_No
+#define Sv                     Perl_Sv
+#define Xpv                    Perl_Xpv
+#define Yes                    Perl_Yes
+#define abs_amg                        Perl_abs_amg
+#define add_amg                        Perl_add_amg
+#define add_ass_amg            Perl_add_ass_amg
+#define additem                        Perl_additem
+#define amagic_call            Perl_amagic_call
 #define amagic_generation      Perl_amagic_generation
-#define an             Perl_an
-#define atan2_amg      Perl_atan2_amg
-#define band_amg       Perl_band_amg
-#define block_type     Perl_block_type
-#define bool__amg      Perl_bool__amg
-#define bor_amg                Perl_bor_amg
-#define buf            Perl_buf
-#define bufend         Perl_bufend
-#define bufptr         Perl_bufptr
-#define bxor_amg       Perl_bxor_amg
-#define check          Perl_check
-#define collation_ix   Perl_collation_ix
-#define collation_name Perl_collation_name
+#define an                     Perl_an
+#define append_elem            Perl_append_elem
+#define append_list            Perl_append_list
+#define apply                  Perl_apply
+#define assertref              Perl_assertref
+#define atan2_amg              Perl_atan2_amg
+#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 av_len                 Perl_av_len
+#define av_make                        Perl_av_make
+#define av_pop                 Perl_av_pop
+#define av_push                        Perl_av_push
+#define av_shift               Perl_av_shift
+#define av_store               Perl_av_store
+#define av_undef               Perl_av_undef
+#define av_unshift             Perl_av_unshift
+#define band_amg               Perl_band_amg
+#define bind_match             Perl_bind_match
+#define block_end              Perl_block_end
+#define block_start            Perl_block_start
+#define bool__amg              Perl_bool__amg
+#define bor_amg                        Perl_bor_amg
+#define buf                    Perl_buf
+#define bufend                 Perl_bufend
+#define bufptr                 Perl_bufptr
+#define bxor_amg               Perl_bxor_amg
+#define calllist               Perl_calllist
+#define cando                  Perl_cando
+#define cast_ulong             Perl_cast_ulong
+#define check                  Perl_check
+#define check_uni              Perl_check_uni
+#define checkcomma             Perl_checkcomma
+#define ck_aelem               Perl_ck_aelem
+#define ck_bitop               Perl_ck_bitop
+#define ck_concat              Perl_ck_concat
+#define ck_delete              Perl_ck_delete
+#define ck_eof                 Perl_ck_eof
+#define ck_eval                        Perl_ck_eval
+#define ck_exec                        Perl_ck_exec
+#define ck_ftst                        Perl_ck_ftst
+#define ck_fun                 Perl_ck_fun
+#define ck_fun_locale          Perl_ck_fun_locale
+#define ck_glob                        Perl_ck_glob
+#define ck_grep                        Perl_ck_grep
+#define ck_gvconst             Perl_ck_gvconst
+#define ck_index               Perl_ck_index
+#define ck_lengthconst         Perl_ck_lengthconst
+#define ck_lfun                        Perl_ck_lfun
+#define ck_listiob             Perl_ck_listiob
+#define ck_match               Perl_ck_match
+#define ck_null                        Perl_ck_null
+#define ck_repeat              Perl_ck_repeat
+#define ck_require             Perl_ck_require
+#define ck_retarget            Perl_ck_retarget
+#define ck_rfun                        Perl_ck_rfun
+#define ck_rvconst             Perl_ck_rvconst
+#define ck_scmp                        Perl_ck_scmp
+#define ck_select              Perl_ck_select
+#define ck_shift               Perl_ck_shift
+#define ck_sort                        Perl_ck_sort
+#define ck_spair               Perl_ck_spair
+#define ck_split               Perl_ck_split
+#define ck_subr                        Perl_ck_subr
+#define ck_svconst             Perl_ck_svconst
+#define ck_trunc               Perl_ck_trunc
+#define collation_ix           Perl_collation_ix
+#define collation_name         Perl_collation_name
 #define collation_standard     Perl_collation_standard
-#define collxfrm_base  Perl_collxfrm_base
-#define collxfrm_mult  Perl_collxfrm_mult
-#define compcv         Perl_compcv
-#define compiling      Perl_compiling
-#define compl_amg      Perl_compl_amg
-#define comppad                Perl_comppad
-#define comppad_name   Perl_comppad_name
+#define collxfrm_base          Perl_collxfrm_base
+#define collxfrm_mult          Perl_collxfrm_mult
+#define compcv                 Perl_compcv
+#define compiling              Perl_compiling
+#define compl_amg              Perl_compl_amg
+#define comppad                        Perl_comppad
+#define comppad_name           Perl_comppad_name
 #define comppad_name_fill      Perl_comppad_name_fill
-#define comppad_name_floor     Perl_comppad_name_floor
-#define concat_amg     Perl_concat_amg
-#define concat_ass_amg Perl_concat_ass_amg
-#define cop_seqmax     Perl_cop_seqmax
-#define cos_amg                Perl_cos_amg
-#define cryptseen      Perl_cryptseen
-#define cshlen         Perl_cshlen
-#define cshname                Perl_cshname
-#define curinterp      Perl_curinterp
-#define curpad         Perl_curpad
-#define cv_const_sv    Perl_cv_const_sv
-#define dc             Perl_dc
-#define debug          Perl_debug
-#define dec_amg                Perl_dec_amg
-#define di             Perl_di
-#define div_amg                Perl_div_amg
-#define div_ass_amg    Perl_div_ass_amg
-#define do_undump      Perl_do_undump
-#define ds             Perl_ds
-#define egid           Perl_egid
-#define eq_amg         Perl_eq_amg
-#define error_count    Perl_error_count
-#define euid           Perl_euid
-#define evalseq                Perl_evalseq
-#define exp_amg                Perl_exp_amg
-#define expect         Perl_expect
-#define expectterm     Perl_expectterm
-#define fallback_amg   Perl_fallback_amg
-#define filter_add     Perl_filter_add
-#define filter_del     Perl_filter_del
-#define filter_read    Perl_filter_read
-#define fold           Perl_fold
-#define fold_locale    Perl_fold_locale
-#define freq           Perl_freq
-#define ge_amg         Perl_ge_amg
-#define gid            Perl_gid
-#define gt_amg         Perl_gt_amg
-#define hexdigit       Perl_hexdigit
-#define hints          Perl_hints
-#define in_my          Perl_in_my
-#define inc_amg                Perl_inc_amg
-#define io_close       Perl_io_close
-#define know_next      Perl_know_next
-#define last_lop       Perl_last_lop
-#define last_lop_op    Perl_last_lop_op
-#define last_uni       Perl_last_uni
-#define le_amg         Perl_le_amg
-#define lex_brackets   Perl_lex_brackets
-#define lex_brackstack Perl_lex_brackstack
-#define lex_casemods   Perl_lex_casemods
-#define lex_casestack  Perl_lex_casestack
-#define lex_defer      Perl_lex_defer
-#define lex_dojoin     Perl_lex_dojoin
-#define lex_expect     Perl_lex_expect
-#define lex_fakebrack  Perl_lex_fakebrack
-#define lex_formbrack  Perl_lex_formbrack
-#define lex_inpat      Perl_lex_inpat
-#define lex_inwhat     Perl_lex_inwhat
-#define lex_op         Perl_lex_op
-#define lex_repl       Perl_lex_repl
-#define lex_starts     Perl_lex_starts
-#define lex_state      Perl_lex_state
-#define lex_stuff      Perl_lex_stuff
-#define linestr                Perl_linestr
-#define log_amg                Perl_log_amg
-#define lshift_amg     Perl_lshift_amg
-#define lshift_ass_amg Perl_lshift_ass_amg
-#define lt_amg         Perl_lt_amg
-#define markstack      Perl_markstack
-#define markstack_max  Perl_markstack_max
-#define markstack_ptr  Perl_markstack_ptr
-#define max_intro_pending      Perl_max_intro_pending
-#define maxo           Perl_maxo
-#define min_intro_pending      Perl_min_intro_pending
-#define mod_amg                Perl_mod_amg
-#define mod_ass_amg    Perl_mod_ass_amg
-#define mult_amg       Perl_mult_amg
-#define mult_ass_amg   Perl_mult_ass_amg
-#define multi_close    Perl_multi_close
-#define multi_end      Perl_multi_end
-#define multi_open     Perl_multi_open
-#define multi_start    Perl_multi_start
-#define na             Perl_na
-#define ncmp_amg       Perl_ncmp_amg
-#define ne_amg         Perl_ne_amg
-#define neg_amg                Perl_neg_amg
-#define nexttoke       Perl_nexttoke
-#define nexttype       Perl_nexttype
-#define nexttype       Perl_nexttype
-#define nextval                Perl_nextval
-#define nextval                Perl_nextval
-#define nice_chunk     Perl_nice_chunk
-#define nice_chunk_size        Perl_nice_chunk_size
-#define no_aelem       Perl_no_aelem
-#define no_dir_func    Perl_no_dir_func
-#define no_func                Perl_no_func
-#define no_helem       Perl_no_helem
-#define no_mem         Perl_no_mem
-#define no_modify      Perl_no_modify
-#define no_myglob      Perl_no_myglob
-#define no_security    Perl_no_security
-#define no_sock_func   Perl_no_sock_func
-#define no_symref      Perl_no_symref
-#define no_usym                Perl_no_usym
-#define no_wrongref    Perl_no_wrongref
-#define nointrp                Perl_nointrp
-#define nomem          Perl_nomem
-#define nomemok                Perl_nomemok
-#define nomethod_amg   Perl_nomethod_amg
-#define not_amg                Perl_not_amg
-#define numeric_local  Perl_numeric_local
-#define numeric_name   Perl_numeric_name
-#define numeric_standard       Perl_numeric_standard
-#define numer_amg      Perl_numer_amg
-#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 origalen       Perl_origalen
-#define origenviron    Perl_origenviron
-#define osname         Perl_osname
-#define pad_reset_pending      Perl_pad_reset_pending
-#define padix          Perl_padix
-#define padix_floor    Perl_padix_floor
-#define patleave       Perl_patleave
-#define pow_amg                Perl_pow_amg
-#define pow_ass_amg    Perl_pow_ass_amg
-#define ppaddr         Perl_ppaddr
-#define profiledata    Perl_profiledata
-#define provide_ref    Perl_provide_ref
-#define psig_name      Perl_psig_name
-#define psig_ptr       Perl_psig_ptr
-#define qrt_amg                Perl_qrt_amg
-#define rcsid          Perl_rcsid
-#define reall_srchlen  Perl_reall_srchlen
-#define regarglen      Perl_regarglen
-#define regbol         Perl_regbol
-#define regcode                Perl_regcode
-#define regdummy       Perl_regdummy
-#define regendp                Perl_regendp
-#define regeol         Perl_regeol
-#define regflags       Perl_regflags
-#define reginput       Perl_reginput
-#define regkind                Perl_regkind
-#define reglastparen   Perl_reglastparen
-#define regmyendp      Perl_regmyendp
-#define regmyp_size    Perl_regmyp_size
-#define regmystartp    Perl_regmystartp
-#define regnarrate     Perl_regnarrate
-#define regnaughty     Perl_regnaughty
-#define regnpar                Perl_regnpar
-#define regparse       Perl_regparse
-#define regprecomp     Perl_regprecomp
-#define regprev                Perl_regprev
-#define regsawback     Perl_regsawback
-#define regsize                Perl_regsize
-#define regstartp      Perl_regstartp
-#define regtill                Perl_regtill
-#define regxend                Perl_regxend
-#define repeat_amg     Perl_repeat_amg
-#define repeat_ass_amg Perl_repeat_ass_amg
-#define retstack       Perl_retstack
-#define retstack_ix    Perl_retstack_ix
-#define retstack_max   Perl_retstack_max
-#define rsfp           Perl_rsfp
-#define rsfp_filters   Perl_rsfp_filters
-#define rshift_amg     Perl_rshift_amg
-#define rshift_ass_amg Perl_rshift_ass_amg
-#define save_iv                Perl_save_iv
-#define save_pptr      Perl_save_pptr
-#define savestack      Perl_savestack
-#define savestack_ix   Perl_savestack_ix
-#define savestack_max  Perl_savestack_max
-#define saw_return     Perl_saw_return
-#define scmp_amg       Perl_scmp_amg
-#define scopestack     Perl_scopestack
-#define scopestack_ix  Perl_scopestack_ix
-#define scopestack_max Perl_scopestack_max
-#define scrgv          Perl_scrgv
-#define seq_amg                Perl_seq_amg
-#define sge_amg                Perl_sge_amg
-#define sgt_amg                Perl_sgt_amg
-#define sh_path                Perl_sh_path
-#define sig_name       Perl_sig_name
-#define sig_num                Perl_sig_num
-#define sighandler     Perl_sighandler
-#define simple         Perl_simple
-#define sin_amg                Perl_sin_amg
-#define sle_amg                Perl_sle_amg
-#define slt_amg                Perl_slt_amg
-#define sne_amg                Perl_sne_amg
-#define stack_base     Perl_stack_base
-#define stack_max      Perl_stack_max
-#define stack_sp       Perl_stack_sp
-#define statbuf                Perl_statbuf
-#define string_amg     Perl_string_amg
-#define sub_generation Perl_sub_generation
-#define subline                Perl_subline
-#define subname                Perl_subname
-#define subtr_amg      Perl_subtr_amg
-#define subtr_ass_amg  Perl_subtr_ass_amg
-#define sv_no          Perl_sv_no
-#define sv_undef       Perl_sv_undef
-#define sv_yes         Perl_sv_yes
-#define thisexpr       Perl_thisexpr
-#define timesbuf       Perl_timesbuf
-#define tokenbuf       Perl_tokenbuf
-#define uid            Perl_uid
-#define varies         Perl_varies
-#define vert           Perl_vert
-#define vtbl_amagic    Perl_vtbl_amagic
-#define vtbl_amagicelem        Perl_vtbl_amagicelem
-#define vtbl_arylen    Perl_vtbl_arylen
-#define vtbl_bm                Perl_vtbl_bm
-#define vtbl_collxfrm  Perl_vtbl_collxfrm
-#define vtbl_dbline    Perl_vtbl_dbline
-#define vtbl_env       Perl_vtbl_env
-#define vtbl_envelem   Perl_vtbl_envelem
-#define vtbl_fm                Perl_vtbl_fm
-#define vtbl_glob      Perl_vtbl_glob
-#define vtbl_isa       Perl_vtbl_isa
-#define vtbl_isaelem   Perl_vtbl_isaelem
-#define vtbl_mglob     Perl_vtbl_mglob
-#define vtbl_nkeys     Perl_vtbl_nkeys
-#define vtbl_pack      Perl_vtbl_pack
-#define vtbl_packelem  Perl_vtbl_packelem
-#define vtbl_pos       Perl_vtbl_pos
-#define vtbl_sig       Perl_vtbl_sig
-#define vtbl_sigelem   Perl_vtbl_sigelem
-#define vtbl_substr    Perl_vtbl_substr
-#define vtbl_sv                Perl_vtbl_sv
-#define vtbl_taint     Perl_vtbl_taint
-#define vtbl_uvar      Perl_vtbl_uvar
-#define vtbl_vec       Perl_vtbl_vec
-#define warn_nl                Perl_warn_nl
-#define warn_nosemi    Perl_warn_nosemi
-#define warn_reserved  Perl_warn_reserved
-#define warn_uninit    Perl_warn_uninit
-#define watchaddr      Perl_watchaddr
-#define watchok                Perl_watchok
-#define yychar         Perl_yychar
-#define yycheck                Perl_yycheck
-#define yydebug                Perl_yydebug
-#define yydefred       Perl_yydefred
-#define yydgoto                Perl_yydgoto
-#define yyerrflag      Perl_yyerrflag
-#define yygindex       Perl_yygindex
-#define yylen          Perl_yylen
-#define yylhs          Perl_yylhs
-#define yylval         Perl_yylval
-#define yyname         Perl_yyname
-#define yynerrs                Perl_yynerrs
-#define yyrindex       Perl_yyrindex
-#define yyrule         Perl_yyrule
-#define yysindex       Perl_yysindex
-#define yytable                Perl_yytable
-#define yyval          Perl_yyval
-#define Gv_AMupdate    Perl_Gv_AMupdate
-#define SvTRUE         Perl_SvTRUE
-#define SvIV           Perl_SvIV
-#define SvUV           Perl_SvUV
-#define SvNV           Perl_SvNV
-#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 av_len         Perl_av_len
-#define av_make                Perl_av_make
-#define av_pop         Perl_av_pop
-#define av_push                Perl_av_push
-#define av_shift       Perl_av_shift
-#define av_store       Perl_av_store
-#define av_undef       Perl_av_undef
-#define av_unshift     Perl_av_unshift
-#define bind_match     Perl_bind_match
-#define block_end      Perl_block_end
-#define block_start    Perl_block_start
-#define boot_core_UNIVERSAL    Perl_boot_core_UNIVERSAL
-#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 ck_aelem       Perl_ck_aelem
-#define ck_bitop       Perl_ck_bitop
-#define ck_concat      Perl_ck_concat
-#define ck_delete      Perl_ck_delete
-#define ck_eof         Perl_ck_eof
-#define ck_eval                Perl_ck_eval
-#define ck_exec                Perl_ck_exec
-#define ck_ftst                Perl_ck_ftst
-#define ck_fun         Perl_ck_fun
-#define ck_fun_locale  Perl_ck_fun_locale
-#define ck_glob                Perl_ck_glob
-#define ck_grep                Perl_ck_grep
-#define ck_gvconst     Perl_ck_gvconst
-#define ck_index       Perl_ck_index
-#define ck_lengthconst Perl_ck_lengthconst
-#define ck_lfun                Perl_ck_lfun
-#define ck_listiob     Perl_ck_listiob
-#define ck_match       Perl_ck_match
-#define ck_null                Perl_ck_null
-#define ck_repeat      Perl_ck_repeat
-#define ck_require     Perl_ck_require
-#define ck_retarget    Perl_ck_retarget
-#define ck_rfun                Perl_ck_rfun
-#define ck_rvconst     Perl_ck_rvconst
-#define ck_scmp                Perl_ck_scmp
-#define ck_select      Perl_ck_select
-#define ck_shift       Perl_ck_shift
-#define ck_sort                Perl_ck_sort
-#define ck_spair       Perl_ck_spair
-#define ck_split       Perl_ck_split
-#define ck_subr                Perl_ck_subr
-#define ck_svconst     Perl_ck_svconst
-#define ck_trunc       Perl_ck_trunc
-#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_exec                Perl_do_exec
-#define do_execfree    Perl_do_execfree
-#define do_ipcctl      Perl_do_ipcctl
-#define do_ipcget      Perl_do_ipcget
-#define do_join                Perl_do_join
-#define do_kv          Perl_do_kv
-#define do_msgrcv      Perl_do_msgrcv
-#define do_msgsnd      Perl_do_msgsnd
-#define do_open                Perl_do_open
-#define do_pipe                Perl_do_pipe
-#define do_print       Perl_do_print
-#define do_readline    Perl_do_readline
-#define do_seek                Perl_do_seek
-#define do_semop       Perl_do_semop
-#define do_shmio       Perl_do_shmio
-#define do_sprintf     Perl_do_sprintf
-#define do_tell                Perl_do_tell
-#define do_trans       Perl_do_trans
-#define do_vecset      Perl_do_vecset
-#define do_vop         Perl_do_vop
-#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 dump_sub       Perl_dump_sub
-#define fbm_compile    Perl_fbm_compile
-#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 concat_amg             Perl_concat_amg
+#define concat_ass_amg         Perl_concat_ass_amg
+#define convert                        Perl_convert
+#define cop_seqmax             Perl_cop_seqmax
+#define cos_amg                        Perl_cos_amg
+#define cpytill                        Perl_cpytill
+#define croak                  Perl_croak
+#define cryptseen              Perl_cryptseen
+#define cshlen                 Perl_cshlen
+#define cshname                        Perl_cshname
+#define curinterp              Perl_curinterp
+#define curpad                 Perl_curpad
+#define cv_clone               Perl_cv_clone
+#define cv_const_sv            Perl_cv_const_sv
+#define cv_undef               Perl_cv_undef
+#define cx_dump                        Perl_cx_dump
+#define cxinc                  Perl_cxinc
+#define dc                     Perl_dc
+#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 dec_amg                        Perl_dec_amg
+#define deprecate              Perl_deprecate
+#define di                     Perl_di
+#define die                    Perl_die
+#define die_where              Perl_die_where
+#define div_amg                        Perl_div_amg
+#define div_ass_amg            Perl_div_ass_amg
+#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_exec                        Perl_do_exec
+#define do_execfree            Perl_do_execfree
+#define do_ipcctl              Perl_do_ipcctl
+#define do_ipcget              Perl_do_ipcget
+#define do_join                        Perl_do_join
+#define do_kv                  Perl_do_kv
+#define do_msgrcv              Perl_do_msgrcv
+#define do_msgsnd              Perl_do_msgsnd
+#define do_open                        Perl_do_open
+#define do_pipe                        Perl_do_pipe
+#define do_print               Perl_do_print
+#define do_readline            Perl_do_readline
+#define do_seek                        Perl_do_seek
+#define do_semop               Perl_do_semop
+#define do_shmio               Perl_do_shmio
+#define do_sprintf             Perl_do_sprintf
+#define do_tell                        Perl_do_tell
+#define do_trans               Perl_do_trans
+#define do_vecset              Perl_do_vecset
+#define do_vop                 Perl_do_vop
+#define doeval                 Perl_doeval
+#define dofindlabel            Perl_dofindlabel
+#define dopoptoeval            Perl_dopoptoeval
+#define dounwind               Perl_dounwind
+#define dowantarray            Perl_dowantarray
+#define ds                     Perl_ds
+#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 dump_sub               Perl_dump_sub
+#define egid                   Perl_egid
+#define eq_amg                 Perl_eq_amg
+#define error_count            Perl_error_count
+#define euid                   Perl_euid
+#define evalseq                        Perl_evalseq
+#define exp_amg                        Perl_exp_amg
+#define expect                 Perl_expect
+#define expectterm             Perl_expectterm
+#define fallback_amg           Perl_fallback_amg
+#define fbm_compile            Perl_fbm_compile
+#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                   Perl_fold
+#define fold_constants         Perl_fold_constants
+#define fold_locale            Perl_fold_locale
+#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 freq                   Perl_freq
+#define ge_amg                 Perl_ge_amg
 #define gen_constant_list      Perl_gen_constant_list
-#define gp_free                Perl_gp_free
-#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_efullname3  Perl_gv_efullname3
-#define gv_fetchfile   Perl_gv_fetchfile
-#define gv_fetchmeth   Perl_gv_fetchmeth
-#define gv_fetchmethod Perl_gv_fetchmethod
-#define gv_fetchpv     Perl_gv_fetchpv
-#define gv_fullname    Perl_gv_fullname
-#define gv_fullname3   Perl_gv_fullname3
-#define gv_init                Perl_gv_init
-#define gv_stashpv     Perl_gv_stashpv
-#define gv_stashpvn    Perl_gv_stashpvn
-#define gv_stashsv     Perl_gv_stashsv
-#define he_delayfree   Perl_he_delayfree
-#define he_free                Perl_he_free
-#define he_root                Perl_he_root
-#define hoistmust      Perl_hoistmust
-#define hv_clear       Perl_hv_clear
-#define hv_delete      Perl_hv_delete
-#define hv_delete_ent  Perl_hv_delete_ent
-#define hv_exists      Perl_hv_exists
-#define hv_exists_ent  Perl_hv_exists_ent
-#define hv_fetch       Perl_hv_fetch
-#define hv_fetch_ent   Perl_hv_fetch_ent
-#define hv_iterinit    Perl_hv_iterinit
-#define hv_iterkey     Perl_hv_iterkey
-#define hv_iterkeysv   Perl_hv_iterkeysv
-#define hv_iternext    Perl_hv_iternext
-#define hv_iternextsv  Perl_hv_iternextsv
-#define hv_iterval     Perl_hv_iterval
-#define hv_ksplit      Perl_hv_ksplit
-#define hv_magic       Perl_hv_magic
-#define hv_stashpv     Perl_hv_stashpv
-#define hv_store       Perl_hv_store
-#define hv_store_ent   Perl_hv_store_ent
-#define hv_undef       Perl_hv_undef
-#define ibcmp          Perl_ibcmp
-#define ibcmp_locale   Perl_ibcmp_locale
-#define ingroup                Perl_ingroup
-#define instr          Perl_instr
-#define intro_my       Perl_intro_my
-#define intuit_more    Perl_intuit_more
-#define invert         Perl_invert
-#define jmaybe         Perl_jmaybe
-#define keyword                Perl_keyword
-#define leave_scope    Perl_leave_scope
-#define lex_end                Perl_lex_end
-#define lex_start      Perl_lex_start
-#define linklist       Perl_linklist
-#define list           Perl_list
-#define listkids       Perl_listkids
-#define localize       Perl_localize
+#define gid                    Perl_gid
+#define gp_free                        Perl_gp_free
+#define gp_ref                 Perl_gp_ref
+#define gt_amg                 Perl_gt_amg
+#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_efullname3          Perl_gv_efullname3
+#define gv_fetchfile           Perl_gv_fetchfile
+#define gv_fetchmeth           Perl_gv_fetchmeth
+#define gv_fetchmethod         Perl_gv_fetchmethod
+#define gv_fetchpv             Perl_gv_fetchpv
+#define gv_fullname            Perl_gv_fullname
+#define gv_fullname3           Perl_gv_fullname3
+#define gv_init                        Perl_gv_init
+#define gv_stashpv             Perl_gv_stashpv
+#define gv_stashpvn            Perl_gv_stashpvn
+#define gv_stashsv             Perl_gv_stashsv
+#define he_delayfree           Perl_he_delayfree
+#define he_free                        Perl_he_free
+#define he_root                        Perl_he_root
+#define hexdigit               Perl_hexdigit
+#define hints                  Perl_hints
+#define hoistmust              Perl_hoistmust
+#define hv_clear               Perl_hv_clear
+#define hv_delete              Perl_hv_delete
+#define hv_delete_ent          Perl_hv_delete_ent
+#define hv_exists              Perl_hv_exists
+#define hv_exists_ent          Perl_hv_exists_ent
+#define hv_fetch               Perl_hv_fetch
+#define hv_fetch_ent           Perl_hv_fetch_ent
+#define hv_iterinit            Perl_hv_iterinit
+#define hv_iterkey             Perl_hv_iterkey
+#define hv_iterkeysv           Perl_hv_iterkeysv
+#define hv_iternext            Perl_hv_iternext
+#define hv_iternextsv          Perl_hv_iternextsv
+#define hv_iterval             Perl_hv_iterval
+#define hv_ksplit              Perl_hv_ksplit
+#define hv_magic               Perl_hv_magic
+#define hv_stashpv             Perl_hv_stashpv
+#define hv_store               Perl_hv_store
+#define hv_store_ent           Perl_hv_store_ent
+#define hv_undef               Perl_hv_undef
+#define ibcmp                  Perl_ibcmp
+#define ibcmp_locale           Perl_ibcmp_locale
+#define in_my                  Perl_in_my
+#define inc_amg                        Perl_inc_amg
+#define ingroup                        Perl_ingroup
+#define instr                  Perl_instr
+#define intro_my               Perl_intro_my
+#define intuit_more            Perl_intuit_more
+#define invert                 Perl_invert
+#define io_close               Perl_io_close
+#define jmaybe                 Perl_jmaybe
+#define keyword                        Perl_keyword
+#define know_next              Perl_know_next
+#define last_lop               Perl_last_lop
+#define last_lop_op            Perl_last_lop_op
+#define last_uni               Perl_last_uni
+#define le_amg                 Perl_le_amg
+#define leave_scope            Perl_leave_scope
+#define lex_brackets           Perl_lex_brackets
+#define lex_brackstack         Perl_lex_brackstack
+#define lex_casemods           Perl_lex_casemods
+#define lex_casestack          Perl_lex_casestack
+#define lex_defer              Perl_lex_defer
+#define lex_dojoin             Perl_lex_dojoin
+#define lex_end                        Perl_lex_end
+#define lex_expect             Perl_lex_expect
+#define lex_fakebrack          Perl_lex_fakebrack
+#define lex_formbrack          Perl_lex_formbrack
+#define lex_inpat              Perl_lex_inpat
+#define lex_inwhat             Perl_lex_inwhat
+#define lex_op                 Perl_lex_op
+#define lex_repl               Perl_lex_repl
+#define lex_start              Perl_lex_start
+#define lex_starts             Perl_lex_starts
+#define lex_state              Perl_lex_state
+#define lex_stuff              Perl_lex_stuff
+#define linestr                        Perl_linestr
+#define linklist               Perl_linklist
+#define list                   Perl_list
+#define listkids               Perl_listkids
+#define localize               Perl_localize
+#define log_amg                        Perl_log_amg
 #define looks_like_number      Perl_looks_like_number
-#define magic_clearenv Perl_magic_clearenv
-#define magic_clearpack        Perl_magic_clearpack
-#define magic_clearsig Perl_magic_clearsig
+#define lshift_amg             Perl_lshift_amg
+#define lshift_ass_amg         Perl_lshift_ass_amg
+#define lt_amg                 Perl_lt_amg
+#define magic_clearenv         Perl_magic_clearenv
+#define magic_clearpack                Perl_magic_clearpack
+#define magic_clearsig         Perl_magic_clearsig
 #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 magic_getpack  Perl_magic_getpack
-#define magic_getpos   Perl_magic_getpos
-#define magic_getsig   Perl_magic_getsig
-#define magic_gettaint Perl_magic_gettaint
-#define magic_getuvar  Perl_magic_getuvar
-#define magic_len      Perl_magic_len
-#define magic_nextpack Perl_magic_nextpack
-#define magic_set      Perl_magic_set
-#define magic_setamagic        Perl_magic_setamagic
-#define magic_setarylen        Perl_magic_setarylen
-#define magic_setbm    Perl_magic_setbm
+#define magic_freevivary       Perl_magic_freevivary
+#define magic_get              Perl_magic_get
+#define magic_getarylen                Perl_magic_getarylen
+#define magic_getglob          Perl_magic_getglob
+#define magic_getpack          Perl_magic_getpack
+#define magic_getpos           Perl_magic_getpos
+#define magic_getsig           Perl_magic_getsig
+#define magic_gettaint         Perl_magic_gettaint
+#define magic_getuvar          Perl_magic_getuvar
+#define magic_len              Perl_magic_len
+#define magic_nextpack         Perl_magic_nextpack
+#define magic_set              Perl_magic_set
+#define magic_setamagic                Perl_magic_setamagic
+#define magic_setarylen                Perl_magic_setarylen
+#define magic_setbm            Perl_magic_setbm
 #define magic_setcollxfrm      Perl_magic_setcollxfrm
-#define magic_setdbline        Perl_magic_setdbline
-#define magic_setenv   Perl_magic_setenv
-#define magic_setfm    Perl_magic_setfm
-#define magic_setglob  Perl_magic_setglob
-#define magic_setisa   Perl_magic_setisa
-#define magic_setmglob Perl_magic_setmglob
-#define magic_setnkeys Perl_magic_setnkeys
-#define magic_setpack  Perl_magic_setpack
-#define magic_setpos   Perl_magic_setpos
-#define magic_setsig   Perl_magic_setsig
-#define magic_setsubstr        Perl_magic_setsubstr
-#define magic_settaint Perl_magic_settaint
-#define magic_setuvar  Perl_magic_setuvar
-#define magic_setvec   Perl_magic_setvec
-#define magic_wipepack Perl_magic_wipepack
-#define magicname      Perl_magicname
-#define markstack_grow Perl_markstack_grow
-#define mem_collxfrm   Perl_mem_collxfrm
-#define mess           Perl_mess
-#define mg_clear       Perl_mg_clear
-#define mg_copy                Perl_mg_copy
-#define mg_find                Perl_mg_find
-#define mg_free                Perl_mg_free
-#define mg_get         Perl_mg_get
-#define mg_len         Perl_mg_len
-#define mg_magical     Perl_mg_magical
-#define mg_set         Perl_mg_set
-#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_chsize      Perl_my_chsize
-#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 newCVREF       Perl_newCVREF
-#define newFORM                Perl_newFORM
-#define newFOROP       Perl_newFOROP
-#define newGVOP                Perl_newGVOP
-#define newGVREF       Perl_newGVREF
-#define newGVgen       Perl_newGVgen
-#define newHV          Perl_newHV
-#define newHVREF       Perl_newHVREF
-#define newIO          Perl_newIO
-#define newLISTOP      Perl_newLISTOP
-#define newLOGOP       Perl_newLOGOP
-#define newLOOPEX      Perl_newLOOPEX
-#define newLOOPOP      Perl_newLOOPOP
-#define newNULLLIST    Perl_newNULLLIST
-#define newOP          Perl_newOP
-#define newPMOP                Perl_newPMOP
-#define newPROG                Perl_newPROG
-#define newPVOP                Perl_newPVOP
-#define newRANGE       Perl_newRANGE
-#define newRV          Perl_newRV
-#define newSLICEOP     Perl_newSLICEOP
-#define newSTATEOP     Perl_newSTATEOP
-#define newSUB         Perl_newSUB
-#define newSV          Perl_newSV
-#define newSVOP                Perl_newSVOP
-#define newSVREF       Perl_newSVREF
-#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 newXS          Perl_newXS
-#define newXSUB                Perl_newXSUB
-#define nextargv       Perl_nextargv
-#define ninstr         Perl_ninstr
-#define no_fh_allowed  Perl_no_fh_allowed
-#define no_op          Perl_no_op
-#define oopsAV         Perl_oopsAV
-#define oopsCV         Perl_oopsCV
-#define oopsHV         Perl_oopsHV
-#define op_free                Perl_op_free
-#define package                Perl_package
-#define pad_alloc      Perl_pad_alloc
-#define pad_allocmy    Perl_pad_allocmy
-#define pad_findmy     Perl_pad_findmy
-#define pad_free       Perl_pad_free
-#define pad_leavemy    Perl_pad_leavemy
-#define pad_reset      Perl_pad_reset
-#define pad_sv         Perl_pad_sv
-#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 pop_scope      Perl_pop_scope
-#define pp_aassign     Perl_pp_aassign
-#define pp_abs         Perl_pp_abs
-#define pp_accept      Perl_pp_accept
-#define pp_add         Perl_pp_add
-#define pp_aelem       Perl_pp_aelem
-#define pp_aelemfast   Perl_pp_aelemfast
-#define pp_alarm       Perl_pp_alarm
-#define pp_and         Perl_pp_and
-#define pp_andassign   Perl_pp_andassign
-#define pp_anoncode    Perl_pp_anoncode
-#define pp_anonhash    Perl_pp_anonhash
-#define pp_anonlist    Perl_pp_anonlist
-#define pp_aslice      Perl_pp_aslice
-#define pp_atan2       Perl_pp_atan2
-#define pp_av2arylen   Perl_pp_av2arylen
-#define pp_backtick    Perl_pp_backtick
-#define pp_bind                Perl_pp_bind
-#define pp_binmode     Perl_pp_binmode
-#define pp_bit_and     Perl_pp_bit_and
-#define pp_bit_or      Perl_pp_bit_or
-#define pp_bit_xor     Perl_pp_bit_xor
-#define pp_bless       Perl_pp_bless
-#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_chr         Perl_pp_chr
-#define pp_chroot      Perl_pp_chroot
-#define pp_close       Perl_pp_close
-#define pp_closedir    Perl_pp_closedir
-#define pp_complement  Perl_pp_complement
-#define pp_concat      Perl_pp_concat
-#define pp_cond_expr   Perl_pp_cond_expr
-#define pp_connect     Perl_pp_connect
-#define pp_const       Perl_pp_const
-#define pp_cos         Perl_pp_cos
-#define pp_crypt       Perl_pp_crypt
-#define pp_cswitch     Perl_pp_cswitch
-#define pp_dbmclose    Perl_pp_dbmclose
-#define pp_dbmopen     Perl_pp_dbmopen
-#define pp_dbstate     Perl_pp_dbstate
-#define pp_defined     Perl_pp_defined
-#define pp_delete      Perl_pp_delete
-#define pp_die         Perl_pp_die
-#define pp_divide      Perl_pp_divide
-#define pp_dofile      Perl_pp_dofile
-#define pp_dump                Perl_pp_dump
-#define pp_each                Perl_pp_each
-#define pp_egrent      Perl_pp_egrent
-#define pp_ehostent    Perl_pp_ehostent
-#define pp_enetent     Perl_pp_enetent
-#define pp_enter       Perl_pp_enter
-#define pp_entereval   Perl_pp_entereval
-#define pp_enteriter   Perl_pp_enteriter
-#define pp_enterloop   Perl_pp_enterloop
-#define pp_entersub    Perl_pp_entersub
-#define pp_entersubr   Perl_pp_entersubr
-#define pp_entertry    Perl_pp_entertry
-#define pp_enterwrite  Perl_pp_enterwrite
-#define pp_eof         Perl_pp_eof
-#define pp_eprotoent   Perl_pp_eprotoent
-#define pp_epwent      Perl_pp_epwent
-#define pp_eq          Perl_pp_eq
-#define pp_eservent    Perl_pp_eservent
-#define pp_evalonce    Perl_pp_evalonce
-#define pp_exec                Perl_pp_exec
-#define pp_exists      Perl_pp_exists
-#define pp_exit                Perl_pp_exit
-#define pp_exp         Perl_pp_exp
-#define pp_fcntl       Perl_pp_fcntl
-#define pp_fileno      Perl_pp_fileno
-#define pp_flip                Perl_pp_flip
-#define pp_flock       Perl_pp_flock
-#define pp_flop                Perl_pp_flop
-#define pp_fork                Perl_pp_fork
-#define pp_formline    Perl_pp_formline
-#define pp_ftatime     Perl_pp_ftatime
-#define pp_ftbinary    Perl_pp_ftbinary
-#define pp_ftblk       Perl_pp_ftblk
-#define pp_ftchr       Perl_pp_ftchr
-#define pp_ftctime     Perl_pp_ftctime
-#define pp_ftdir       Perl_pp_ftdir
-#define pp_fteexec     Perl_pp_fteexec
-#define pp_fteowned    Perl_pp_fteowned
-#define pp_fteread     Perl_pp_fteread
-#define pp_ftewrite    Perl_pp_ftewrite
-#define pp_ftfile      Perl_pp_ftfile
-#define pp_ftis                Perl_pp_ftis
-#define pp_ftlink      Perl_pp_ftlink
-#define pp_ftmtime     Perl_pp_ftmtime
-#define pp_ftpipe      Perl_pp_ftpipe
-#define pp_ftrexec     Perl_pp_ftrexec
-#define pp_ftrowned    Perl_pp_ftrowned
-#define pp_ftrread     Perl_pp_ftrread
-#define pp_ftrwrite    Perl_pp_ftrwrite
-#define pp_ftsgid      Perl_pp_ftsgid
-#define pp_ftsize      Perl_pp_ftsize
-#define pp_ftsock      Perl_pp_ftsock
-#define pp_ftsuid      Perl_pp_ftsuid
-#define pp_ftsvtx      Perl_pp_ftsvtx
-#define pp_fttext      Perl_pp_fttext
-#define pp_fttty       Perl_pp_fttty
-#define pp_ftzero      Perl_pp_ftzero
-#define pp_ge          Perl_pp_ge
-#define pp_gelem       Perl_pp_gelem
-#define pp_getc                Perl_pp_getc
-#define pp_getlogin    Perl_pp_getlogin
-#define pp_getpeername Perl_pp_getpeername
-#define pp_getpgrp     Perl_pp_getpgrp
-#define pp_getppid     Perl_pp_getppid
-#define pp_getpriority Perl_pp_getpriority
-#define pp_getsockname Perl_pp_getsockname
-#define pp_ggrent      Perl_pp_ggrent
-#define pp_ggrgid      Perl_pp_ggrgid
-#define pp_ggrnam      Perl_pp_ggrnam
-#define pp_ghbyaddr    Perl_pp_ghbyaddr
-#define pp_ghbyname    Perl_pp_ghbyname
-#define pp_ghostent    Perl_pp_ghostent
-#define pp_glob                Perl_pp_glob
-#define pp_gmtime      Perl_pp_gmtime
-#define pp_gnbyaddr    Perl_pp_gnbyaddr
-#define pp_gnbyname    Perl_pp_gnbyname
-#define pp_gnetent     Perl_pp_gnetent
-#define pp_goto                Perl_pp_goto
-#define pp_gpbyname    Perl_pp_gpbyname
-#define pp_gpbynumber  Perl_pp_gpbynumber
-#define pp_gprotoent   Perl_pp_gprotoent
-#define pp_gpwent      Perl_pp_gpwent
-#define pp_gpwnam      Perl_pp_gpwnam
-#define pp_gpwuid      Perl_pp_gpwuid
-#define pp_grepstart   Perl_pp_grepstart
-#define pp_grepwhile   Perl_pp_grepwhile
-#define pp_gsbyname    Perl_pp_gsbyname
-#define pp_gsbyport    Perl_pp_gsbyport
-#define pp_gservent    Perl_pp_gservent
-#define pp_gsockopt    Perl_pp_gsockopt
-#define pp_gt          Perl_pp_gt
-#define pp_gv          Perl_pp_gv
-#define pp_gvsv                Perl_pp_gvsv
-#define pp_helem       Perl_pp_helem
-#define pp_hex         Perl_pp_hex
-#define pp_hslice      Perl_pp_hslice
-#define pp_i_add       Perl_pp_i_add
-#define pp_i_divide    Perl_pp_i_divide
-#define pp_i_eq                Perl_pp_i_eq
-#define pp_i_ge                Perl_pp_i_ge
-#define pp_i_gt                Perl_pp_i_gt
-#define pp_i_le                Perl_pp_i_le
-#define pp_i_lt                Perl_pp_i_lt
-#define pp_i_modulo    Perl_pp_i_modulo
-#define pp_i_multiply  Perl_pp_i_multiply
-#define pp_i_ncmp      Perl_pp_i_ncmp
-#define pp_i_ne                Perl_pp_i_ne
-#define pp_i_negate    Perl_pp_i_negate
-#define pp_i_subtract  Perl_pp_i_subtract
-#define pp_index       Perl_pp_index
-#define pp_indread     Perl_pp_indread
-#define pp_int         Perl_pp_int
-#define pp_interp      Perl_pp_interp
-#define pp_ioctl       Perl_pp_ioctl
-#define pp_iter                Perl_pp_iter
-#define pp_join                Perl_pp_join
-#define pp_keys                Perl_pp_keys
-#define pp_kill                Perl_pp_kill
-#define pp_last                Perl_pp_last
-#define pp_lc          Perl_pp_lc
-#define pp_lcfirst     Perl_pp_lcfirst
-#define pp_le          Perl_pp_le
-#define pp_leave       Perl_pp_leave
-#define pp_leaveeval   Perl_pp_leaveeval
-#define pp_leaveloop   Perl_pp_leaveloop
-#define pp_leavesub    Perl_pp_leavesub
-#define pp_leavetry    Perl_pp_leavetry
-#define pp_leavewrite  Perl_pp_leavewrite
-#define pp_left_shift  Perl_pp_left_shift
-#define pp_length      Perl_pp_length
-#define pp_lineseq     Perl_pp_lineseq
-#define pp_link                Perl_pp_link
-#define pp_list                Perl_pp_list
-#define pp_listen      Perl_pp_listen
-#define pp_localtime   Perl_pp_localtime
-#define pp_log         Perl_pp_log
-#define pp_lslice      Perl_pp_lslice
-#define pp_lstat       Perl_pp_lstat
-#define pp_lt          Perl_pp_lt
-#define pp_map         Perl_pp_map
-#define pp_mapstart    Perl_pp_mapstart
-#define pp_mapwhile    Perl_pp_mapwhile
-#define pp_match       Perl_pp_match
-#define pp_method      Perl_pp_method
-#define pp_mkdir       Perl_pp_mkdir
-#define pp_modulo      Perl_pp_modulo
-#define pp_msgctl      Perl_pp_msgctl
-#define pp_msgget      Perl_pp_msgget
-#define pp_msgrcv      Perl_pp_msgrcv
-#define pp_msgsnd      Perl_pp_msgsnd
-#define pp_multiply    Perl_pp_multiply
-#define pp_ncmp                Perl_pp_ncmp
-#define pp_ne          Perl_pp_ne
-#define pp_negate      Perl_pp_negate
-#define pp_next                Perl_pp_next
-#define pp_nextstate   Perl_pp_nextstate
-#define pp_not         Perl_pp_not
-#define pp_nswitch     Perl_pp_nswitch
-#define pp_null                Perl_pp_null
-#define pp_oct         Perl_pp_oct
-#define pp_open                Perl_pp_open
-#define pp_open_dir    Perl_pp_open_dir
-#define pp_or          Perl_pp_or
-#define pp_orassign    Perl_pp_orassign
-#define pp_ord         Perl_pp_ord
-#define pp_pack                Perl_pp_pack
-#define pp_padany      Perl_pp_padany
-#define pp_padav       Perl_pp_padav
-#define pp_padhv       Perl_pp_padhv
-#define pp_padsv       Perl_pp_padsv
-#define pp_pipe_op     Perl_pp_pipe_op
-#define pp_pop         Perl_pp_pop
-#define pp_pos         Perl_pp_pos
-#define pp_postdec     Perl_pp_postdec
-#define pp_postinc     Perl_pp_postinc
-#define pp_pow         Perl_pp_pow
-#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_pushre      Perl_pp_pushre
-#define pp_quotemeta   Perl_pp_quotemeta
-#define pp_rand                Perl_pp_rand
-#define pp_range       Perl_pp_range
-#define pp_rcatline    Perl_pp_rcatline
-#define pp_read                Perl_pp_read
-#define pp_readdir     Perl_pp_readdir
-#define pp_readline    Perl_pp_readline
-#define pp_readlink    Perl_pp_readlink
-#define pp_recv                Perl_pp_recv
-#define pp_redo                Perl_pp_redo
-#define pp_ref         Perl_pp_ref
-#define pp_refgen      Perl_pp_refgen
-#define pp_regcmaybe   Perl_pp_regcmaybe
-#define pp_regcomp     Perl_pp_regcomp
-#define pp_rename      Perl_pp_rename
-#define pp_repeat      Perl_pp_repeat
-#define pp_require     Perl_pp_require
-#define pp_reset       Perl_pp_reset
-#define pp_return      Perl_pp_return
-#define pp_reverse     Perl_pp_reverse
-#define pp_rewinddir   Perl_pp_rewinddir
-#define pp_right_shift Perl_pp_right_shift
-#define pp_rindex      Perl_pp_rindex
-#define pp_rmdir       Perl_pp_rmdir
-#define pp_rv2av       Perl_pp_rv2av
-#define pp_rv2cv       Perl_pp_rv2cv
-#define pp_rv2gv       Perl_pp_rv2gv
-#define pp_rv2hv       Perl_pp_rv2hv
-#define pp_rv2sv       Perl_pp_rv2sv
-#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_seek                Perl_pp_seek
-#define pp_seekdir     Perl_pp_seekdir
-#define pp_select      Perl_pp_select
-#define pp_semctl      Perl_pp_semctl
-#define pp_semget      Perl_pp_semget
-#define pp_semop       Perl_pp_semop
-#define pp_send                Perl_pp_send
-#define pp_seq         Perl_pp_seq
-#define pp_setpgrp     Perl_pp_setpgrp
-#define pp_setpriority Perl_pp_setpriority
-#define pp_sge         Perl_pp_sge
-#define pp_sgrent      Perl_pp_sgrent
-#define pp_sgt         Perl_pp_sgt
-#define pp_shift       Perl_pp_shift
-#define pp_shmctl      Perl_pp_shmctl
-#define pp_shmget      Perl_pp_shmget
-#define pp_shmread     Perl_pp_shmread
-#define pp_shmwrite    Perl_pp_shmwrite
-#define pp_shostent    Perl_pp_shostent
-#define pp_shutdown    Perl_pp_shutdown
-#define pp_sin         Perl_pp_sin
-#define pp_sle         Perl_pp_sle
-#define pp_sleep       Perl_pp_sleep
-#define pp_slt         Perl_pp_slt
-#define pp_sne         Perl_pp_sne
-#define pp_snetent     Perl_pp_snetent
-#define pp_socket      Perl_pp_socket
-#define pp_sockpair    Perl_pp_sockpair
-#define pp_sort                Perl_pp_sort
-#define pp_splice      Perl_pp_splice
-#define pp_split       Perl_pp_split
-#define pp_sprintf     Perl_pp_sprintf
-#define pp_sprotoent   Perl_pp_sprotoent
-#define pp_spwent      Perl_pp_spwent
-#define pp_sqrt                Perl_pp_sqrt
-#define pp_srand       Perl_pp_srand
-#define pp_srefgen     Perl_pp_srefgen
-#define pp_sselect     Perl_pp_sselect
-#define pp_sservent    Perl_pp_sservent
-#define pp_ssockopt    Perl_pp_ssockopt
-#define pp_stat                Perl_pp_stat
-#define pp_stringify   Perl_pp_stringify
-#define pp_stub                Perl_pp_stub
-#define pp_study       Perl_pp_study
-#define pp_subst       Perl_pp_subst
-#define pp_substcont   Perl_pp_substcont
-#define pp_substr      Perl_pp_substr
-#define pp_subtract    Perl_pp_subtract
-#define pp_symlink     Perl_pp_symlink
-#define pp_syscall     Perl_pp_syscall
-#define pp_sysopen     Perl_pp_sysopen
-#define pp_sysread     Perl_pp_sysread
-#define pp_system      Perl_pp_system
-#define pp_syswrite    Perl_pp_syswrite
-#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_truncate    Perl_pp_truncate
-#define pp_uc          Perl_pp_uc
-#define pp_ucfirst     Perl_pp_ucfirst
-#define pp_umask       Perl_pp_umask
-#define pp_undef       Perl_pp_undef
-#define pp_unlink      Perl_pp_unlink
-#define pp_unpack      Perl_pp_unpack
-#define pp_unshift     Perl_pp_unshift
-#define pp_unstack     Perl_pp_unstack
-#define pp_untie       Perl_pp_untie
-#define pp_utime       Perl_pp_utime
-#define pp_values      Perl_pp_values
-#define pp_vec         Perl_pp_vec
-#define pp_wait                Perl_pp_wait
-#define pp_waitpid     Perl_pp_waitpid
-#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 regdump                Perl_regdump
-#define regnext                Perl_regnext
-#define regprop                Perl_regprop
-#define repeatcpy      Perl_repeatcpy
-#define rninstr                Perl_rninstr
-#define rsignal                Perl_rsignal
-#define rsignal_save   Perl_rsignal_save
-#define rsignal_state  Perl_rsignal_state
-#define rsignal_restore        Perl_rsignal_restore
-#define runops         Perl_runops
-#define safecalloc     Perl_safecalloc
-#define safemalloc     Perl_safemalloc
-#define safefree       Perl_safefree
-#define saferealloc    Perl_saferealloc
-#define safexcalloc    Perl_safexcalloc
-#define safexmalloc    Perl_safexmalloc
-#define safexfree      Perl_safexfree
-#define safexrealloc   Perl_safexrealloc
-#define same_dirent    Perl_same_dirent
-#define save_I16       Perl_save_I16
-#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_hash      Perl_save_hash
-#define save_hptr      Perl_save_hptr
-#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 scalarkids     Perl_scalarkids
-#define scalarseq      Perl_scalarseq
-#define scalarvoid     Perl_scalarvoid
-#define scan_const     Perl_scan_const
-#define scan_formline  Perl_scan_formline
-#define scan_heredoc   Perl_scan_heredoc
-#define scan_hex       Perl_scan_hex
-#define scan_ident     Perl_scan_ident
+#define magic_setdbline                Perl_magic_setdbline
+#define magic_setenv           Perl_magic_setenv
+#define magic_setfm            Perl_magic_setfm
+#define magic_setglob          Perl_magic_setglob
+#define magic_setisa           Perl_magic_setisa
+#define magic_setmglob         Perl_magic_setmglob
+#define magic_setnkeys         Perl_magic_setnkeys
+#define magic_setpack          Perl_magic_setpack
+#define magic_setpos           Perl_magic_setpos
+#define magic_setsig           Perl_magic_setsig
+#define magic_setsubstr                Perl_magic_setsubstr
+#define magic_settaint         Perl_magic_settaint
+#define magic_setuvar          Perl_magic_setuvar
+#define magic_setvec           Perl_magic_setvec
+#define magic_setvivary                Perl_magic_setvivary
+#define magic_wipepack         Perl_magic_wipepack
+#define magicname              Perl_magicname
+#define markstack              Perl_markstack
+#define markstack_grow         Perl_markstack_grow
+#define markstack_max          Perl_markstack_max
+#define markstack_ptr          Perl_markstack_ptr
+#define max_intro_pending      Perl_max_intro_pending
+#define maxo                   Perl_maxo
+#define mem_collxfrm           Perl_mem_collxfrm
+#define mess                   Perl_mess
+#define mg_clear               Perl_mg_clear
+#define mg_copy                        Perl_mg_copy
+#define mg_find                        Perl_mg_find
+#define mg_free                        Perl_mg_free
+#define mg_get                 Perl_mg_get
+#define mg_len                 Perl_mg_len
+#define mg_magical             Perl_mg_magical
+#define mg_set                 Perl_mg_set
+#define min_intro_pending      Perl_min_intro_pending
+#define mod                    Perl_mod
+#define mod_amg                        Perl_mod_amg
+#define mod_ass_amg            Perl_mod_ass_amg
+#define modkids                        Perl_modkids
+#define moreswitches           Perl_moreswitches
+#define mstats                 Perl_mstats
+#define mult_amg               Perl_mult_amg
+#define mult_ass_amg           Perl_mult_ass_amg
+#define multi_close            Perl_multi_close
+#define multi_end              Perl_multi_end
+#define multi_open             Perl_multi_open
+#define multi_start            Perl_multi_start
+#define my                     Perl_my
+#define my_bcopy               Perl_my_bcopy
+#define my_bzero               Perl_my_bzero
+#define my_chsize              Perl_my_chsize
+#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 na                     Perl_na
+#define ncmp_amg               Perl_ncmp_amg
+#define ne_amg                 Perl_ne_amg
+#define neg_amg                        Perl_neg_amg
+#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 newCVREF               Perl_newCVREF
+#define newFORM                        Perl_newFORM
+#define newFOROP               Perl_newFOROP
+#define newGVOP                        Perl_newGVOP
+#define newGVREF               Perl_newGVREF
+#define newGVgen               Perl_newGVgen
+#define newHV                  Perl_newHV
+#define newHVREF               Perl_newHVREF
+#define newIO                  Perl_newIO
+#define newLISTOP              Perl_newLISTOP
+#define newLOGOP               Perl_newLOGOP
+#define newLOOPEX              Perl_newLOOPEX
+#define newLOOPOP              Perl_newLOOPOP
+#define newNULLLIST            Perl_newNULLLIST
+#define newOP                  Perl_newOP
+#define newPMOP                        Perl_newPMOP
+#define newPROG                        Perl_newPROG
+#define newPVOP                        Perl_newPVOP
+#define newRANGE               Perl_newRANGE
+#define newRV                  Perl_newRV
+#define newSLICEOP             Perl_newSLICEOP
+#define newSTATEOP             Perl_newSTATEOP
+#define newSUB                 Perl_newSUB
+#define newSV                  Perl_newSV
+#define newSVOP                        Perl_newSVOP
+#define newSVREF               Perl_newSVREF
+#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 newXS                  Perl_newXS
+#define newXSUB                        Perl_newXSUB
+#define nextargv               Perl_nextargv
+#define nexttoke               Perl_nexttoke
+#define nexttype               Perl_nexttype
+#define nextval                        Perl_nextval
+#define ninstr                 Perl_ninstr
+#define no_aelem               Perl_no_aelem
+#define no_dir_func            Perl_no_dir_func
+#define no_fh_allowed          Perl_no_fh_allowed
+#define no_func                        Perl_no_func
+#define no_helem               Perl_no_helem
+#define no_mem                 Perl_no_mem
+#define no_modify              Perl_no_modify
+#define no_op                  Perl_no_op
+#define no_security            Perl_no_security
+#define no_sock_func           Perl_no_sock_func
+#define no_usym                        Perl_no_usym
+#define nointrp                        Perl_nointrp
+#define nomem                  Perl_nomem
+#define nomemok                        Perl_nomemok
+#define nomethod_amg           Perl_nomethod_amg
+#define not_amg                        Perl_not_amg
+#define numer_amg              Perl_numer_amg
+#define numeric_local          Perl_numeric_local
+#define numeric_name           Perl_numeric_name
+#define numeric_standard       Perl_numeric_standard
+#define oldbufptr              Perl_oldbufptr
+#define oldoldbufptr           Perl_oldoldbufptr
+#define oopsAV                 Perl_oopsAV
+#define oopsCV                 Perl_oopsCV
+#define oopsHV                 Perl_oopsHV
+#define op                     Perl_op
+#define op_desc                        Perl_op_desc
+#define op_free                        Perl_op_free
+#define op_name                        Perl_op_name
+#define op_seqmax              Perl_op_seqmax
+#define opargs                 Perl_opargs
+#define origalen               Perl_origalen
+#define origenviron            Perl_origenviron
+#define osname                 Perl_osname
+#define package                        Perl_package
+#define pad_alloc              Perl_pad_alloc
+#define pad_allocmy            Perl_pad_allocmy
+#define pad_findmy             Perl_pad_findmy
+#define pad_free               Perl_pad_free
+#define pad_leavemy            Perl_pad_leavemy
+#define pad_reset              Perl_pad_reset
+#define pad_sv                 Perl_pad_sv
+#define pad_swipe              Perl_pad_swipe
+#define padix                  Perl_padix
+#define patleave               Perl_patleave
+#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 pop_scope              Perl_pop_scope
+#define pow_amg                        Perl_pow_amg
+#define pow_ass_amg            Perl_pow_ass_amg
+#define pp_aassign             Perl_pp_aassign
+#define pp_abs                 Perl_pp_abs
+#define pp_accept              Perl_pp_accept
+#define pp_add                 Perl_pp_add
+#define pp_aelem               Perl_pp_aelem
+#define pp_aelemfast           Perl_pp_aelemfast
+#define pp_alarm               Perl_pp_alarm
+#define pp_and                 Perl_pp_and
+#define pp_andassign           Perl_pp_andassign
+#define pp_anoncode            Perl_pp_anoncode
+#define pp_anonhash            Perl_pp_anonhash
+#define pp_anonlist            Perl_pp_anonlist
+#define pp_aslice              Perl_pp_aslice
+#define pp_atan2               Perl_pp_atan2
+#define pp_av2arylen           Perl_pp_av2arylen
+#define pp_backtick            Perl_pp_backtick
+#define pp_bind                        Perl_pp_bind
+#define pp_binmode             Perl_pp_binmode
+#define pp_bit_and             Perl_pp_bit_and
+#define pp_bit_or              Perl_pp_bit_or
+#define pp_bit_xor             Perl_pp_bit_xor
+#define pp_bless               Perl_pp_bless
+#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_chr                 Perl_pp_chr
+#define pp_chroot              Perl_pp_chroot
+#define pp_close               Perl_pp_close
+#define pp_closedir            Perl_pp_closedir
+#define pp_complement          Perl_pp_complement
+#define pp_concat              Perl_pp_concat
+#define pp_cond_expr           Perl_pp_cond_expr
+#define pp_connect             Perl_pp_connect
+#define pp_const               Perl_pp_const
+#define pp_cos                 Perl_pp_cos
+#define pp_crypt               Perl_pp_crypt
+#define pp_cswitch             Perl_pp_cswitch
+#define pp_dbmclose            Perl_pp_dbmclose
+#define pp_dbmopen             Perl_pp_dbmopen
+#define pp_dbstate             Perl_pp_dbstate
+#define pp_defined             Perl_pp_defined
+#define pp_delete              Perl_pp_delete
+#define pp_die                 Perl_pp_die
+#define pp_divide              Perl_pp_divide
+#define pp_dofile              Perl_pp_dofile
+#define pp_dump                        Perl_pp_dump
+#define pp_each                        Perl_pp_each
+#define pp_egrent              Perl_pp_egrent
+#define pp_ehostent            Perl_pp_ehostent
+#define pp_enetent             Perl_pp_enetent
+#define pp_enter               Perl_pp_enter
+#define pp_entereval           Perl_pp_entereval
+#define pp_enteriter           Perl_pp_enteriter
+#define pp_enterloop           Perl_pp_enterloop
+#define pp_entersub            Perl_pp_entersub
+#define pp_entersubr           Perl_pp_entersubr
+#define pp_entertry            Perl_pp_entertry
+#define pp_enterwrite          Perl_pp_enterwrite
+#define pp_eof                 Perl_pp_eof
+#define pp_eprotoent           Perl_pp_eprotoent
+#define pp_epwent              Perl_pp_epwent
+#define pp_eq                  Perl_pp_eq
+#define pp_eservent            Perl_pp_eservent
+#define pp_evalonce            Perl_pp_evalonce
+#define pp_exec                        Perl_pp_exec
+#define pp_exists              Perl_pp_exists
+#define pp_exit                        Perl_pp_exit
+#define pp_exp                 Perl_pp_exp
+#define pp_fcntl               Perl_pp_fcntl
+#define pp_fileno              Perl_pp_fileno
+#define pp_flip                        Perl_pp_flip
+#define pp_flock               Perl_pp_flock
+#define pp_flop                        Perl_pp_flop
+#define pp_fork                        Perl_pp_fork
+#define pp_formline            Perl_pp_formline
+#define pp_ftatime             Perl_pp_ftatime
+#define pp_ftbinary            Perl_pp_ftbinary
+#define pp_ftblk               Perl_pp_ftblk
+#define pp_ftchr               Perl_pp_ftchr
+#define pp_ftctime             Perl_pp_ftctime
+#define pp_ftdir               Perl_pp_ftdir
+#define pp_fteexec             Perl_pp_fteexec
+#define pp_fteowned            Perl_pp_fteowned
+#define pp_fteread             Perl_pp_fteread
+#define pp_ftewrite            Perl_pp_ftewrite
+#define pp_ftfile              Perl_pp_ftfile
+#define pp_ftis                        Perl_pp_ftis
+#define pp_ftlink              Perl_pp_ftlink
+#define pp_ftmtime             Perl_pp_ftmtime
+#define pp_ftpipe              Perl_pp_ftpipe
+#define pp_ftrexec             Perl_pp_ftrexec
+#define pp_ftrowned            Perl_pp_ftrowned
+#define pp_ftrread             Perl_pp_ftrread
+#define pp_ftrwrite            Perl_pp_ftrwrite
+#define pp_ftsgid              Perl_pp_ftsgid
+#define pp_ftsize              Perl_pp_ftsize
+#define pp_ftsock              Perl_pp_ftsock
+#define pp_ftsuid              Perl_pp_ftsuid
+#define pp_ftsvtx              Perl_pp_ftsvtx
+#define pp_fttext              Perl_pp_fttext
+#define pp_fttty               Perl_pp_fttty
+#define pp_ftzero              Perl_pp_ftzero
+#define pp_ge                  Perl_pp_ge
+#define pp_gelem               Perl_pp_gelem
+#define pp_getc                        Perl_pp_getc
+#define pp_getlogin            Perl_pp_getlogin
+#define pp_getpeername         Perl_pp_getpeername
+#define pp_getpgrp             Perl_pp_getpgrp
+#define pp_getppid             Perl_pp_getppid
+#define pp_getpriority         Perl_pp_getpriority
+#define pp_getsockname         Perl_pp_getsockname
+#define pp_ggrent              Perl_pp_ggrent
+#define pp_ggrgid              Perl_pp_ggrgid
+#define pp_ggrnam              Perl_pp_ggrnam
+#define pp_ghbyaddr            Perl_pp_ghbyaddr
+#define pp_ghbyname            Perl_pp_ghbyname
+#define pp_ghostent            Perl_pp_ghostent
+#define pp_glob                        Perl_pp_glob
+#define pp_gmtime              Perl_pp_gmtime
+#define pp_gnbyaddr            Perl_pp_gnbyaddr
+#define pp_gnbyname            Perl_pp_gnbyname
+#define pp_gnetent             Perl_pp_gnetent
+#define pp_goto                        Perl_pp_goto
+#define pp_gpbyname            Perl_pp_gpbyname
+#define pp_gpbynumber          Perl_pp_gpbynumber
+#define pp_gprotoent           Perl_pp_gprotoent
+#define pp_gpwent              Perl_pp_gpwent
+#define pp_gpwnam              Perl_pp_gpwnam
+#define pp_gpwuid              Perl_pp_gpwuid
+#define pp_grepstart           Perl_pp_grepstart
+#define pp_grepwhile           Perl_pp_grepwhile
+#define pp_gsbyname            Perl_pp_gsbyname
+#define pp_gsbyport            Perl_pp_gsbyport
+#define pp_gservent            Perl_pp_gservent
+#define pp_gsockopt            Perl_pp_gsockopt
+#define pp_gt                  Perl_pp_gt
+#define pp_gv                  Perl_pp_gv
+#define pp_gvsv                        Perl_pp_gvsv
+#define pp_helem               Perl_pp_helem
+#define pp_hex                 Perl_pp_hex
+#define pp_hslice              Perl_pp_hslice
+#define pp_i_add               Perl_pp_i_add
+#define pp_i_divide            Perl_pp_i_divide
+#define pp_i_eq                        Perl_pp_i_eq
+#define pp_i_ge                        Perl_pp_i_ge
+#define pp_i_gt                        Perl_pp_i_gt
+#define pp_i_le                        Perl_pp_i_le
+#define pp_i_lt                        Perl_pp_i_lt
+#define pp_i_modulo            Perl_pp_i_modulo
+#define pp_i_multiply          Perl_pp_i_multiply
+#define pp_i_ncmp              Perl_pp_i_ncmp
+#define pp_i_ne                        Perl_pp_i_ne
+#define pp_i_negate            Perl_pp_i_negate
+#define pp_i_subtract          Perl_pp_i_subtract
+#define pp_index               Perl_pp_index
+#define pp_indread             Perl_pp_indread
+#define pp_int                 Perl_pp_int
+#define pp_interp              Perl_pp_interp
+#define pp_ioctl               Perl_pp_ioctl
+#define pp_iter                        Perl_pp_iter
+#define pp_join                        Perl_pp_join
+#define pp_keys                        Perl_pp_keys
+#define pp_kill                        Perl_pp_kill
+#define pp_last                        Perl_pp_last
+#define pp_lc                  Perl_pp_lc
+#define pp_lcfirst             Perl_pp_lcfirst
+#define pp_le                  Perl_pp_le
+#define pp_leave               Perl_pp_leave
+#define pp_leaveeval           Perl_pp_leaveeval
+#define pp_leaveloop           Perl_pp_leaveloop
+#define pp_leavesub            Perl_pp_leavesub
+#define pp_leavetry            Perl_pp_leavetry
+#define pp_leavewrite          Perl_pp_leavewrite
+#define pp_left_shift          Perl_pp_left_shift
+#define pp_length              Perl_pp_length
+#define pp_lineseq             Perl_pp_lineseq
+#define pp_link                        Perl_pp_link
+#define pp_list                        Perl_pp_list
+#define pp_listen              Perl_pp_listen
+#define pp_localtime           Perl_pp_localtime
+#define pp_log                 Perl_pp_log
+#define pp_lslice              Perl_pp_lslice
+#define pp_lstat               Perl_pp_lstat
+#define pp_lt                  Perl_pp_lt
+#define pp_map                 Perl_pp_map
+#define pp_mapstart            Perl_pp_mapstart
+#define pp_mapwhile            Perl_pp_mapwhile
+#define pp_match               Perl_pp_match
+#define pp_method              Perl_pp_method
+#define pp_mkdir               Perl_pp_mkdir
+#define pp_modulo              Perl_pp_modulo
+#define pp_msgctl              Perl_pp_msgctl
+#define pp_msgget              Perl_pp_msgget
+#define pp_msgrcv              Perl_pp_msgrcv
+#define pp_msgsnd              Perl_pp_msgsnd
+#define pp_multiply            Perl_pp_multiply
+#define pp_ncmp                        Perl_pp_ncmp
+#define pp_ne                  Perl_pp_ne
+#define pp_negate              Perl_pp_negate
+#define pp_next                        Perl_pp_next
+#define pp_nextstate           Perl_pp_nextstate
+#define pp_not                 Perl_pp_not
+#define pp_nswitch             Perl_pp_nswitch
+#define pp_null                        Perl_pp_null
+#define pp_oct                 Perl_pp_oct
+#define pp_open                        Perl_pp_open
+#define pp_open_dir            Perl_pp_open_dir
+#define pp_or                  Perl_pp_or
+#define pp_orassign            Perl_pp_orassign
+#define pp_ord                 Perl_pp_ord
+#define pp_pack                        Perl_pp_pack
+#define pp_padany              Perl_pp_padany
+#define pp_padav               Perl_pp_padav
+#define pp_padhv               Perl_pp_padhv
+#define pp_padsv               Perl_pp_padsv
+#define pp_pipe_op             Perl_pp_pipe_op
+#define pp_pop                 Perl_pp_pop
+#define pp_pos                 Perl_pp_pos
+#define pp_postdec             Perl_pp_postdec
+#define pp_postinc             Perl_pp_postinc
+#define pp_pow                 Perl_pp_pow
+#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_pushre              Perl_pp_pushre
+#define pp_quotemeta           Perl_pp_quotemeta
+#define pp_rand                        Perl_pp_rand
+#define pp_range               Perl_pp_range
+#define pp_rcatline            Perl_pp_rcatline
+#define pp_read                        Perl_pp_read
+#define pp_readdir             Perl_pp_readdir
+#define pp_readline            Perl_pp_readline
+#define pp_readlink            Perl_pp_readlink
+#define pp_recv                        Perl_pp_recv
+#define pp_redo                        Perl_pp_redo
+#define pp_ref                 Perl_pp_ref
+#define pp_refgen              Perl_pp_refgen
+#define pp_regcmaybe           Perl_pp_regcmaybe
+#define pp_regcomp             Perl_pp_regcomp
+#define pp_rename              Perl_pp_rename
+#define pp_repeat              Perl_pp_repeat
+#define pp_require             Perl_pp_require
+#define pp_reset               Perl_pp_reset
+#define pp_return              Perl_pp_return
+#define pp_reverse             Perl_pp_reverse
+#define pp_rewinddir           Perl_pp_rewinddir
+#define pp_right_shift         Perl_pp_right_shift
+#define pp_rindex              Perl_pp_rindex
+#define pp_rmdir               Perl_pp_rmdir
+#define pp_rv2av               Perl_pp_rv2av
+#define pp_rv2cv               Perl_pp_rv2cv
+#define pp_rv2gv               Perl_pp_rv2gv
+#define pp_rv2hv               Perl_pp_rv2hv
+#define pp_rv2sv               Perl_pp_rv2sv
+#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_seek                        Perl_pp_seek
+#define pp_seekdir             Perl_pp_seekdir
+#define pp_select              Perl_pp_select
+#define pp_semctl              Perl_pp_semctl
+#define pp_semget              Perl_pp_semget
+#define pp_semop               Perl_pp_semop
+#define pp_send                        Perl_pp_send
+#define pp_seq                 Perl_pp_seq
+#define pp_setpgrp             Perl_pp_setpgrp
+#define pp_setpriority         Perl_pp_setpriority
+#define pp_sge                 Perl_pp_sge
+#define pp_sgrent              Perl_pp_sgrent
+#define pp_sgt                 Perl_pp_sgt
+#define pp_shift               Perl_pp_shift
+#define pp_shmctl              Perl_pp_shmctl
+#define pp_shmget              Perl_pp_shmget
+#define pp_shmread             Perl_pp_shmread
+#define pp_shmwrite            Perl_pp_shmwrite
+#define pp_shostent            Perl_pp_shostent
+#define pp_shutdown            Perl_pp_shutdown
+#define pp_sin                 Perl_pp_sin
+#define pp_sle                 Perl_pp_sle
+#define pp_sleep               Perl_pp_sleep
+#define pp_slt                 Perl_pp_slt
+#define pp_sne                 Perl_pp_sne
+#define pp_snetent             Perl_pp_snetent
+#define pp_socket              Perl_pp_socket
+#define pp_sockpair            Perl_pp_sockpair
+#define pp_sort                        Perl_pp_sort
+#define pp_splice              Perl_pp_splice
+#define pp_split               Perl_pp_split
+#define pp_sprintf             Perl_pp_sprintf
+#define pp_sprotoent           Perl_pp_sprotoent
+#define pp_spwent              Perl_pp_spwent
+#define pp_sqrt                        Perl_pp_sqrt
+#define pp_srand               Perl_pp_srand
+#define pp_srefgen             Perl_pp_srefgen
+#define pp_sselect             Perl_pp_sselect
+#define pp_sservent            Perl_pp_sservent
+#define pp_ssockopt            Perl_pp_ssockopt
+#define pp_stat                        Perl_pp_stat
+#define pp_stringify           Perl_pp_stringify
+#define pp_stub                        Perl_pp_stub
+#define pp_study               Perl_pp_study
+#define pp_subst               Perl_pp_subst
+#define pp_substcont           Perl_pp_substcont
+#define pp_substr              Perl_pp_substr
+#define pp_subtract            Perl_pp_subtract
+#define pp_symlink             Perl_pp_symlink
+#define pp_syscall             Perl_pp_syscall
+#define pp_sysopen             Perl_pp_sysopen
+#define pp_sysread             Perl_pp_sysread
+#define pp_system              Perl_pp_system
+#define pp_syswrite            Perl_pp_syswrite
+#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_truncate            Perl_pp_truncate
+#define pp_uc                  Perl_pp_uc
+#define pp_ucfirst             Perl_pp_ucfirst
+#define pp_umask               Perl_pp_umask
+#define pp_undef               Perl_pp_undef
+#define pp_unlink              Perl_pp_unlink
+#define pp_unpack              Perl_pp_unpack
+#define pp_unshift             Perl_pp_unshift
+#define pp_unstack             Perl_pp_unstack
+#define pp_untie               Perl_pp_untie
+#define pp_utime               Perl_pp_utime
+#define pp_values              Perl_pp_values
+#define pp_vec                 Perl_pp_vec
+#define pp_wait                        Perl_pp_wait
+#define pp_waitpid             Perl_pp_waitpid
+#define pp_wantarray           Perl_pp_wantarray
+#define pp_warn                        Perl_pp_warn
+#define pp_xor                 Perl_pp_xor
+#define ppaddr                 Perl_ppaddr
+#define pregcomp               Perl_pregcomp
+#define pregexec               Perl_pregexec
+#define pregfree               Perl_pregfree
+#define prepend_elem           Perl_prepend_elem
+#define profiledata            Perl_profiledata
+#define provide_ref            Perl_provide_ref
+#define psig_name              Perl_psig_name
+#define psig_ptr               Perl_psig_ptr
+#define push_return            Perl_push_return
+#define push_scope             Perl_push_scope
+#define q                      Perl_q
+#define qrt_amg                        Perl_qrt_amg
+#define rcsid                  Perl_rcsid
+#define reall_srchlen          Perl_reall_srchlen
+#define ref                    Perl_ref
+#define refkids                        Perl_refkids
+#define regarglen              Perl_regarglen
+#define regbol                 Perl_regbol
+#define regcode                        Perl_regcode
+#define regdummy               Perl_regdummy
+#define regdump                        Perl_regdump
+#define regendp                        Perl_regendp
+#define regeol                 Perl_regeol
+#define reginput               Perl_reginput
+#define regkind                        Perl_regkind
+#define reglastparen           Perl_reglastparen
+#define regmyendp              Perl_regmyendp
+#define regmyp_size            Perl_regmyp_size
+#define regmystartp            Perl_regmystartp
+#define regnarrate             Perl_regnarrate
+#define regnaughty             Perl_regnaughty
+#define regnext                        Perl_regnext
+#define regnpar                        Perl_regnpar
+#define regparse               Perl_regparse
+#define regprecomp             Perl_regprecomp
+#define regprev                        Perl_regprev
+#define regprop                        Perl_regprop
+#define regsawback             Perl_regsawback
+#define regsize                        Perl_regsize
+#define regstartp              Perl_regstartp
+#define regtill                        Perl_regtill
+#define regxend                        Perl_regxend
+#define repeat_amg             Perl_repeat_amg
+#define repeat_ass_amg         Perl_repeat_ass_amg
+#define repeatcpy              Perl_repeatcpy
+#define retstack               Perl_retstack
+#define retstack_ix            Perl_retstack_ix
+#define retstack_max           Perl_retstack_max
+#define rninstr                        Perl_rninstr
+#define rsfp                   Perl_rsfp
+#define rsfp_filters           Perl_rsfp_filters
+#define rshift_amg             Perl_rshift_amg
+#define rshift_ass_amg         Perl_rshift_ass_amg
+#define rsignal                        Perl_rsignal
+#define rsignal_restore                Perl_rsignal_restore
+#define rsignal_save           Perl_rsignal_save
+#define rsignal_state          Perl_rsignal_state
+#define runops                 Perl_runops
+#define same_dirent            Perl_same_dirent
+#define save_I16               Perl_save_I16
+#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_gp                        Perl_save_gp
+#define save_hash              Perl_save_hash
+#define save_hptr              Perl_save_hptr
+#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              Perl_savestack
+#define savestack_grow         Perl_savestack_grow
+#define savestack_ix           Perl_savestack_ix
+#define savestack_max          Perl_savestack_max
+#define saw_return             Perl_saw_return
+#define sawparens              Perl_sawparens
+#define scalar                 Perl_scalar
+#define scalarkids             Perl_scalarkids
+#define scalarseq              Perl_scalarseq
+#define scalarvoid             Perl_scalarvoid
+#define scan_const             Perl_scan_const
+#define scan_formline          Perl_scan_formline
+#define scan_heredoc           Perl_scan_heredoc
+#define scan_hex               Perl_scan_hex
+#define scan_ident             Perl_scan_ident
 #define scan_inputsymbol       Perl_scan_inputsymbol
-#define scan_num       Perl_scan_num
-#define scan_oct       Perl_scan_oct
-#define scan_pat       Perl_scan_pat
-#define scan_prefix    Perl_scan_prefix
-#define scan_str       Perl_scan_str
-#define scan_subst     Perl_scan_subst
-#define scan_trans     Perl_scan_trans
-#define scan_word      Perl_scan_word
-#define scope          Perl_scope
-#define screaminstr    Perl_screaminstr
-#define setdefout      Perl_setdefout
-#define setenv_getix   Perl_setenv_getix
-#define share_hek      Perl_share_hek
-#define sharepvn       Perl_sharepvn
-#define sighandler     Perl_sighandler
-#define skipspace      Perl_skipspace
-#define stack_grow     Perl_stack_grow
-#define start_subparse Perl_start_subparse
-#define sublex_done    Perl_sublex_done
-#define sublex_start   Perl_sublex_start
-#define sv_2bool       Perl_sv_2bool
-#define sv_2cv         Perl_sv_2cv
-#define sv_2io         Perl_sv_2io
-#define sv_2iv         Perl_sv_2iv
-#define sv_2mortal     Perl_sv_2mortal
-#define sv_2nv         Perl_sv_2nv
-#define sv_2pv         Perl_sv_2pv
-#define sv_2uv         Perl_sv_2uv
-#define sv_add_arena   Perl_sv_add_arena
-#define sv_backoff     Perl_sv_backoff
-#define sv_bless       Perl_sv_bless
-#define sv_catpv       Perl_sv_catpv
-#define sv_catpvn      Perl_sv_catpvn
-#define sv_catsv       Perl_sv_catsv
-#define sv_chop                Perl_sv_chop
-#define sv_clean_all   Perl_sv_clean_all
-#define sv_clean_objs  Perl_sv_clean_objs
-#define sv_clear       Perl_sv_clear
-#define sv_cmp         Perl_sv_cmp
-#define sv_cmp_locale  Perl_sv_cmp_locale
-#define sv_collxfrm    Perl_sv_collxfrm
-#define sv_dec         Perl_sv_dec
-#define sv_derived_from        Perl_sv_derived_from
-#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_insert      Perl_sv_insert
-#define sv_isa         Perl_sv_isa
-#define sv_isobject    Perl_sv_isobject
-#define sv_len         Perl_sv_len
-#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         Perl_sv_pvn
-#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_setiv       Perl_sv_setiv
-#define sv_setnv       Perl_sv_setnv
-#define sv_setptrobj   Perl_sv_setptrobj
-#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_setuv       Perl_sv_setuv
-#define sv_taint       Perl_sv_taint
-#define sv_tainted     Perl_sv_tainted
-#define sv_unmagic     Perl_sv_unmagic
-#define sv_unref       Perl_sv_unref
-#define sv_untaint     Perl_sv_untaint
-#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 scan_num               Perl_scan_num
+#define scan_oct               Perl_scan_oct
+#define scan_pat               Perl_scan_pat
+#define scan_prefix            Perl_scan_prefix
+#define scan_str               Perl_scan_str
+#define scan_subst             Perl_scan_subst
+#define scan_trans             Perl_scan_trans
+#define scan_word              Perl_scan_word
+#define scmp_amg               Perl_scmp_amg
+#define scope                  Perl_scope
+#define scopestack             Perl_scopestack
+#define scopestack_ix          Perl_scopestack_ix
+#define scopestack_max         Perl_scopestack_max
+#define screaminstr            Perl_screaminstr
+#define scrgv                  Perl_scrgv
+#define seq_amg                        Perl_seq_amg
+#define setdefout              Perl_setdefout
+#define setenv_getix           Perl_setenv_getix
+#define sge_amg                        Perl_sge_amg
+#define sgt_amg                        Perl_sgt_amg
+#define sh_path                        Perl_sh_path
+#define share_hek              Perl_share_hek
+#define sharepvn               Perl_sharepvn
+#define sig_name               Perl_sig_name
+#define sig_num                        Perl_sig_num
+#define sighandler             Perl_sighandler
+#define simple                 Perl_simple
+#define sin_amg                        Perl_sin_amg
+#define skipspace              Perl_skipspace
+#define sle_amg                        Perl_sle_amg
+#define slt_amg                        Perl_slt_amg
+#define sne_amg                        Perl_sne_amg
+#define stack_base             Perl_stack_base
+#define stack_grow             Perl_stack_grow
+#define stack_max              Perl_stack_max
+#define stack_sp               Perl_stack_sp
+#define start_subparse         Perl_start_subparse
+#define statbuf                        Perl_statbuf
+#define string_amg             Perl_string_amg
+#define sub_generation         Perl_sub_generation
+#define sublex_done            Perl_sublex_done
+#define sublex_start           Perl_sublex_start
+#define subline                        Perl_subline
+#define subname                        Perl_subname
+#define subtr_amg              Perl_subtr_amg
+#define subtr_ass_amg          Perl_subtr_ass_amg
+#define sv_2bool               Perl_sv_2bool
+#define sv_2cv                 Perl_sv_2cv
+#define sv_2io                 Perl_sv_2io
+#define sv_2iv                 Perl_sv_2iv
+#define sv_2mortal             Perl_sv_2mortal
+#define sv_2nv                 Perl_sv_2nv
+#define sv_2pv                 Perl_sv_2pv
+#define sv_2uv                 Perl_sv_2uv
+#define sv_add_arena           Perl_sv_add_arena
+#define sv_backoff             Perl_sv_backoff
+#define sv_bless               Perl_sv_bless
+#define sv_catpv               Perl_sv_catpv
+#define sv_catpvn              Perl_sv_catpvn
+#define sv_catsv               Perl_sv_catsv
+#define sv_chop                        Perl_sv_chop
+#define sv_clean_all           Perl_sv_clean_all
+#define sv_clean_objs          Perl_sv_clean_objs
+#define sv_clear               Perl_sv_clear
+#define sv_cmp                 Perl_sv_cmp
+#define sv_cmp_locale          Perl_sv_cmp_locale
+#define sv_collxfrm            Perl_sv_collxfrm
+#define sv_dec                 Perl_sv_dec
+#define sv_derived_from                Perl_sv_derived_from
+#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_insert              Perl_sv_insert
+#define sv_isa                 Perl_sv_isa
+#define sv_isobject            Perl_sv_isobject
+#define sv_len                 Perl_sv_len
+#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_no                  Perl_sv_no
+#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_setiv               Perl_sv_setiv
+#define sv_setnv               Perl_sv_setnv
+#define sv_setptrobj           Perl_sv_setptrobj
+#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_setuv               Perl_sv_setuv
+#define sv_taint               Perl_sv_taint
+#define sv_tainted             Perl_sv_tainted
+#define sv_undef               Perl_sv_undef
+#define sv_unmagic             Perl_sv_unmagic
+#define sv_unref               Perl_sv_unref
+#define sv_untaint             Perl_sv_untaint
+#define sv_upgrade             Perl_sv_upgrade
+#define sv_usepvn              Perl_sv_usepvn
+#define sv_yes                 Perl_sv_yes
+#define taint_env              Perl_taint_env
+#define taint_proper           Perl_taint_proper
+#define thisexpr               Perl_thisexpr
+#define timesbuf               Perl_timesbuf
+#define tokenbuf               Perl_tokenbuf
 #define too_few_arguments      Perl_too_few_arguments
 #define too_many_arguments     Perl_too_many_arguments
-#define unlnk          Perl_unlnk
-#define unshare_hek    Perl_unshare_hek
-#define unsharepvn     Perl_unsharepvn
-#define utilize                Perl_utilize
-#define wait4pid       Perl_wait4pid
-#define warn           Perl_warn
-#define watch          Perl_watch
-#define whichsig       Perl_whichsig
-#define xiv_arenaroot  Perl_xiv_arenaroot
-#define xiv_root       Perl_xiv_root
-#define xnv_root       Perl_xnv_root
-#define xpv_root       Perl_xpv_root
-#define xrv_root       Perl_xrv_root
-#define yyerror                Perl_yyerror
-#define yydestruct     Perl_yydestruct
-#define yylex          Perl_yylex
-#define yyparse                Perl_yyparse
-#define yywarn         Perl_yywarn
+#define uid                    Perl_uid
+#define unlnk                  Perl_unlnk
+#define unshare_hek            Perl_unshare_hek
+#define unsharepvn             Perl_unsharepvn
+#define utilize                        Perl_utilize
+#define varies                 Perl_varies
+#define vert                   Perl_vert
+#define vtbl_amagic            Perl_vtbl_amagic
+#define vtbl_amagicelem                Perl_vtbl_amagicelem
+#define vtbl_arylen            Perl_vtbl_arylen
+#define vtbl_bm                        Perl_vtbl_bm
+#define vtbl_collxfrm          Perl_vtbl_collxfrm
+#define vtbl_dbline            Perl_vtbl_dbline
+#define vtbl_env               Perl_vtbl_env
+#define vtbl_envelem           Perl_vtbl_envelem
+#define vtbl_fm                        Perl_vtbl_fm
+#define vtbl_glob              Perl_vtbl_glob
+#define vtbl_isa               Perl_vtbl_isa
+#define vtbl_isaelem           Perl_vtbl_isaelem
+#define vtbl_mglob             Perl_vtbl_mglob
+#define vtbl_nkeys             Perl_vtbl_nkeys
+#define vtbl_pack              Perl_vtbl_pack
+#define vtbl_packelem          Perl_vtbl_packelem
+#define vtbl_pos               Perl_vtbl_pos
+#define vtbl_sig               Perl_vtbl_sig
+#define vtbl_sigelem           Perl_vtbl_sigelem
+#define vtbl_substr            Perl_vtbl_substr
+#define vtbl_sv                        Perl_vtbl_sv
+#define vtbl_taint             Perl_vtbl_taint
+#define vtbl_uvar              Perl_vtbl_uvar
+#define vtbl_vec               Perl_vtbl_vec
+#define wait4pid               Perl_wait4pid
+#define warn                   Perl_warn
+#define warn_nl                        Perl_warn_nl
+#define warn_nosemi            Perl_warn_nosemi
+#define warn_reserved          Perl_warn_reserved
+#define watch                  Perl_watch
+#define watchaddr              Perl_watchaddr
+#define watchok                        Perl_watchok
+#define whichsig               Perl_whichsig
+#define xiv_arenaroot          Perl_xiv_arenaroot
+#define xiv_root               Perl_xiv_root
+#define xnv_root               Perl_xnv_root
+#define xpv_root               Perl_xpv_root
+#define xrv_root               Perl_xrv_root
+#define yychar                 Perl_yychar
+#define yycheck                        Perl_yycheck
+#define yydebug                        Perl_yydebug
+#define yydefred               Perl_yydefred
+#define yydgoto                        Perl_yydgoto
+#define yyerrflag              Perl_yyerrflag
+#define yyerror                        Perl_yyerror
+#define yygindex               Perl_yygindex
+#define yylen                  Perl_yylen
+#define yylex                  Perl_yylex
+#define yylhs                  Perl_yylhs
+#define yylval                 Perl_yylval
+#define yyname                 Perl_yyname
+#define yynerrs                        Perl_yynerrs
+#define yyparse                        Perl_yyparse
+#define yyrindex               Perl_yyrindex
+#define yyrule                 Perl_yyrule
+#define yysindex               Perl_yysindex
+#define yytable                        Perl_yytable
+#define yyval                  Perl_yyval
+#define yywarn                 Perl_yywarn
+
+/* Hide global symbols that 5.003 revealed? */
+
+#ifndef BINCOMPAT3
+
+#define Error                  Perl_Error
+#define SvIV                   Perl_SvIV
+#define SvNV                   Perl_SvNV
+#define SvTRUE                 Perl_SvTRUE
+#define SvUV                   Perl_SvUV
+#define block_type             Perl_block_type
+#define boot_core_UNIVERSAL    Perl_boot_core_UNIVERSAL
+#define comppad_name_floor     Perl_comppad_name_floor
+#define debug                  Perl_debug
+#define do_undump              Perl_do_undump
+#define nice_chunk             Perl_nice_chunk
+#define nice_chunk_size                Perl_nice_chunk_size
+#define no_myglob              Perl_no_myglob
+#define no_symref              Perl_no_symref
+#define no_wrongref            Perl_no_wrongref
+#define pad_reset_pending      Perl_pad_reset_pending
+#define padix_floor            Perl_padix_floor
+#define regflags               Perl_regflags
+#define safecalloc             Perl_safecalloc
+#define safefree               Perl_safefree
+#define safemalloc             Perl_safemalloc
+#define saferealloc            Perl_saferealloc
+#define safexcalloc            Perl_safexcalloc
+#define safexfree              Perl_safexfree
+#define safexmalloc            Perl_safexmalloc
+#define safexrealloc           Perl_safexrealloc
+#define save_iv                        Perl_save_iv
+#define sv_pvn                 Perl_sv_pvn
+#define warn_uninit            Perl_warn_uninit
+#define yydestruct             Perl_yydestruct
+
+#endif /* !BINCOMPAT3 */
 
 #endif /* EMBED */
 
-/* Put interpreter specific symbols into a struct? */
+/* Put interpreter-specific symbols into a struct? */
 
 #ifdef MULTIPLICITY
 
-#define Argv           (curinterp->IArgv)
-#define Cmd            (curinterp->ICmd)
-#define DBgv           (curinterp->IDBgv)
-#define DBline         (curinterp->IDBline)
-#define DBsignal       (curinterp->IDBsignal)
-#define DBsingle       (curinterp->IDBsingle)
-#define DBsub          (curinterp->IDBsub)
-#define DBtrace                (curinterp->IDBtrace)
-#define allgvs         (curinterp->Iallgvs)
-#define ampergv                (curinterp->Iampergv)
-#define argvgv         (curinterp->Iargvgv)
-#define argvoutgv      (curinterp->Iargvoutgv)
-#define basetime       (curinterp->Ibasetime)
-#define beginav                (curinterp->Ibeginav)
-#define bodytarget     (curinterp->Ibodytarget)
-#define cddir          (curinterp->Icddir)
-#define chopset                (curinterp->Ichopset)
-#define copline                (curinterp->Icopline)
-#define curblock       (curinterp->Icurblock)
-#define curcop         (curinterp->Icurcop)
-#define curcopdb       (curinterp->Icurcopdb)
-#define curcsv         (curinterp->Icurcsv)
-#define curpm          (curinterp->Icurpm)
-#define curstack       (curinterp->Icurstack)
-#define curstash       (curinterp->Icurstash)
-#define curstname      (curinterp->Icurstname)
-#define cxstack                (curinterp->Icxstack)
-#define cxstack_ix     (curinterp->Icxstack_ix)
-#define cxstack_max    (curinterp->Icxstack_max)
-#define dbargs         (curinterp->Idbargs)
-#define debdelim       (curinterp->Idebdelim)
-#define debname                (curinterp->Idebname)
-#define debstash       (curinterp->Idebstash)
-#define defgv          (curinterp->Idefgv)
-#define defoutgv       (curinterp->Idefoutgv)
-#define defstash       (curinterp->Idefstash)
-#define delaymagic     (curinterp->Idelaymagic)
-#define diehook                (curinterp->Idiehook)
-#define dirty          (curinterp->Idirty)
-#define dlevel         (curinterp->Idlevel)
-#define dlmax          (curinterp->Idlmax)
-#define doextract      (curinterp->Idoextract)
-#define doswitches     (curinterp->Idoswitches)
-#define dowarn         (curinterp->Idowarn)
-#define dumplvl                (curinterp->Idumplvl)
-#define e_fp           (curinterp->Ie_fp)
-#define e_tmpname      (curinterp->Ie_tmpname)
-#define endav          (curinterp->Iendav)
-#define envgv          (curinterp->Ienvgv)
-#define errgv          (curinterp->Ierrgv)
-#define eval_root      (curinterp->Ieval_root)
-#define eval_start     (curinterp->Ieval_start)
-#define fdpid          (curinterp->Ifdpid)
-#define filemode       (curinterp->Ifilemode)
-#define firstgv                (curinterp->Ifirstgv)
-#define forkprocess    (curinterp->Iforkprocess)
-#define formfeed       (curinterp->Iformfeed)
-#define formtarget     (curinterp->Iformtarget)
-#define gensym         (curinterp->Igensym)
-#define in_eval                (curinterp->Iin_eval)
-#define incgv          (curinterp->Iincgv)
-#define inplace                (curinterp->Iinplace)
-#define last_in_gv     (curinterp->Ilast_in_gv)
-#define lastfd         (curinterp->Ilastfd)
-#define lastretstr     (curinterp->Ilastretstr)
-#define lastscream     (curinterp->Ilastscream)
-#define lastsize       (curinterp->Ilastsize)
-#define lastspbase     (curinterp->Ilastspbase)
-#define laststatval    (curinterp->Ilaststatval)
-#define laststype      (curinterp->Ilaststype)
-#define leftgv         (curinterp->Ileftgv)
-#define lineary                (curinterp->Ilineary)
-#define localizing     (curinterp->Ilocalizing)
-#define localpatches   (curinterp->Ilocalpatches)
-#define main_cv                (curinterp->Imain_cv)
-#define main_root      (curinterp->Imain_root)
-#define main_start     (curinterp->Imain_start)
-#define mainstack      (curinterp->Imainstack)
-#define maxscream      (curinterp->Imaxscream)
-#define maxsysfd       (curinterp->Imaxsysfd)
-#define minus_F                (curinterp->Iminus_F)
-#define minus_a                (curinterp->Iminus_a)
-#define minus_c                (curinterp->Iminus_c)
-#define minus_l                (curinterp->Iminus_l)
-#define minus_n                (curinterp->Iminus_n)
-#define minus_p                (curinterp->Iminus_p)
-#define multiline      (curinterp->Imultiline)
-#define mystack_base   (curinterp->Imystack_base)
-#define mystack_mark   (curinterp->Imystack_mark)
-#define mystack_max    (curinterp->Imystack_max)
-#define mystack_sp     (curinterp->Imystack_sp)
-#define mystrk         (curinterp->Imystrk)
-#define nrs            (curinterp->Inrs)
-#define ofmt           (curinterp->Iofmt)
-#define ofs            (curinterp->Iofs)
-#define ofslen         (curinterp->Iofslen)
-#define oldlastpm      (curinterp->Ioldlastpm)
-#define oldname                (curinterp->Ioldname)
-#define op_mask                (curinterp->Iop_mask)
-#define origargc       (curinterp->Iorigargc)
-#define origargv       (curinterp->Iorigargv)
-#define origfilename   (curinterp->Iorigfilename)
-#define ors            (curinterp->Iors)
-#define orslen         (curinterp->Iorslen)
-#define parsehook      (curinterp->Iparsehook)
-#define patchlevel     (curinterp->Ipatchlevel)
-#define perldb         (curinterp->Iperldb)
+#define Argv                   (curinterp->IArgv)
+#define Cmd                    (curinterp->ICmd)
+#define DBgv                   (curinterp->IDBgv)
+#define DBline                 (curinterp->IDBline)
+#define DBsignal               (curinterp->IDBsignal)
+#define DBsingle               (curinterp->IDBsingle)
+#define DBsub                  (curinterp->IDBsub)
+#define DBtrace                        (curinterp->IDBtrace)
+#define allgvs                 (curinterp->Iallgvs)
+#define ampergv                        (curinterp->Iampergv)
+#define argvgv                 (curinterp->Iargvgv)
+#define argvoutgv              (curinterp->Iargvoutgv)
+#define basetime               (curinterp->Ibasetime)
+#define beginav                        (curinterp->Ibeginav)
+#define bodytarget             (curinterp->Ibodytarget)
+#define cddir                  (curinterp->Icddir)
+#define chopset                        (curinterp->Ichopset)
+#define copline                        (curinterp->Icopline)
+#define curblock               (curinterp->Icurblock)
+#define curcop                 (curinterp->Icurcop)
+#define curcopdb               (curinterp->Icurcopdb)
+#define curcsv                 (curinterp->Icurcsv)
+#define curpm                  (curinterp->Icurpm)
+#define curstack               (curinterp->Icurstack)
+#define curstash               (curinterp->Icurstash)
+#define curstname              (curinterp->Icurstname)
+#define cxstack                        (curinterp->Icxstack)
+#define cxstack_ix             (curinterp->Icxstack_ix)
+#define cxstack_max            (curinterp->Icxstack_max)
+#define dbargs                 (curinterp->Idbargs)
+#define debdelim               (curinterp->Idebdelim)
+#define debname                        (curinterp->Idebname)
+#define debstash               (curinterp->Idebstash)
+#define defgv                  (curinterp->Idefgv)
+#define defoutgv               (curinterp->Idefoutgv)
+#define defstash               (curinterp->Idefstash)
+#define delaymagic             (curinterp->Idelaymagic)
+#define diehook                        (curinterp->Idiehook)
+#define dirty                  (curinterp->Idirty)
+#define dlevel                 (curinterp->Idlevel)
+#define dlmax                  (curinterp->Idlmax)
+#define doextract              (curinterp->Idoextract)
+#define doswitches             (curinterp->Idoswitches)
+#define dowarn                 (curinterp->Idowarn)
+#define dumplvl                        (curinterp->Idumplvl)
+#define e_fp                   (curinterp->Ie_fp)
+#define e_tmpname              (curinterp->Ie_tmpname)
+#define endav                  (curinterp->Iendav)
+#define envgv                  (curinterp->Ienvgv)
+#define errgv                  (curinterp->Ierrgv)
+#define eval_root              (curinterp->Ieval_root)
+#define eval_start             (curinterp->Ieval_start)
+#define fdpid                  (curinterp->Ifdpid)
+#define filemode               (curinterp->Ifilemode)
+#define firstgv                        (curinterp->Ifirstgv)
+#define forkprocess            (curinterp->Iforkprocess)
+#define formfeed               (curinterp->Iformfeed)
+#define formtarget             (curinterp->Iformtarget)
+#define gensym                 (curinterp->Igensym)
+#define in_eval                        (curinterp->Iin_eval)
+#define incgv                  (curinterp->Iincgv)
+#define inplace                        (curinterp->Iinplace)
+#define last_in_gv             (curinterp->Ilast_in_gv)
+#define lastfd                 (curinterp->Ilastfd)
+#define lastretstr             (curinterp->Ilastretstr)
+#define lastscream             (curinterp->Ilastscream)
+#define lastsize               (curinterp->Ilastsize)
+#define lastspbase             (curinterp->Ilastspbase)
+#define laststatval            (curinterp->Ilaststatval)
+#define laststype              (curinterp->Ilaststype)
+#define leftgv                 (curinterp->Ileftgv)
+#define lineary                        (curinterp->Ilineary)
+#define localizing             (curinterp->Ilocalizing)
+#define localpatches           (curinterp->Ilocalpatches)
+#define main_cv                        (curinterp->Imain_cv)
+#define main_root              (curinterp->Imain_root)
+#define main_start             (curinterp->Imain_start)
+#define mainstack              (curinterp->Imainstack)
+#define maxscream              (curinterp->Imaxscream)
+#define maxsysfd               (curinterp->Imaxsysfd)
+#define minus_F                        (curinterp->Iminus_F)
+#define minus_a                        (curinterp->Iminus_a)
+#define minus_c                        (curinterp->Iminus_c)
+#define minus_l                        (curinterp->Iminus_l)
+#define minus_n                        (curinterp->Iminus_n)
+#define minus_p                        (curinterp->Iminus_p)
+#define multiline              (curinterp->Imultiline)
+#define mystack_base           (curinterp->Imystack_base)
+#define mystack_mark           (curinterp->Imystack_mark)
+#define mystack_max            (curinterp->Imystack_max)
+#define mystack_sp             (curinterp->Imystack_sp)
+#define mystrk                 (curinterp->Imystrk)
+#define nrs                    (curinterp->Inrs)
+#define ofmt                   (curinterp->Iofmt)
+#define ofs                    (curinterp->Iofs)
+#define ofslen                 (curinterp->Iofslen)
+#define oldlastpm              (curinterp->Ioldlastpm)
+#define oldname                        (curinterp->Ioldname)
+#define op_mask                        (curinterp->Iop_mask)
+#define origargc               (curinterp->Iorigargc)
+#define origargv               (curinterp->Iorigargv)
+#define origfilename           (curinterp->Iorigfilename)
+#define ors                    (curinterp->Iors)
+#define orslen                 (curinterp->Iorslen)
+#define parsehook              (curinterp->Iparsehook)
+#define patchlevel             (curinterp->Ipatchlevel)
 #define perl_destruct_level    (curinterp->Iperl_destruct_level)
-#define pidstatus      (curinterp->Ipidstatus)
-#define preambled      (curinterp->Ipreambled)
-#define preambleav     (curinterp->Ipreambleav)
-#define preprocess     (curinterp->Ipreprocess)
-#define restartop      (curinterp->Irestartop)
-#define rightgv                (curinterp->Irightgv)
-#define rs             (curinterp->Irs)
-#define runlevel       (curinterp->Irunlevel)
-#define sawampersand   (curinterp->Isawampersand)
-#define sawstudy       (curinterp->Isawstudy)
-#define sawvec         (curinterp->Isawvec)
-#define screamfirst    (curinterp->Iscreamfirst)
-#define screamnext     (curinterp->Iscreamnext)
-#define secondgv       (curinterp->Isecondgv)
-#define siggv          (curinterp->Isiggv)
-#define signalstack    (curinterp->Isignalstack)
-#define sortcop                (curinterp->Isortcop)
-#define sortstack      (curinterp->Isortstack)
-#define sortstash      (curinterp->Isortstash)
-#define splitstr       (curinterp->Isplitstr)
-#define statcache      (curinterp->Istatcache)
-#define statgv         (curinterp->Istatgv)
-#define statname       (curinterp->Istatname)
-#define statusvalue    (curinterp->Istatusvalue)
-#define stdingv                (curinterp->Istdingv)
-#define strchop                (curinterp->Istrchop)
-#define strtab         (curinterp->Istrtab)
-#define sv_count       (curinterp->Isv_count)
-#define sv_objcount    (curinterp->Isv_objcount)
-#define sv_root                (curinterp->Isv_root)
-#define sv_arenaroot   (curinterp->Isv_arenaroot)
-#define tainted                (curinterp->Itainted)
-#define tainting       (curinterp->Itainting)
-#define tmps_floor     (curinterp->Itmps_floor)
-#define tmps_ix                (curinterp->Itmps_ix)
-#define tmps_max       (curinterp->Itmps_max)
-#define tmps_stack     (curinterp->Itmps_stack)
-#define top_env                (curinterp->Itop_env)
-#define toptarget      (curinterp->Itoptarget)
-#define unsafe         (curinterp->Iunsafe)
-#define warnhook       (curinterp->Iwarnhook)
+#define perldb                 (curinterp->Iperldb)
+#define pidstatus              (curinterp->Ipidstatus)
+#define preambleav             (curinterp->Ipreambleav)
+#define preambled              (curinterp->Ipreambled)
+#define preprocess             (curinterp->Ipreprocess)
+#define restartop              (curinterp->Irestartop)
+#define rightgv                        (curinterp->Irightgv)
+#define rs                     (curinterp->Irs)
+#define runlevel               (curinterp->Irunlevel)
+#define sawampersand           (curinterp->Isawampersand)
+#define sawstudy               (curinterp->Isawstudy)
+#define sawvec                 (curinterp->Isawvec)
+#define screamfirst            (curinterp->Iscreamfirst)
+#define screamnext             (curinterp->Iscreamnext)
+#define secondgv               (curinterp->Isecondgv)
+#define siggv                  (curinterp->Isiggv)
+#define signalstack            (curinterp->Isignalstack)
+#define sortcop                        (curinterp->Isortcop)
+#define sortstack              (curinterp->Isortstack)
+#define sortstash              (curinterp->Isortstash)
+#define splitstr               (curinterp->Isplitstr)
+#define statcache              (curinterp->Istatcache)
+#define statgv                 (curinterp->Istatgv)
+#define statname               (curinterp->Istatname)
+#define statusvalue            (curinterp->Istatusvalue)
+#define stdingv                        (curinterp->Istdingv)
+#define strchop                        (curinterp->Istrchop)
+#define strtab                 (curinterp->Istrtab)
+#define sv_arenaroot           (curinterp->Isv_arenaroot)
+#define sv_count               (curinterp->Isv_count)
+#define sv_objcount            (curinterp->Isv_objcount)
+#define sv_root                        (curinterp->Isv_root)
+#define tainted                        (curinterp->Itainted)
+#define tainting               (curinterp->Itainting)
+#define tmps_floor             (curinterp->Itmps_floor)
+#define tmps_ix                        (curinterp->Itmps_ix)
+#define tmps_max               (curinterp->Itmps_max)
+#define tmps_stack             (curinterp->Itmps_stack)
+#define top_env                        (curinterp->Itop_env)
+#define toptarget              (curinterp->Itoptarget)
+#define unsafe                 (curinterp->Iunsafe)
+#define warnhook               (curinterp->Iwarnhook)
 
-#else  /* not multiple, so translate interpreter symbols the other way... */
+#else  /* !MULTIPLICITY */
 
-#define IArgv          Argv
-#define ICmd           Cmd
-#define IDBgv          DBgv
-#define IDBline                DBline
-#define IDBsignal      DBsignal
-#define IDBsingle      DBsingle
-#define IDBsub         DBsub
-#define IDBtrace       DBtrace
-#define Iallgvs                allgvs
-#define Iampergv       ampergv
-#define Iargvgv                argvgv
-#define Iargvoutgv     argvoutgv
-#define Ibasetime      basetime
-#define Ibeginav       beginav
-#define Ibodytarget    bodytarget
-#define Icddir         cddir
-#define Ichopset       chopset
-#define Icopline       copline
-#define Icurblock      curblock
-#define Icurcop                curcop
-#define Icurcopdb      curcopdb
-#define Icurcsv                curcsv
-#define Icurpm         curpm
-#define Icurstack      curstack
-#define Icurstash      curstash
-#define Icurstname     curstname
-#define Icxstack       cxstack
-#define Icxstack_ix    cxstack_ix
-#define Icxstack_max   cxstack_max
-#define Idbargs                dbargs
-#define Idebdelim      debdelim
-#define Idebname       debname
-#define Idebstash      debstash
-#define Idefgv         defgv
-#define Idefoutgv      defoutgv
-#define Idefstash      defstash
-#define Idelaymagic    delaymagic
-#define Idiehook       diehook
-#define Idirty         dirty
-#define Idlevel                dlevel
-#define Idlmax         dlmax
-#define Idoextract     doextract
-#define Idoswitches    doswitches
-#define Idowarn                dowarn
-#define Idumplvl       dumplvl
-#define Ie_fp          e_fp
-#define Ie_tmpname     e_tmpname
-#define Iendav         endav
-#define Ienvgv         envgv
-#define Ierrgv         errgv
-#define Ieval_root     eval_root
-#define Ieval_start    eval_start
-#define Ifdpid         fdpid
-#define Ifilemode      filemode
-#define Ifirstgv       firstgv
-#define Iforkprocess   forkprocess
-#define Iformfeed      formfeed
-#define Iformtarget    formtarget
-#define Igensym                gensym
-#define Iin_eval       in_eval
-#define Iincgv         incgv
-#define Iinplace       inplace
-#define Ilast_in_gv    last_in_gv
-#define Ilastfd                lastfd
-#define Ilastretstr    lastretstr
-#define Ilastscream    lastscream
-#define Ilastsize      lastsize
-#define Ilastspbase    lastspbase
-#define Ilaststatval   laststatval
-#define Ilaststype     laststype
-#define Ileftgv                leftgv
-#define Ilineary       lineary
-#define Ilocalizing    localizing
-#define Ilocalpatches  localpatches
-#define Imain_cv       main_cv
-#define Imain_root     main_root
-#define Imain_start    main_start
-#define Imainstack     mainstack
-#define Imaxscream     maxscream
-#define Imaxsysfd      maxsysfd
-#define Iminus_F       minus_F
-#define Iminus_a       minus_a
-#define Iminus_c       minus_c
-#define Iminus_l       minus_l
-#define Iminus_n       minus_n
-#define Iminus_p       minus_p
-#define Imultiline     multiline
-#define Imystack_base  mystack_base
-#define Imystack_mark  mystack_mark
-#define Imystack_max   mystack_max
-#define Imystack_sp    mystack_sp
-#define Imystrk                mystrk
-#define Inrs           nrs
-#define Iofmt          ofmt
-#define Iofs           ofs
-#define Iofslen                ofslen
-#define Ioldlastpm     oldlastpm
-#define Ioldname       oldname
-#define Iop_mask       op_mask
-#define Iorigargc      origargc
-#define Iorigargv      origargv
-#define Iorigfilename  origfilename
-#define Iors           ors
-#define Iorslen                orslen
-#define Iparsehook     parsehook
-#define Ipatchlevel    patchlevel
-#define Iperldb                perldb
+#define IArgv                  Argv
+#define ICmd                   Cmd
+#define IDBgv                  DBgv
+#define IDBline                        DBline
+#define IDBsignal              DBsignal
+#define IDBsingle              DBsingle
+#define IDBsub                 DBsub
+#define IDBtrace               DBtrace
+#define Iallgvs                        allgvs
+#define Iampergv               ampergv
+#define Iargvgv                        argvgv
+#define Iargvoutgv             argvoutgv
+#define Ibasetime              basetime
+#define Ibeginav               beginav
+#define Ibodytarget            bodytarget
+#define Icddir                 cddir
+#define Ichopset               chopset
+#define Icopline               copline
+#define Icurblock              curblock
+#define Icurcop                        curcop
+#define Icurcopdb              curcopdb
+#define Icurcsv                        curcsv
+#define Icurpm                 curpm
+#define Icurstack              curstack
+#define Icurstash              curstash
+#define Icurstname             curstname
+#define Icxstack               cxstack
+#define Icxstack_ix            cxstack_ix
+#define Icxstack_max           cxstack_max
+#define Idbargs                        dbargs
+#define Idebdelim              debdelim
+#define Idebname               debname
+#define Idebstash              debstash
+#define Idefgv                 defgv
+#define Idefoutgv              defoutgv
+#define Idefstash              defstash
+#define Idelaymagic            delaymagic
+#define Idiehook               diehook
+#define Idirty                 dirty
+#define Idlevel                        dlevel
+#define Idlmax                 dlmax
+#define Idoextract             doextract
+#define Idoswitches            doswitches
+#define Idowarn                        dowarn
+#define Idumplvl               dumplvl
+#define Ie_fp                  e_fp
+#define Ie_tmpname             e_tmpname
+#define Iendav                 endav
+#define Ienvgv                 envgv
+#define Ierrgv                 errgv
+#define Ieval_root             eval_root
+#define Ieval_start            eval_start
+#define Ifdpid                 fdpid
+#define Ifilemode              filemode
+#define Ifirstgv               firstgv
+#define Iforkprocess           forkprocess
+#define Iformfeed              formfeed
+#define Iformtarget            formtarget
+#define Igensym                        gensym
+#define Iin_eval               in_eval
+#define Iincgv                 incgv
+#define Iinplace               inplace
+#define Ilast_in_gv            last_in_gv
+#define Ilastfd                        lastfd
+#define Ilastretstr            lastretstr
+#define Ilastscream            lastscream
+#define Ilastsize              lastsize
+#define Ilastspbase            lastspbase
+#define Ilaststatval           laststatval
+#define Ilaststype             laststype
+#define Ileftgv                        leftgv
+#define Ilineary               lineary
+#define Ilocalizing            localizing
+#define Ilocalpatches          localpatches
+#define Imain_cv               main_cv
+#define Imain_root             main_root
+#define Imain_start            main_start
+#define Imainstack             mainstack
+#define Imaxscream             maxscream
+#define Imaxsysfd              maxsysfd
+#define Iminus_F               minus_F
+#define Iminus_a               minus_a
+#define Iminus_c               minus_c
+#define Iminus_l               minus_l
+#define Iminus_n               minus_n
+#define Iminus_p               minus_p
+#define Imultiline             multiline
+#define Imystack_base          mystack_base
+#define Imystack_mark          mystack_mark
+#define Imystack_max           mystack_max
+#define Imystack_sp            mystack_sp
+#define Imystrk                        mystrk
+#define Inrs                   nrs
+#define Iofmt                  ofmt
+#define Iofs                   ofs
+#define Iofslen                        ofslen
+#define Ioldlastpm             oldlastpm
+#define Ioldname               oldname
+#define Iop_mask               op_mask
+#define Iorigargc              origargc
+#define Iorigargv              origargv
+#define Iorigfilename          origfilename
+#define Iors                   ors
+#define Iorslen                        orslen
+#define Iparsehook             parsehook
+#define Ipatchlevel            patchlevel
 #define Iperl_destruct_level   perl_destruct_level
-#define Ipidstatus     pidstatus
-#define Ipreambled     preambled
-#define Ipreambleav    preambleav
-#define Ipreprocess    preprocess
-#define Irestartop     restartop
-#define Irightgv       rightgv
-#define Irs            rs
-#define Irunlevel      runlevel
-#define Isawampersand  sawampersand
-#define Isawstudy      sawstudy
-#define Isawvec                sawvec
-#define Iscreamfirst   screamfirst
-#define Iscreamnext    screamnext
-#define Isecondgv      secondgv
-#define Isiggv         siggv
-#define Isignalstack   signalstack
-#define Isortcop       sortcop
-#define Isortstack     sortstack
-#define Isortstash     sortstash
-#define Isplitstr      splitstr
-#define Istatcache     statcache
-#define Istatgv                statgv
-#define Istatname      statname
-#define Istatusvalue   statusvalue
-#define Istdingv       stdingv
-#define Istrchop       strchop
-#define Istrtab                strtab
-#define Isv_count      sv_count
-#define Isv_objcount   sv_objcount
-#define Isv_root       sv_root
-#define Isv_arenaroot  sv_arenaroot
-#define Itainted       tainted
-#define Itainting      tainting
-#define Itmps_floor    tmps_floor
-#define Itmps_ix       tmps_ix
-#define Itmps_max      tmps_max
-#define Itmps_stack    tmps_stack
-#define Itop_env       top_env
-#define Itoptarget     toptarget
-#define Iunsafe                unsafe
-#define Iwarnhook      warnhook
+#define Iperldb                        perldb
+#define Ipidstatus             pidstatus
+#define Ipreambleav            preambleav
+#define Ipreambled             preambled
+#define Ipreprocess            preprocess
+#define Irestartop             restartop
+#define Irightgv               rightgv
+#define Irs                    rs
+#define Irunlevel              runlevel
+#define Isawampersand          sawampersand
+#define Isawstudy              sawstudy
+#define Isawvec                        sawvec
+#define Iscreamfirst           screamfirst
+#define Iscreamnext            screamnext
+#define Isecondgv              secondgv
+#define Isiggv                 siggv
+#define Isignalstack           signalstack
+#define Isortcop               sortcop
+#define Isortstack             sortstack
+#define Isortstash             sortstash
+#define Isplitstr              splitstr
+#define Istatcache             statcache
+#define Istatgv                        statgv
+#define Istatname              statname
+#define Istatusvalue           statusvalue
+#define Istdingv               stdingv
+#define Istrchop               strchop
+#define Istrtab                        strtab
+#define Isv_arenaroot          sv_arenaroot
+#define Isv_count              sv_count
+#define Isv_objcount           sv_objcount
+#define Isv_root               sv_root
+#define Itainted               tainted
+#define Itainting              tainting
+#define Itmps_floor            tmps_floor
+#define Itmps_ix               tmps_ix
+#define Itmps_max              tmps_max
+#define Itmps_stack            tmps_stack
+#define Itop_env               top_env
+#define Itoptarget             toptarget
+#define Iunsafe                        unsafe
+#define Iwarnhook              warnhook
+
+/* Hide interpreter-specific symbols? */
 
 #ifdef EMBED
 
-#define Argv           Perl_Argv
-#define Cmd            Perl_Cmd
-#define DBgv           Perl_DBgv
-#define DBline         Perl_DBline
-#define DBsignal       Perl_DBsignal
-#define DBsingle       Perl_DBsingle
-#define DBsub          Perl_DBsub
-#define DBtrace                Perl_DBtrace
-#define allgvs         Perl_allgvs
-#define ampergv                Perl_ampergv
-#define argvgv         Perl_argvgv
-#define argvoutgv      Perl_argvoutgv
-#define basetime       Perl_basetime
-#define beginav                Perl_beginav
-#define bodytarget     Perl_bodytarget
-#define cddir          Perl_cddir
-#define chopset                Perl_chopset
-#define copline                Perl_copline
-#define curblock       Perl_curblock
-#define curcop         Perl_curcop
-#define curcopdb       Perl_curcopdb
-#define curcsv         Perl_curcsv
-#define curpm          Perl_curpm
-#define curstack       Perl_curstack
-#define curstash       Perl_curstash
-#define curstname      Perl_curstname
-#define cxstack                Perl_cxstack
-#define cxstack_ix     Perl_cxstack_ix
-#define cxstack_max    Perl_cxstack_max
-#define dbargs         Perl_dbargs
-#define debdelim       Perl_debdelim
-#define debname                Perl_debname
-#define debstash       Perl_debstash
-#define defgv          Perl_defgv
-#define defoutgv       Perl_defoutgv
-#define defstash       Perl_defstash
-#define delaymagic     Perl_delaymagic
-#define diehook                Perl_diehook
-#define dirty          Perl_dirty
-#define dlevel         Perl_dlevel
-#define dlmax          Perl_dlmax
-#define doextract      Perl_doextract
-#define doswitches     Perl_doswitches
-#define dowarn         Perl_dowarn
-#define dumplvl                Perl_dumplvl
-#define e_fp           Perl_e_fp
-#define e_tmpname      Perl_e_tmpname
-#define endav          Perl_endav
-#define envgv          Perl_envgv
-#define errgv          Perl_errgv
-#define eval_root      Perl_eval_root
-#define eval_start     Perl_eval_start
-#define fdpid          Perl_fdpid
-#define filemode       Perl_filemode
-#define firstgv                Perl_firstgv
-#define forkprocess    Perl_forkprocess
-#define formfeed       Perl_formfeed
-#define formtarget     Perl_formtarget
-#define gensym         Perl_gensym
-#define in_eval                Perl_in_eval
-#define incgv          Perl_incgv
-#define inplace                Perl_inplace
-#define last_in_gv     Perl_last_in_gv
-#define lastfd         Perl_lastfd
-#define lastretstr     Perl_lastretstr
-#define lastscream     Perl_lastscream
-#define lastsize       Perl_lastsize
-#define lastspbase     Perl_lastspbase
-#define laststatval    Perl_laststatval
-#define laststype      Perl_laststype
-#define leftgv         Perl_leftgv
-#define lineary                Perl_lineary
-#define localizing     Perl_localizing
-#define localpatches   Perl_localpatches
-#define main_cv                Perl_main_cv
-#define main_root      Perl_main_root
-#define main_start     Perl_main_start
-#define mainstack      Perl_mainstack
-#define maxscream      Perl_maxscream
-#define maxsysfd       Perl_maxsysfd
-#define minus_F                Perl_minus_F
-#define minus_a                Perl_minus_a
-#define minus_c                Perl_minus_c
-#define minus_l                Perl_minus_l
-#define minus_n                Perl_minus_n
-#define minus_p                Perl_minus_p
-#define multiline      Perl_multiline
-#define mystack_base   Perl_mystack_base
-#define mystack_mark   Perl_mystack_mark
-#define mystack_max    Perl_mystack_max
-#define mystack_sp     Perl_mystack_sp
-#define mystrk         Perl_mystrk
-#define nrs            Perl_nrs
-#define ofmt           Perl_ofmt
-#define ofs            Perl_ofs
-#define ofslen         Perl_ofslen
-#define oldlastpm      Perl_oldlastpm
-#define oldname                Perl_oldname
-#define op_mask                Perl_op_mask
-#define origargc       Perl_origargc
-#define origargv       Perl_origargv
-#define origfilename   Perl_origfilename
-#define ors            Perl_ors
-#define orslen         Perl_orslen
-#define parsehook      Perl_parsehook
-#define patchlevel     Perl_patchlevel
-#define perldb         Perl_perldb
+#define curcop                 Perl_curcop
+#define curcopdb               Perl_curcopdb
+#define envgv                  Perl_envgv
+#define siggv                  Perl_siggv
+#define tainting               Perl_tainting
+
+/* Hide interpreter symbols that 5.003 revealed? */
+
+#ifndef BINCOMPAT3
+
+#define Argv                   Perl_Argv
+#define Cmd                    Perl_Cmd
+#define DBgv                   Perl_DBgv
+#define DBline                 Perl_DBline
+#define DBsignal               Perl_DBsignal
+#define DBsingle               Perl_DBsingle
+#define DBsub                  Perl_DBsub
+#define DBtrace                        Perl_DBtrace
+#define allgvs                 Perl_allgvs
+#define ampergv                        Perl_ampergv
+#define argvgv                 Perl_argvgv
+#define argvoutgv              Perl_argvoutgv
+#define basetime               Perl_basetime
+#define beginav                        Perl_beginav
+#define bodytarget             Perl_bodytarget
+#define cddir                  Perl_cddir
+#define chopset                        Perl_chopset
+#define copline                        Perl_copline
+#define curblock               Perl_curblock
+#define curcsv                 Perl_curcsv
+#define curpm                  Perl_curpm
+#define curstack               Perl_curstack
+#define curstash               Perl_curstash
+#define curstname              Perl_curstname
+#define cxstack                        Perl_cxstack
+#define cxstack_ix             Perl_cxstack_ix
+#define cxstack_max            Perl_cxstack_max
+#define dbargs                 Perl_dbargs
+#define debdelim               Perl_debdelim
+#define debname                        Perl_debname
+#define debstash               Perl_debstash
+#define defgv                  Perl_defgv
+#define defoutgv               Perl_defoutgv
+#define defstash               Perl_defstash
+#define delaymagic             Perl_delaymagic
+#define diehook                        Perl_diehook
+#define dirty                  Perl_dirty
+#define dlevel                 Perl_dlevel
+#define dlmax                  Perl_dlmax
+#define doextract              Perl_doextract
+#define doswitches             Perl_doswitches
+#define dowarn                 Perl_dowarn
+#define dumplvl                        Perl_dumplvl
+#define e_fp                   Perl_e_fp
+#define e_tmpname              Perl_e_tmpname
+#define endav                  Perl_endav
+#define errgv                  Perl_errgv
+#define eval_root              Perl_eval_root
+#define eval_start             Perl_eval_start
+#define fdpid                  Perl_fdpid
+#define filemode               Perl_filemode
+#define firstgv                        Perl_firstgv
+#define forkprocess            Perl_forkprocess
+#define formfeed               Perl_formfeed
+#define formtarget             Perl_formtarget
+#define gensym                 Perl_gensym
+#define in_eval                        Perl_in_eval
+#define incgv                  Perl_incgv
+#define inplace                        Perl_inplace
+#define last_in_gv             Perl_last_in_gv
+#define lastfd                 Perl_lastfd
+#define lastretstr             Perl_lastretstr
+#define lastscream             Perl_lastscream
+#define lastsize               Perl_lastsize
+#define lastspbase             Perl_lastspbase
+#define laststatval            Perl_laststatval
+#define laststype              Perl_laststype
+#define leftgv                 Perl_leftgv
+#define lineary                        Perl_lineary
+#define localizing             Perl_localizing
+#define localpatches           Perl_localpatches
+#define main_cv                        Perl_main_cv
+#define main_root              Perl_main_root
+#define main_start             Perl_main_start
+#define mainstack              Perl_mainstack
+#define maxscream              Perl_maxscream
+#define maxsysfd               Perl_maxsysfd
+#define minus_F                        Perl_minus_F
+#define minus_a                        Perl_minus_a
+#define minus_c                        Perl_minus_c
+#define minus_l                        Perl_minus_l
+#define minus_n                        Perl_minus_n
+#define minus_p                        Perl_minus_p
+#define multiline              Perl_multiline
+#define mystack_base           Perl_mystack_base
+#define mystack_mark           Perl_mystack_mark
+#define mystack_max            Perl_mystack_max
+#define mystack_sp             Perl_mystack_sp
+#define mystrk                 Perl_mystrk
+#define nrs                    Perl_nrs
+#define ofmt                   Perl_ofmt
+#define ofs                    Perl_ofs
+#define ofslen                 Perl_ofslen
+#define oldlastpm              Perl_oldlastpm
+#define oldname                        Perl_oldname
+#define op_mask                        Perl_op_mask
+#define origargc               Perl_origargc
+#define origargv               Perl_origargv
+#define origfilename           Perl_origfilename
+#define ors                    Perl_ors
+#define orslen                 Perl_orslen
+#define parsehook              Perl_parsehook
+#define patchlevel             Perl_patchlevel
 #define perl_destruct_level    Perl_perl_destruct_level
-#define pidstatus      Perl_pidstatus
-#define preambled      Perl_preambled
-#define preambleav     Perl_preambleav
-#define preprocess     Perl_preprocess
-#define restartop      Perl_restartop
-#define rightgv                Perl_rightgv
-#define rs             Perl_rs
-#define runlevel       Perl_runlevel
-#define sawampersand   Perl_sawampersand
-#define sawstudy       Perl_sawstudy
-#define sawvec         Perl_sawvec
-#define screamfirst    Perl_screamfirst
-#define screamnext     Perl_screamnext
-#define secondgv       Perl_secondgv
-#define siggv          Perl_siggv
-#define signalstack    Perl_signalstack
-#define sortcop                Perl_sortcop
-#define sortstack      Perl_sortstack
-#define sortstash      Perl_sortstash
-#define splitstr       Perl_splitstr
-#define statcache      Perl_statcache
-#define statgv         Perl_statgv
-#define statname       Perl_statname
-#define statusvalue    Perl_statusvalue
-#define stdingv                Perl_stdingv
-#define strchop                Perl_strchop
-#define strtab         Perl_strtab
-#define sv_count       Perl_sv_count
-#define sv_objcount    Perl_sv_objcount
-#define sv_root                Perl_sv_root
-#define sv_arenaroot   Perl_sv_arenaroot
-#define tainted                Perl_tainted
-#define tainting       Perl_tainting
-#define tmps_floor     Perl_tmps_floor
-#define tmps_ix                Perl_tmps_ix
-#define tmps_max       Perl_tmps_max
-#define tmps_stack     Perl_tmps_stack
-#define top_env                Perl_top_env
-#define toptarget      Perl_toptarget
-#define unsafe         Perl_unsafe
-#define warnhook       Perl_warnhook
+#define perldb                 Perl_perldb
+#define pidstatus              Perl_pidstatus
+#define preambleav             Perl_preambleav
+#define preambled              Perl_preambled
+#define preprocess             Perl_preprocess
+#define restartop              Perl_restartop
+#define rightgv                        Perl_rightgv
+#define rs                     Perl_rs
+#define runlevel               Perl_runlevel
+#define sawampersand           Perl_sawampersand
+#define sawstudy               Perl_sawstudy
+#define sawvec                 Perl_sawvec
+#define screamfirst            Perl_screamfirst
+#define screamnext             Perl_screamnext
+#define secondgv               Perl_secondgv
+#define signalstack            Perl_signalstack
+#define sortcop                        Perl_sortcop
+#define sortstack              Perl_sortstack
+#define sortstash              Perl_sortstash
+#define splitstr               Perl_splitstr
+#define statcache              Perl_statcache
+#define statgv                 Perl_statgv
+#define statname               Perl_statname
+#define statusvalue            Perl_statusvalue
+#define stdingv                        Perl_stdingv
+#define strchop                        Perl_strchop
+#define strtab                 Perl_strtab
+#define sv_arenaroot           Perl_sv_arenaroot
+#define sv_count               Perl_sv_count
+#define sv_objcount            Perl_sv_objcount
+#define sv_root                        Perl_sv_root
+#define tainted                        Perl_tainted
+#define tmps_floor             Perl_tmps_floor
+#define tmps_ix                        Perl_tmps_ix
+#define tmps_max               Perl_tmps_max
+#define tmps_stack             Perl_tmps_stack
+#define top_env                        Perl_top_env
+#define toptarget              Perl_toptarget
+#define unsafe                 Perl_unsafe
+#define warnhook               Perl_warnhook
+
+#endif /* !BINCOMPAT3 */
 
 #endif /* EMBED */
 
index a1e77db..266a33e 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -1,12 +1,52 @@
-#!/usr/bin/perl
+#!/usr/bin/perl -w
 
-unlink "embed.h";
-open(EM, ">embed.h") || die "Can't create embed.h: $!\n";
+require 5.003;
+
+sub readsyms (\%$) {
+    my ($syms, $file) = @_;
+    %$syms = ();
+    local (*FILE, $_);
+    open(FILE, "< $file")
+       or die "embed.pl: Can't open $file: $!\n";
+    while (<FILE>) {
+       s/[ \t]*#.*//;          # Delete comments.
+       if (/^\s*(\S+)\s*$/) {
+           $$syms{$1} = 1;
+       }
+    }
+    close(FILE);
+}
+
+readsyms %global, 'global.sym';
+readsyms %interp, 'interp.sym';
+readsyms %compat3, 'compat3.sym';
+
+sub hide ($$) {
+    my ($from, $to) = @_;
+    my $t = int(length($from) / 8);
+    "#define $from" . "\t" x ($t < 3 ? 3 - $t : 1) . "$to\n";
+}
+sub embed ($) {
+    my ($sym) = @_;
+    hide($sym, "Perl_$sym");
+}
+sub multon ($) {
+    my ($sym) = @_;
+    hide($sym, "(curinterp->I$sym)");
+}
+sub multoff ($) {
+    my ($sym) = @_;
+    hide("I$sym", $sym);
+}
+
+unlink 'embed.h';
+open(EM, '> embed.h')
+    or die "Can't create embed.h: $!\n";
 
 print EM <<'END';
 /* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!! 
-   This file is built by embed.pl from global.sym and interp.sym.
-   Any changes made here will be lost 
+   This file is built by embed.pl from global.sym, interp.sym,
+   and compat3.sym.  Any changes made here will be lost!
 */
 
 /* (Doing namespace management portably in C is really gross.) */
@@ -21,78 +61,82 @@ print EM <<'END';
 #  define EMBED 1 
 #endif
 
+/* Hide global symbols? */
+
 #ifdef EMBED
 
-/* globals we need to hide from the world */
 END
 
-open(GL, "<global.sym") || die "Can't open global.sym: $!\n";
-
-while(<GL>) {
-       s/[ \t]*#.*//;          # Delete comments.
-       next unless /\S/;
-       s/^\s*(\S+).*$/#define $1\t\tPerl_$1/;
-       $global{$1} = 1; 
-       s/(................\t)\t/$1/;
-       print EM $_;
+for $sym (sort keys %global) {
+    print EM embed($sym) unless $compat3{$sym};
 }
 
-close(GL) || warn "Can't close global.sym: $!\n";
+print EM <<'END';
+
+/* Hide global symbols that 5.003 revealed? */
+
+#ifndef BINCOMPAT3
+
+END
+
+for $sym (sort keys %global) {
+    print EM embed($sym) if $compat3{$sym};
+}
 
 print EM <<'END';
 
+#endif /* !BINCOMPAT3 */
+
 #endif /* EMBED */
 
-/* Put interpreter specific symbols into a struct? */
+/* Put interpreter-specific symbols into a struct? */
 
 #ifdef MULTIPLICITY
 
 END
 
-open(INT, "<interp.sym") || die "Can't open interp.sym: $!\n";
-while (<INT>) {
-       s/[ \t]*#.*//;          # Delete comments.
-       next unless /\S/;
-       s/^\s*(\S+).*$/#define $1\t\t(curinterp->I$1)/;
-       s/(................\t)\t/$1/;
-       print EM $_;
+for $sym (sort keys %interp) {
+    print EM multon($sym);
 }
-close(INT) || warn "Can't close interp.sym: $!\n";
 
 print EM <<'END';
 
-#else  /* not multiple, so translate interpreter symbols the other way... */
+#else  /* !MULTIPLICITY */
 
 END
 
-open(INT, "<interp.sym") || die "Can't open interp.sym: $!\n";
-while (<INT>) {
-       s/[ \t]*#.*//;          # Delete comments.
-       next unless /\S/;
-       s/^\s*(\S+).*$/#define I$1\t\t$1/;
-       s/(................\t)\t/$1/;
-       print EM $_;
+for $sym (sort keys %interp) {
+    print EM multoff($sym);
 }
-close(INT) || warn "Can't close interp.sym: $!\n";
 
 print EM <<'END';
 
+/* Hide interpreter-specific symbols? */
+
 #ifdef EMBED
 
 END
 
-open(INT, "<interp.sym") || die "Can't open interp.sym: $!\n";
-while (<INT>) {
-       s/[ \t]*#.*//;          # Delete comments.
-       next unless /\S/;
-       s/^\s*(\S+).*$/#define $1\t\tPerl_$1/;
-       s/(................\t)\t/$1/;
-       print EM $_;
+for $sym (sort keys %interp) {
+    print EM embed($sym) if $compat3{$sym};
 }
-close(INT) || warn "Can't close interp.sym: $!\n";
 
 print EM <<'END';
 
+/* Hide interpreter symbols that 5.003 revealed? */
+
+#ifndef BINCOMPAT3
+
+END
+
+for $sym (sort keys %interp) {
+    print EM embed($sym) unless $compat3{$sym};
+}
+
+print EM <<'END';
+
+#endif /* !BINCOMPAT3 */
+
 #endif /* EMBED */
 
 #endif /* MULTIPLICITY */
index 2e20cfd..925b208 100644 (file)
@@ -408,7 +408,7 @@ sub write {
 
 sub syswrite {
     @_ == 3 || @_ == 4 or croak '$fh->syswrite(BUF, LEN [, OFFSET])';
-    sysread($_[0], $_[1], $_[2], $_[3] || 0);
+    syswrite($_[0], $_[1], $_[2], $_[3] || 0);
 }
 
 sub stat {
index 6007b97..2277279 100644 (file)
@@ -1,14 +1,13 @@
 package Safe;
 
-require 5.002;
-
+use 5.003_11;
 use strict;
-use Carp;
-
 use vars qw($VERSION);
 
 $VERSION = "2.06";
 
+use Carp;
+
 use Opcode 1.01, qw(
     opset opset_to_ops opmask_add
     empty_opset full_opset invert_opset verify_opset
index e5f9b2f..70527cd 100644 (file)
@@ -2665,6 +2665,7 @@ localeconv()
 #ifdef HAS_LOCALECONV
        struct lconv *lcbuf;
        RETVAL = newHV();
+       SET_NUMERIC_LOCAL();
        if (lcbuf = localeconv()) {
            /* the strings */
            if (lcbuf->decimal_point && *lcbuf->decimal_point)
index 729aa18..3e9f9de 100644 (file)
@@ -4,7 +4,6 @@
 
 AMG_names
 Error
-He
 No
 Sv
 Xpv
@@ -64,9 +63,6 @@ exp_amg
 expect
 expectterm
 fallback_amg
-filter_add
-filter_del
-filter_read
 fold
 fold_locale
 freq
@@ -124,8 +120,6 @@ ne_amg
 neg_amg
 nexttoke
 nexttype
-nexttype
-nextval
 nextval
 nice_chunk
 nice_chunk_size
@@ -207,8 +201,6 @@ rsfp
 rsfp_filters
 rshift_amg
 rshift_ass_amg
-save_iv
-save_pptr
 savestack
 savestack_ix
 savestack_max
@@ -224,7 +216,6 @@ sgt_amg
 sh_path
 sig_name
 sig_num
-sighandler
 simple
 sin_amg
 sle_amg
@@ -496,6 +487,7 @@ magic_clearenv
 magic_clearpack
 magic_clearsig
 magic_existspack
+magic_freevivary
 magic_get
 magic_getarylen
 magic_getglob
@@ -525,6 +517,7 @@ magic_setsubstr
 magic_settaint
 magic_setuvar
 magic_setvec
+magic_setvivary
 magic_wipepack
 magicname
 markstack_grow
@@ -1008,10 +1001,12 @@ save_destructor
 save_freeop
 save_freepv
 save_freesv
+save_gp
 save_hash
 save_hptr
 save_int
 save_item
+save_iv
 save_list
 save_long
 save_nogv
index e8bee39..f1ab871 100644 (file)
@@ -63,6 +63,16 @@ case "$osvers" in
        d_setreuid='define'
        d_setegid='undef'
        d_seteuid='undef'
+       cat <<EOF
+
+Unless you've upgraded your DB library manually you will see failures in
+db-recno tests 51, 53 and 55.  The behavior these tests are checking is
+broken in the DB library which is included with the OS.  You can ignore
+the errors if you're never going to use the broken functionality (recno
+databases with a modified bval), otherwise you'll have to upgrade your
+DB library or OS.
+
+EOF
        ;;
 #
 # 2.2 and above have phkmalloc(3).
diff --git a/hints/lynxos.sh b/hints/lynxos.sh
new file mode 100644 (file)
index 0000000..5f8991b
--- /dev/null
@@ -0,0 +1,12 @@
+#
+# LynxOS hints
+#
+# These hints were submitted by:
+#   Greg Seibert
+#   seibert@Lynx.COM
+#
+
+cc='gcc'
+ccflags='-D_filbuf=_fillbuf'
+so='none'
+usemymalloc='n'
index f4e6895..ddbe595 100755 (executable)
@@ -1,6 +1,7 @@
 #!./perl
 BEGIN { @INC=('./lib', '../lib') }
 use File::Find;
+use File::Compare;
 use File::Path ();
 use Config;
 use subs qw(unlink rename link chmod);
@@ -23,7 +24,7 @@ while (@ARGV) {
 umask 022;
 
 @scripts = qw( utils/c2ph utils/h2ph utils/h2xs
-               utils/perlbug utils/perldoc utils/pl2pm
+               utils/perlbug utils/perldoc utils/pl2pm utils/splain
                x2p/s2p x2p/find2perl
                pod/pod2man pod/pod2html pod/pod2latex pod/pod2text);
 
@@ -343,8 +344,11 @@ sub installlib {
 
     $name = "$dir/$name" if $dir ne '';
 
+    # ignore Chip-style patch backups.
+    return if grep(/^P\d+$/, split(m{/+}, $name));
+
     my $installlib = $installprivlib;
-    if ((substr($dir, 0, 4) eq 'auto') || ($name eq 'Config.pm')) {
+    if ($dir =~ /^auto/ || $name =~ /^(Config|FileHandle|Safe)\.pm$/) {
         $installlib = $installarchlib;
        return unless $do_installarchlib;
     } else {
@@ -360,8 +364,7 @@ sub installlib {
            #This might not work because $archname might have changed.
            &unlink("$installarchlib/$name");
        }
-       system "cmp", "-s", $_, "$installlib/$name";
-       if ($? || $nonono) {
+       if (compare($_, "$installlib/$name") || $nonono) {
            &unlink("$installlib/$name");
            mkpath("$installlib/$dir", 1, 0777);
            cp_if_diff($_, "$installlib/$name");
@@ -390,8 +393,7 @@ sub installlib {
 sub cp_if_diff {
     my($from,$to)=@_;
     -f $from || die "$0: $from not found";
-    system "cmp", "-s", $from, $to;
-    if ($? || $nonono) {
+    if (compare($from, $to) || $nonono) {
        my ($atime, $mtime);
        unlink($to);   # In case we don't have write permissions.
         if ($nonono) {
diff --git a/lib/CPAN.pm b/lib/CPAN.pm
new file mode 100644 (file)
index 0000000..c755aa1
--- /dev/null
@@ -0,0 +1,2350 @@
+package CPAN;
+use vars qw{$META $Signal $Cwd $End $Suppress_readline};
+
+$VERSION = '1.02';
+
+# $Id: CPAN.pm,v 1.77 1996/12/11 01:26:43 k Exp $
+
+# my $version = substr q$Revision: 1.77 $, 10; # only used during development
+
+BEGIN {require 5.003;}
+require UNIVERSAL if $] == 5.003;
+
+use Carp ();
+use Config ();
+use Cwd ();
+use DirHandle;
+use Exporter ();
+use ExtUtils::MakeMaker ();
+use File::Basename ();
+use File::Find;
+use File::Path ();
+use IO::File ();
+use Safe ();
+
+$Cwd = Cwd::cwd();
+
+END { $End++; &cleanup; }
+
+%CPAN::DEBUG = qw(
+                 CPAN              1
+                 Index             2
+                 InfoObj           4
+                 Author            8
+                 Distribution     16
+                 Bundle           32
+                 Module           64
+                 CacheMgr        128
+                 Complete        256
+                 FTP             512
+                 Shell          1024
+                 Eval           2048
+                 Config         4096
+                );
+
+$CPAN::DEBUG ||= 0;
+
+package CPAN;
+use vars qw($VERSION @ISA @EXPORT $AUTOLOAD $DEBUG $META);
+use strict qw(vars);
+
+@ISA = qw(CPAN::Debug Exporter MY); # the MY class from MakeMaker, gives us catfile and catdir
+
+$META ||= new CPAN;                 # In case we reeval ourselves we need a ||
+
+CPAN::Config->load;
+
+@EXPORT = qw(autobundle bundle expand force install make recompile shell test clean);
+
+sub autobundle;
+sub bundle;
+sub bundles;
+sub expand;
+sub force;
+sub install;
+sub make;
+sub shell;
+sub clean;
+sub test;
+
+sub AUTOLOAD {
+    my($l) = $AUTOLOAD;
+    $l =~ s/.*:://;
+    my(%EXPORT);
+    @EXPORT{@EXPORT} = '';
+    if (exists $EXPORT{$l}){
+       CPAN::Shell->$l(@_);
+    } else {
+       warn "CPAN doesn't know how to autoload $AUTOLOAD :-(
+Nothing Done.
+";
+       CPAN::Shell->h;
+    }
+}
+
+sub all {
+    my($mgr,$class) = @_;
+    CPAN->debug("mgr[$mgr] class[$class]") if $CPAN::DEBUG;
+    CPAN::Index->reload;
+    values %{ $META->{$class} };
+}
+
+# Called by shell, not in batch mode. Not clean XXX
+sub checklock {
+    my($self) = @_;
+    my $lockfile = CPAN->catfile($CPAN::Config->{cpan_home},".lock");
+    if (-f $lockfile && -M _ > 0) {
+       my $fh = IO::File->new($lockfile);
+       my $other = <$fh>;
+       $fh->close;
+       if (defined $other && $other) {
+           chomp $other;
+           return if $$==$other; # should never happen
+           print qq{There seems to be running another CPAN process ($other). Trying to contact...\n};
+           if (kill 0, $other) {
+               Carp::croak qq{Other job is running.\n}.
+                   qq{You may want to kill it and delete the lockfile, maybe. On UNIX try:\n}.
+                       qq{    kill $other\n}.
+                           qq{    rm $lockfile\n};
+           } elsif (-w $lockfile) {
+               my($ans)=
+                   ExtUtils::MakeMaker::prompt
+                       (qq{Other job not responding. Shall I overwrite the lockfile? (Y/N)},"y");
+               print("Ok, bye\n"), exit unless $ans =~ /^y/i;
+           } else {
+               Carp::croak(
+                           qq{Lockfile $lockfile not writeable by you. Cannot proceed.\n}.
+                           qq{    On UNIX try:\n}.
+                           qq{    rm $lockfile\n}.
+                           qq{  and then rerun us.\n}
+                          );
+           }
+       }
+    }
+    File::Path::mkpath($CPAN::Config->{cpan_home});
+    my $fh;
+    unless ($fh = IO::File->new(">$lockfile")) {
+       if ($! =~ /Permission/) {
+           my $incc = $INC{'CPAN/Config.pm'};
+           my $myincc = MY->catfile($ENV{HOME},'.cpan','CPAN','MyConfig.pm');
+           print qq{
+
+Your configuration suggests that CPAN.pm should use a working
+directory of
+    $CPAN::Config->{cpan_home}
+Unfortunately we could not create the lock file
+    $lockfile
+due to permission problems.
+
+Please make sure that the configuration variable
+    \$CPAN::Config->{cpan_home}
+points to a directory where you can write a .lock file. You can set
+this variable in either
+    $incc
+or
+    $myincc
+
+};
+       }
+       Carp::croak "Could not open >$lockfile: $!";
+    }
+    print $fh $$, "\n";
+    $self->{LOCK} = $lockfile;
+    $fh->close;
+    $SIG{'TERM'} = sub { &cleanup; die "Got SIGTERM, leaving"; };
+    $SIG{'INT'} = sub { &cleanup, die "Got a second SIGINT" if $Signal; $Signal = 1; };
+    $SIG{'__DIE__'} = \&cleanup;
+    print STDERR "Signal handler set.\n" unless $CPAN::Config->{'inhibit_startup_message'};
+}
+
+sub DESTROY {
+    &cleanup; # need an eval?
+}
+
+sub exists {
+    my($mgr,$class,$id) = @_;
+    CPAN::Index->reload;
+    Carp::croak "exists called without class argument" unless $class;
+    $id ||= "";
+    exists $META->{$class}{$id};
+}
+
+sub hasFTP {
+    my($self,$arg) = @_;
+    if (defined $arg) {
+       return $self->{'hasFTP'} = $arg;
+    } elsif (not defined $self->{'hasFTP'}) {
+       eval {require Net::FTP;};
+       $self->{'hasFTP'} = $@ ? 0 : 1;
+    }
+    return $self->{'hasFTP'};
+}
+
+sub hasLWP {
+    my($self,$arg) = @_;
+    if (defined $arg) {
+       return $self->{'hasLWP'} = $arg;
+    } elsif (not defined $self->{'hasLWP'}) {
+       eval {require LWP;};
+       $LWP::VERSION ||= 0;
+        $self->{'hasLWP'} = $LWP::VERSION >= 4.98;
+    }
+    return $self->{'hasLWP'};
+}
+
+sub hasMD5 {
+    my($self,$arg) = @_;
+    if (defined $arg) {
+       $self->{'hasMD5'} = $arg;
+    } elsif (not defined $self->{'hasMD5'}) {
+       eval {require MD5;};
+       if ($@) {
+           print "MD5 security checks disabled because MD5 not installed. Please consider installing MD5\n";
+           $self->{'hasMD5'} = 0;
+       } else {
+           $self->{'hasMD5'}++;
+       }
+    }
+    return $self->{'hasMD5'};
+}
+
+sub instance {
+    my($mgr,$class,$id) = @_;
+    CPAN::Index->reload;
+    Carp::croak "instance called without class argument" unless $class;
+    $id ||= "";
+    $META->{$class}{$id} ||= $class->new(ID => $id );
+}
+
+sub new {
+    bless {}, shift;
+}
+
+sub cleanup {
+    local $SIG{__DIE__} = '';
+    my $i = 0; my $ineval = 0; my $sub;
+    while ((undef,undef,undef,$sub) = caller(++$i)) {
+      $ineval = 1, last if $sub eq '(eval)';
+    }
+    return if $ineval && !$End;
+    return unless defined $META->{'LOCK'};
+    return unless -f $META->{'LOCK'};
+    unlink $META->{'LOCK'};
+    print STDERR "Lockfile removed.\n";
+#    my $mess = Carp::longmess(@_);
+#    die @_;
+}
+
+sub shell {
+    $Suppress_readline ||= ! -t STDIN;
+
+    my $prompt = "cpan> ";
+    local($^W) = 1;
+    my $term;
+    unless ($Suppress_readline) {
+       require Term::ReadLine;
+       import Term::ReadLine;
+       $term = new Term::ReadLine 'CPAN Monitor';
+       $readline::rl_completion_function =
+           $readline::rl_completion_function = 'CPAN::Complete::complete';
+    }
+
+    no strict;
+    $META->checklock();
+    my $cwd = Cwd::cwd();
+    # How should we determine if we have more than stub ReadLine enabled?
+    my $rl_avail = $Suppress_readline ? "suppressed" :
+       defined &Term::ReadLine::Perl::readline ? "enabled" :
+           "available (get Term::ReadKey and Term::ReadLine::Perl)";
+
+    print qq{
+cpan shell -- CPAN exploration and modules installation (v$CPAN::VERSION)
+Readline support $rl_avail
+
+} unless $CPAN::Config->{'inhibit_startup_message'} ;
+    while () {
+       if ($Suppress_readline) {
+           print $prompt;
+           last unless defined (chomp($_ = <>));
+       } else {
+           last unless defined ($_ = $term->readline($prompt));
+       }
+       s/^\s//;
+       next if /^$/;
+       $_ = 'h' if $_ eq '?';
+       if (/^\!/) {
+           s/^\!//;
+           my($eval) = $_;
+           package CPAN::Eval;
+           use vars qw($import_done);
+           CPAN->import(':DEFAULT') unless $import_done++;
+           CPAN->debug("eval[$eval]") if $CPAN::DEBUG;
+           eval($eval);
+           warn $@ if $@;
+       } elsif (/^q(?:uit)?$/i) {
+           last;
+       } elsif (/./) {
+           my @line = split;
+           my $command = shift @line;
+           eval { CPAN::Shell->$command(@line) };
+           warn $@ if $@;
+       }
+    } continue {
+       &cleanup, die if $Signal;
+       chdir $cwd;
+       print "\n";
+    }
+}
+
+package CPAN::Shell;
+use vars qw(@ISA $AUTOLOAD);
+@ISA = qw(CPAN::Debug);
+
+# private function ro re-eval this module (handy during development)
+sub AUTOLOAD {
+    warn "CPAN::Shell doesn't know how to autoload $AUTOLOAD :-(
+Nothing Done.
+";
+       CPAN::Shell->h;
+}
+
+sub h {
+    my($class,$about) = @_;
+    if (defined $about) {
+       print "Detailed help not yet implemented\n";
+    } else {
+       print q{
+command   arguments       description
+a         string                  authors
+b         or              display bundles
+d         /regex/         info    distributions
+m         or              about   modules
+i         none                    anything of above
+
+r          as             reinstall recommendations
+u          above          uninstalled distributions
+See manpage for autobundle() and recompile()
+
+make      modules,        make
+test      dists, bundles, make test (implies make)
+install   "r" or "u"      make install (implies test)
+clean                     make clean
+
+reload    index|cpan    load most recent indices/CPAN.pm
+h or ?                  display this menu
+o         various       set and query options
+!         perl-code     eval a perl command
+q                       quit the shell subroutine
+};
+    }
+}
+
+sub a { print shift->format_result('Author',@_);}
+sub b {
+    my($self,@which) = @_;
+    my($bdir) = $CPAN::META->catdir($CPAN::Config->{'cpan_home'},"Bundle");
+    my($dh) = DirHandle->new($bdir); # may fail!
+    my($entry);
+    for $entry ($dh->read) {
+       next if -d $CPAN::META->catdir($bdir,$entry);
+       next unless $entry =~ s/\.pm$//;
+       $CPAN::META->instance('CPAN::Bundle',"Bundle::$entry");
+    }
+    print $self->format_result('Bundle',@which);
+}
+sub d { print shift->format_result('Distribution',@_);}
+sub m { print shift->format_result('Module',@_);}
+
+sub i {
+    my($self) = shift;
+    my(@args) = @_;
+    my(@type,$type,@m);
+    @type = qw/Author Bundle Distribution Module/;
+    @args = '/./' unless @args;
+    my(@result);
+    for $type (@type) {
+       push @result, $self->expand($type,@args);
+    }
+    my $result =  @result==1 ? $result[0]->as_string : join "", map {$_->as_glimpse} @result;
+    $result ||= "No objects found of any type for argument @args\n";
+    print $result;
+}
+
+sub o {
+    my($self,$o_type,@o_what) = @_;
+    $o_type ||= "";
+    CPAN->debug("o_type[$o_type] o_what[@o_what]\n");
+    if ($o_type eq 'conf') {
+       shift @o_what if @o_what && $o_what[0] eq 'help';
+       if (!@o_what) {
+           my($k,$v);
+           print "CPAN::Config options:\n";
+           for $k (sort keys %CPAN::Config::can) {
+               $v = $CPAN::Config::can{$k};
+               printf "    %-18s %s\n", $k, $v;
+           }
+           print "\n";
+           for $k (sort keys %$CPAN::Config) {
+               $v = $CPAN::Config->{$k};
+               if (ref $v) {
+                   printf "    %-18s\n", $k;
+                   print map {"\t$_\n"} @{$v};
+               } else {
+                   printf "    %-18s %s\n", $k, $v;
+               }
+           }
+           print "\n";
+       } elsif (!CPAN::Config->edit(@o_what)) {
+           print qq[Type 'o conf' to view configuration edit options\n\n];
+       }
+    } elsif ($o_type eq 'debug') {
+       my(%valid);
+       @o_what = () if defined $o_what[0] && $o_what[0] =~ /help/i;
+       if (@o_what) {
+           while (@o_what) {
+               my($what) = shift @o_what;
+               if ( exists $CPAN::DEBUG{$what} ) {
+                   $CPAN::DEBUG |= $CPAN::DEBUG{$what};
+               } elsif ($what =~ /^\d/) {
+                   $CPAN::DEBUG = $what;
+               } elsif (lc $what eq 'all') {
+                   my($max) = 0;
+                   for (values %CPAN::DEBUG) {
+                       $max += $_;
+                   }
+                   $CPAN::DEBUG = $max;
+               } else {
+                   for (keys %CPAN::DEBUG) {
+                       next unless lc($_) eq lc($what);
+                       $CPAN::DEBUG |= $CPAN::DEBUG{$_};
+                   }
+                   print "unknown argument $what\n";
+               }
+           }
+       } else {
+           print "Valid options for debug are ".join(", ",sort(keys %CPAN::DEBUG), 'all').
+               " or a number. Completion works on the options. Case is ignored.\n\n";
+       }
+       if ($CPAN::DEBUG) {
+           print "Options set for debugging:\n";
+           my($k,$v);
+           for $k (sort {$CPAN::DEBUG{$a} <=> $CPAN::DEBUG{$b}} keys %CPAN::DEBUG) {
+               $v = $CPAN::DEBUG{$k};
+               printf "    %-14s(%s)\n", $k, $v if $v & $CPAN::DEBUG;
+           }
+       } else {
+           print "Debugging turned off completely.\n";
+       }
+    } else {
+       print qq{
+Known options:
+  conf    set or get configuration variables
+  debug   set or get debugging options
+};
+    }
+}
+
+sub reload {
+    if ($_[1] =~ /cpan/i) {
+       CPAN->debug("reloading the whole CPAN.pm") if $CPAN::DEBUG;
+       my $fh = IO::File->new($INC{'CPAN.pm'});
+       local $/;
+       undef $/;
+       eval <$fh>;
+       warn $@ if $@;
+    } elsif ($_[1] =~ /index/) {
+       CPAN::Index->force_reload;
+    }
+}
+
+sub _binary_extensions {
+    my($self) = shift @_;
+    my(@result,$module,%seen,%need,$headerdone);
+    for $module ($self->expand('Module','/./')) {
+       my $file  = $module->cpan_file;
+       next if $file eq "N/A";
+       next if $file =~ /^Contact Author/;
+       next if $file =~ /perl5[._-]\d{3}(?:[\d_]+)?\.tar[._-]gz$/;
+       next unless $module->xs_file;
+       push @result, $module;
+    }
+#    print join " | ", @result;
+#    print "\n";
+    return @result;
+}
+
+sub recompile {
+    my($self) = shift @_;
+    my($module,@module,$cpan_file,%dist);
+    @module = $self->_binary_extensions();
+    for $module (@module){  # we force now and compile later, so we don't do it twice
+       $cpan_file = $module->cpan_file;
+       my $pack = $CPAN::META->instance('CPAN::Distribution',$cpan_file);
+       $pack->force;
+       $dist{$cpan_file}++;
+    }
+    for $cpan_file (sort keys %dist) {
+       print "  CPAN: Recompiling $cpan_file\n\n";
+       my $pack = $CPAN::META->instance('CPAN::Distribution',$cpan_file);
+       $pack->install;
+       $CPAN::Signal = 0; # it's tempting to reset Signal, so we can
+                           # stop a package from recompiling,
+                           # e.g. IO-1.12 when we have perl5.003_10
+    }
+}
+
+sub _u_r_common {
+    my($self) = shift @_;
+    my($what) = shift @_;
+    CPAN->debug("self[$self] what[$what] args[@_]") if $CPAN::DEBUG;
+    Carp::croak "Usage: \$obj->_u_r_common($what)" unless defined $what;
+    Carp::croak "Usage: \$obj->_u_r_common(a|r|u)" unless $what =~ /^[aru]$/;
+    my(@args) = @_;
+    @args = '/./' unless @args;
+    my(@result,$module,%seen,%need,$headerdone,$version_zeroes);
+    $version_zeroes = 0;
+    my $sprintf = "%-25s %9s %9s  %s\n";
+    for $module ($self->expand('Module',@args)) {
+       my $file  = $module->cpan_file;
+       next unless defined $file; # ??
+       my($latest) = $module->cpan_version || 0;
+       my($inst_file) = $module->inst_file;
+       my($have);
+       if ($inst_file){
+           if ($what eq "a") {
+               $have = $module->inst_version;
+           } elsif ($what eq "r") {
+               $have = $module->inst_version;
+               local($^W) = 0;
+               $version_zeroes++ unless $have;
+               next if $have >= $latest;
+           } elsif ($what eq "u") {
+               next;
+           }
+       } else {
+           if ($what eq "a") {
+               next;
+           } elsif ($what eq "r") {
+               next;
+           } elsif ($what eq "u") {
+               $have = "-";
+           }
+       }
+       $seen{$file} ||= 0;
+       if ($what eq "a") {
+           push @result, sprintf "%s %s\n", $module->id, $have;
+       } elsif ($what eq "r") {
+           push @result, $module->id;
+           next if $seen{$file}++;
+       } elsif ($what eq "u") {
+           push @result, $module->id;
+           next if $seen{$file}++;
+           next if $file =~ /^Contact/;
+       }
+       unless ($headerdone++){
+           print "\n";
+           printf $sprintf, "Package namespace", "installed", "latest", "in CPAN file";
+       }
+       $latest = substr($latest,0,8) if length($latest) > 8;
+       $have = substr($have,0,8) if length($have) > 8;
+       printf $sprintf, $module->id, $have, $latest, $file;
+       $need{$module->id}++;
+       return if $CPAN::Signal; # this is sometimes lengthy
+    }
+    unless (%need) {
+       if ($what eq "u") {
+           print "No modules found for @args\n";
+       } elsif ($what eq "r") {
+           print "All modules are up to date for @args\n";
+       }
+    }
+    if ($what eq "r" && $version_zeroes) {
+       my $s = $version_zeroes>1 ? "s have" : " has";
+       print qq{$version_zeroes installed module$s no version number to compare\n};
+    }
+    @result;
+}
+
+sub r {
+    shift->_u_r_common("r",@_);
+}
+
+sub u {
+    shift->_u_r_common("u",@_);
+}
+
+sub autobundle {
+    my($self) = shift;
+    my(@bundle) = $self->_u_r_common("a",@_);
+    my($todir) = $CPAN::META->catdir($CPAN::Config->{'cpan_home'},"Bundle");
+    File::Path::mkpath($todir);
+    unless (-d $todir) {
+       print "Couldn't mkdir $todir for some reason\n";
+       return;
+    }
+    my($y,$m,$d) =  (localtime)[5,4,3];
+    $y+=1900;
+    $m++;
+    my($c) = 0;
+    my($me) = sprintf "Snapshot_%04d_%02d_%02d_%02d", $y, $m, $d, $c;
+    my($to) = $CPAN::META->catfile($todir,"$me.pm");
+    while (-f $to) {
+       $me = sprintf "Snapshot_%04d_%02d_%02d_%02d", $y, $m, $d, ++$c;
+       $to = $CPAN::META->catfile($todir,"$me.pm");
+    }
+    my($fh) = IO::File->new(">$to") or Carp::croak "Can't open >$to: $!";
+    $fh->print(
+              "package Bundle::$me;\n\n",
+              "\$VERSION = '0.01';\n\n",
+              "1;\n\n",
+              "__END__\n\n",
+              "=head1 NAME\n\n",
+              "Bundle::$me - Snapshot of installation on ",
+              $Config::Config{'myhostname'},
+              " on ",
+              scalar(localtime),
+              "\n\n=head1 SYNOPSIS\n\n",
+              "perl -MCPAN -e 'install Bundle::$me'\n\n",
+              "=head1 CONTENTS\n\n",
+              join("\n", @bundle),
+              "\n\n=head1 CONFIGURATION\n\n",
+              Config->myconfig,
+              "\n\n=head1 AUTHOR\n\n",
+              "This Bundle has been generated automatically by the autobundle routine in CPAN.pm.\n",
+             );
+    $fh->close;
+    print "\nWrote bundle file
+    $to\n\n";
+}
+
+sub bundle {
+    shift;
+    my(@bundles) = @_;
+    my $bundle;
+    my @pack = ();
+    foreach $bundle (@bundles) {
+       my $pack = $bundle;
+       $pack =~ s/^(Bundle::)?(.*)/Bundle::$2/;
+       push @pack, $CPAN::META->instance('CPAN::Bundle',$pack)->contains;
+    }
+    @pack;
+}
+
+sub bundles {
+    my($self) = @_;
+    CPAN->debug("self[$self]") if $CPAN::DEBUG;
+    sort grep $_->id() =~ /^Bundle::/, $CPAN::META->all('CPAN::Bundle');
+}
+
+sub expand {
+    shift;
+    my($type,@args) = @_;
+    my($arg,@m);
+    for $arg (@args) {
+       my $regex;
+       if ($arg =~ m|^/(.*)/$|) {
+           $regex = $1;
+       }
+       my $class = "CPAN::$type";
+       my $obj;
+       if (defined $regex) {
+           for $obj ( sort {$a->id cmp $b->id} $CPAN::META->all($class)) {
+               push @m, $obj if $obj->id =~ /$regex/i or $obj->can('name') && $obj->name  =~ /$regex/i;
+           }
+       } else {
+           my($xarg) = $arg;
+           if ( $type eq 'Bundle' ) {
+               $xarg =~ s/^(Bundle::)?(.*)/Bundle::$2/;
+           }
+           if ($CPAN::META->exists($class,$xarg)) {
+               $obj = $CPAN::META->instance($class,$xarg);
+           } elsif ($obj = $CPAN::META->exists($class,$arg)) {
+               $obj = $CPAN::META->instance($class,$arg);
+           } else {
+               next;
+           }
+           push @m, $obj;
+       }
+    }
+    return @m;
+}
+
+sub format_result {
+    my($self) = shift;
+    my($type,@args) = @_;
+    @args = '/./' unless @args;
+    my(@result) = $self->expand($type,@args);
+    my $result =  @result==1 ? $result[0]->as_string : join "", map {$_->as_glimpse} @result;
+    $result ||= "No objects of type $type found for argument @args\n";
+    $result;
+}
+
+sub rematein {
+    shift;
+    my($meth,@some) = @_;
+    my $pragma = "";
+    if ($meth eq 'force') {
+       $pragma = $meth;
+       $meth = shift @some;
+    }
+    CPAN->debug("pragma[$pragma]meth[$meth] some[@some]") if $CPAN::DEBUG;
+    my($s,@s);
+    foreach $s (@some) {
+       my $obj;
+       if (ref $s) {
+           $obj = $s;
+       } elsif ($s =~ m|/|) { # looks like a file
+           $obj = $CPAN::META->instance('CPAN::Distribution',$s);
+       } elsif ($s =~ m|^Bundle::|) {
+           $obj = $CPAN::META->instance('CPAN::Bundle',$s);
+       } else {
+           $obj = $CPAN::META->instance('CPAN::Module',$s) if $CPAN::META->exists('CPAN::Module',$s);
+       }
+       if (ref $obj) {
+           CPAN->debug(qq{pragma[$pragma] meth[$meth] obj[$obj] as_string\[}.$obj->as_string.qq{\]}) if $CPAN::DEBUG;
+           $obj->$pragma() if $pragma && $obj->can($pragma);
+           $obj->$meth();
+       } else {
+           print "Warning: Cannot $meth $s, don't know what it is\n";
+       }
+    }
+}
+
+sub force   { shift->rematein('force',@_); }
+sub readme  { shift->rematein('readme',@_); }
+sub make    { shift->rematein('make',@_); }
+sub clean   { shift->rematein('clean',@_); }
+sub test    { shift->rematein('test',@_); }
+sub install { shift->rematein('install',@_); }
+
+package CPAN::FTP;
+use vars qw($Ua @ISA);
+@ISA = qw(CPAN::Debug);
+
+sub ftp_get {
+    my($class,$host,$dir,$file,$target) = @_;
+    $class->debug(
+                      qq[Going to fetch file [$file] from dir [$dir]
+       on host [$host] as local [$target]\n]
+                     ) if $CPAN::DEBUG;
+    my $ftp = Net::FTP->new($host);
+    $ftp->debug(1) if $CPAN::DEBUG{'FTP'} & $CPAN::DEBUG;
+    $class->debug(qq[Going to ->login("anonymous","$Config::Config{'cf_email'}")\n]);
+    unless ( $ftp->login("anonymous",$Config::Config{'cf_email'}) ){
+       warn "Couldn't login on $host";
+       return;
+    }
+    # print qq[Going to ->cwd("$dir")\n];
+    unless ( $ftp->cwd($dir) ){
+       warn "Couldn't cwd $dir";
+       return;
+    }
+    $ftp->binary;
+    print qq[Going to ->get("$file","$target")\n] if $CPAN::DEBUG;
+    unless ( $ftp->get($file,$target) ){
+       warn "Couldn't fetch $file from $host";
+       return;
+    }
+    $ftp->quit;
+}
+
+sub localize {
+    my($self,$file,$aslocal,$force) = @_;
+    $force ||= 0;
+    Carp::croak "Usage: ->localize(cpan_file,as_local_file[,$force])" unless defined $aslocal;
+    $self->debug("file [$file] aslocal [$aslocal]") if $CPAN::DEBUG;
+
+    return $aslocal if -f $aslocal && -r _ && ! $force;
+
+    my($aslocal_dir) = File::Basename::dirname($aslocal);
+    File::Path::mkpath($aslocal_dir);
+    print STDERR qq{Warning: You are not allowed to write into directory "$aslocal_dir".
+    I\'ll continue, but if you face any problems, they may be due
+    to insufficient permissions.\n} unless -w $aslocal_dir;
+
+    # Inheritance is not easier to manage than a few if/else branches
+    if ($CPAN::META->hasLWP) {
+       require LWP::UserAgent;
+       unless ($Ua) {
+           $Ua = new LWP::UserAgent;
+           $Ua->proxy('ftp',  $ENV{'ftp_proxy'})  if defined $ENV{'ftp_proxy'};
+           $Ua->proxy('http', $ENV{'http_proxy'}) if defined $ENV{'http_proxy'};
+           $Ua->no_proxy($ENV{'no_proxy'})        if defined $ENV{'no_proxy'};
+       }
+    }
+
+    # Try the list of urls for each single object. We keep a record
+    # where we did get a file from
+    for (0..$#{$CPAN::Config->{urllist}}) {
+       my $url = $CPAN::Config->{urllist}[$_];
+       $url .= "/" unless substr($url,-1) eq "/";
+       $url .= $file;
+       $self->debug("localizing[$url]") if $CPAN::DEBUG;
+       if ($url =~ /^file:/) {
+           my $l;
+           if ($CPAN::META->hasLWP) {
+               require URI::URL;
+               my $u = new URI::URL $url;
+               $l = $u->path;
+           } else { # works only on Unix
+               ($l = $url) =~ s/^file://;
+           }
+           return $l if -f $l && -r _;
+       }
+
+       if ($CPAN::META->hasLWP) {
+           print "Fetching $url\n";
+           my $res = $Ua->mirror($url, $aslocal);
+           if ($res->is_success) {
+               return $aslocal;
+           }
+       } elsif ($url =~ m|^ftp://(.*?)/(.*)/(.*)|) {
+           unless ($CPAN::META->hasFTP) {
+               warn "Can't access URL $url without module Net::FTP";
+               next;
+           }
+           my($host,$dir,$getfile) = ($1,$2,$3);
+           $dir =~ s|/+|/|g;
+           print "Going to fetch file [$getfile] from dir [$dir] on host [$host] as local [$aslocal]\n";
+
+           #### This was the bug where I contacted Graham and got so strange error messages
+           #### ftp_get($host,$dir,$getfile,$aslocal) && return $aslocal;
+           CPAN::FTP->ftp_get($host,$dir,$getfile,$aslocal) && return $aslocal;
+       }
+    }
+    Carp::croak("Cannot fetch $file from anywhere");
+}
+
+package CPAN::Complete;
+use vars qw(@ISA);
+@ISA = qw(CPAN::Debug);
+
+sub complete {
+    my($word,$line,$pos) = @_;
+    $word ||= "";
+    $line ||= "";
+    $pos ||= 0;
+    CPAN->debug("word [$word] line[$line] pos[$pos]") if $CPAN::DEBUG;
+    $line =~ s/^\s*//;
+    my @return;
+    if ($pos == 0) {
+       @return = grep(/^$word/, sort qw(! a b d h i m o q r u autobundle clean make test install reload));
+    } elsif ( $line !~ /^[\!abdhimorut]/ ) {
+       @return = ();
+    } elsif ($line =~ /^a\s/) {
+       @return = completex('CPAN::Author',$word);
+    } elsif ($line =~ /^b\s/) {
+       @return = completex('CPAN::Bundle',$word);
+    } elsif ($line =~ /^d\s/) {
+       @return = completex('CPAN::Distribution',$word);
+    } elsif ($line =~ /^([mru]\s|(make|clean|test|install)\s)/ ) {
+       @return = (completex('CPAN::Module',$word),completex('CPAN::Bundle',$word));
+    } elsif ($line =~ /^i\s/) {
+       @return = complete_any($word);
+    } elsif ($line =~ /^reload\s/) {
+       @return = complete_reload($word,$line,$pos);
+    } elsif ($line =~ /^o\s/) {
+       @return = complete_option($word,$line,$pos);
+    } else {
+       @return = ();
+    }
+    return @return;
+}
+
+sub completex {
+    my($class, $word) = @_;
+    grep /^\Q$word\E/, map { $_->id } $CPAN::META->all($class);
+}
+
+sub complete_any {
+    my($word) = shift;
+    return (
+           completex('CPAN::Author',$word),
+           completex('CPAN::Bundle',$word),
+           completex('CPAN::Distribution',$word),
+           completex('CPAN::Module',$word),
+          );
+}
+
+sub complete_reload {
+    my($word,$line,$pos) = @_;
+    $word ||= "";
+    my(@words) = split " ", $line;
+    CPAN->debug("word[$word] line[$line] pos[$pos]") if $CPAN::DEBUG;
+    my(@ok) = qw(cpan index);
+    return @ok if @words==1;
+    return grep /^\Q$word\E/, @ok if @words==2 && $word;
+}
+
+sub complete_option {
+    my($word,$line,$pos) = @_;
+    $word ||= "";
+    my(@words) = split " ", $line;
+    CPAN->debug("word[$word] line[$line] pos[$pos]") if $CPAN::DEBUG;
+    my(@ok) = qw(conf debug);
+    return @ok if @words==1;
+    return grep /^\Q$word\E/, @ok if @words==2 && $word;
+    if (0) {
+    } elsif ($words[1] eq 'index') {
+       return ();
+    } elsif ($words[1] eq 'conf') {
+       return CPAN::Config::complete(@_);
+    } elsif ($words[1] eq 'debug') {
+       return sort grep /^\Q$word\E/, sort keys %CPAN::DEBUG, 'all';
+    }
+}
+
+package CPAN::Index;
+use vars qw($last_time @ISA);
+@ISA = qw(CPAN::Debug);
+$last_time ||= 0;
+
+sub force_reload {
+    my($class) = @_;
+    $CPAN::Index::last_time = 0;
+    $class->reload(1);
+}
+
+sub reload {
+    my($cl,$force) = @_;
+    my $time = time;
+
+    # XXX check if a newer one is available. (We currently read it from time to time)
+    return if $last_time + $CPAN::Config->{index_expire}*86400 > $time;
+    $last_time = $time;
+
+    $cl->read_authindex($cl->reload_x("authors/01mailrc.txt.gz","01mailrc.gz",$force));
+    return if $CPAN::Signal; # this is sometimes lengthy
+    $cl->read_modpacks($cl->reload_x("modules/02packages.details.txt.gz","02packag.gz",$force));
+    return if $CPAN::Signal; # this is sometimes lengthy
+    $cl->read_modlist($cl->reload_x("modules/03modlist.data.gz","03mlist.gz",$force));
+}
+
+sub reload_x {
+    my($cl,$wanted,$localname,$force) = @_;
+    $force ||= 0;
+    my $abs_wanted = CPAN->catfile($CPAN::Config->{'keep_source_where'},$localname);
+    if (-f $abs_wanted && -M $abs_wanted < $CPAN::Config->{'index_expire'} && !$force) {
+       my($s) = $CPAN::Config->{'index_expire'} != 1;
+       $cl->debug(qq{$abs_wanted younger than $CPAN::Config->{'index_expire'} day$s. I\'ll use that.\n});
+       return $abs_wanted;
+    } else {
+       $force ||= 1;
+    }
+    return CPAN::FTP->localize($wanted,$abs_wanted,$force);
+}
+
+sub read_authindex {
+    my($cl,$index_target) = @_;
+    my $pipe = "$CPAN::Config->{gzip} --decompress --stdout $index_target";
+    warn "Going to read $index_target\n";
+    my $fh = IO::File->new("$pipe|");
+    while (<$fh>) {
+       chomp;
+       my($userid,$fullname,$email) = /alias\s+(\S+)\s+\"([^\"\<]+)\s+<([^\>]+)\>\"/;
+       next unless $userid && $fullname && $email;
+
+       # instantiate an author object
+       my $userobj = $CPAN::META->instance('CPAN::Author',$userid);
+       $userobj->set('FULLNAME' => $fullname, 'EMAIL' => $email);
+       return if $CPAN::Signal;
+    }
+    $fh->close;
+    $? and Carp::croak "FAILED $pipe: exit status [$?]";
+}
+
+sub read_modpacks {
+    my($cl,$index_target) = @_;
+    my $pipe = "$CPAN::Config->{gzip} --decompress --stdout $index_target";
+    warn "Going to read $index_target\n";
+    my $fh = IO::File->new("$pipe|");
+    while (<$fh>) {
+       next if 1../^\s*$/;
+       chomp;
+       my($mod,$version,$dist) = split;
+       $version =~ s/^\+//;
+
+       # if it as a bundle, instatiate a bundle object
+       my($bundle) = $mod =~ /^Bundle::(.*)/;
+       $version = "n/a" if $mod =~ s/(.+::.+::).+/$1*/; # replace the third level with a star
+
+       if ($mod eq 'CPAN') {
+           local($^W)=0;
+           if ($version > $CPAN::VERSION){
+               print qq{
+  Hey, you know what? There\'s a new CPAN.pm version (v$version)
+  available! I\'d suggest--provided you have time--you try
+    install CPAN
+    reload cpan
+  without quitting the current session. It should be a seemless upgrade
+  while we are running...
+};
+               sleep 2;
+               print qq{\n};
+           }
+       }
+
+       my($id);
+       if ($bundle){
+           $id =  $CPAN::META->instance('CPAN::Bundle',$mod);
+           $id->set('CPAN_VERSION' => $version, 'CPAN_FILE' => $dist);
+# This "next" makes us faster but if the job is running long, we ignore
+# rereads which is bad. So we have to be a bit slower again.
+#      } elsif ($CPAN::META->exists('CPAN::Module',$mod)) {
+#          next;
+       } else {
+           # instantiate a module object
+           $id = $CPAN::META->instance('CPAN::Module',$mod);
+           $id->set('CPAN_VERSION' => $version, 'CPAN_FILE' => $dist);
+       }
+
+       # determine the author
+       my($userid) = $dist =~ /([^\/]+)/;
+       $id->set('CPAN_USERID' => $userid) if $userid =~ /\w/;
+
+       # instantiate a distribution object
+       unless ($CPAN::META->exists('CPAN::Distribution',$dist)) {
+           $CPAN::META->instance(
+                                 'CPAN::Distribution' => $dist
+                                )->set(
+                                       'CPAN_USERID' => $userid
+                                      )
+                                    if $userid =~ /\w/;
+       }
+
+       return if $CPAN::Signal;
+    }
+    $fh->close;
+    $? and Carp::croak "FAILED $pipe: exit status [$?]";
+}
+
+sub read_modlist {
+    my($cl,$index_target) = @_;
+    my $pipe = "$CPAN::Config->{gzip} --decompress --stdout $index_target";
+    warn "Going to read $index_target\n";
+    my $fh = IO::File->new("$pipe|");
+    my $eval = "";
+    while (<$fh>) {
+       next if 1../^\s*$/;
+       next if /use vars/; # will go away in 03...
+       $eval .= $_;
+       return if $CPAN::Signal;
+    }
+    $eval .= q{CPAN::Modulelist->data;};
+    local($^W) = 0;
+    my($comp) = Safe->new("CPAN::Safe1");
+    my $ret = $comp->reval($eval);
+    Carp::confess($@) if $@;
+    return if $CPAN::Signal;
+    for (keys %$ret) {
+       my $obj = $CPAN::META->instance(CPAN::Module,$_);
+       $obj->set(%{$ret->{$_}});
+       return if $CPAN::Signal;
+    }
+}
+
+package CPAN::InfoObj;
+use vars qw(@ISA);
+@ISA = qw(CPAN::Debug);
+
+sub new { my $this = bless {}, shift; %$this = @_; $this }
+
+sub set {
+    my($self,%att) = @_;
+    my(%oldatt) = %$self;
+    %$self = (%oldatt, %att);
+}
+
+sub id { shift->{'ID'} }
+
+sub as_glimpse {
+    my($self) = @_;
+    my(@m);
+    my $class = ref($self);
+    $class =~ s/^CPAN:://;
+    push @m, sprintf "%-15s %s\n", $class, $self->{ID};
+    join "", @m;
+}
+
+sub as_string {
+    my($self) = @_;
+    my(@m);
+    my $class = ref($self);
+    $class =~ s/^CPAN:://;
+    push @m, $class, " id = $self->{ID}\n";
+    for (sort keys %$self) {
+       next if $_ eq 'ID';
+       my $extra = "";
+       $_ eq "CPAN_USERID" and $extra = " (".$self->author.")";
+       if (ref $self->{$_}) { # Should we setup a language interface? XXX
+           push @m, sprintf "    %-12s %s%s\n", $_, "@{$self->{$_}}", $extra;
+       } else {
+           push @m, sprintf "    %-12s %s%s\n", $_, $self->{$_}, $extra;
+       }
+    }
+    join "", @m, "\n";
+}
+
+sub author {
+    my($self) = @_;
+    $CPAN::META->instance(CPAN::Author,$self->{CPAN_USERID})->fullname;
+}
+
+package CPAN::Author;
+use vars qw(@ISA);
+@ISA = qw(CPAN::Debug CPAN::InfoObj);
+
+sub as_glimpse {
+    my($self) = @_;
+    my(@m);
+    my $class = ref($self);
+    $class =~ s/^CPAN:://;
+    push @m, sprintf "%-15s %s (%s)\n", $class, $self->{ID}, $self->fullname;
+    join "", @m;
+}
+
+sub fullname { shift->{'FULLNAME'} }
+*name = \&fullname;
+sub email    { shift->{'EMAIL'} }
+
+package CPAN::Distribution;
+use vars qw(@ISA);
+@ISA = qw(CPAN::Debug CPAN::InfoObj);
+
+sub called_for {
+    my($self,$id) = @_;
+    $self->{'CALLED_FOR'} = $id if defined $id;
+    return $self->{'CALLED_FOR'};
+}
+
+sub get {
+    my($self) = @_;
+  EXCUSE: {
+       my @e;
+       exists $self->{'build_dir'} and push @e, "Unwrapped into directory $self->{'build_dir'}";
+       print join "", map {"  $_\n"} @e and return if @e;
+    }
+    my($local_file);
+    my($local_wanted) =
+        CPAN->catfile(
+                       $CPAN::Config->{keep_source_where},
+                       "authors",
+                       "id",
+                       split("/",$self->{ID})
+                      );
+
+    $self->debug("Doing localize") if $CPAN::DEBUG;
+    $local_file = CPAN::FTP->localize("authors/id/$self->{ID}", $local_wanted);
+    $self->{localfile} = $local_file;
+    my $builddir = $CPAN::META->{cachemgr}->dir;
+    $self->debug("doing chdir $builddir") if $CPAN::DEBUG;
+    chdir $builddir or Carp::croak("Couldn't chdir $builddir: $!");
+    my $packagedir;
+
+    $self->debug("local_file[$local_file]") if $CPAN::DEBUG;
+    if ($local_file =~ /(\.tar\.(gz|Z)|\.tgz|\.zip)$/i){
+       $self->debug("Removing tmp") if $CPAN::DEBUG;
+       File::Path::rmtree("tmp");
+       mkdir "tmp", 0777 or Carp::croak "Couldn't mkdir tmp: $!";
+       chdir "tmp";
+       $self->debug("Changed directory to tmp") if $CPAN::DEBUG;
+       if ($local_file =~ /z$/i){
+           $self->{archived} = "tar";
+           if (system("$CPAN::Config->{gzip} --decompress --stdout $local_file | $CPAN::Config->{tar} xvf -")==0) {
+               $self->{unwrapped} = "YES";
+           } else {
+               $self->{unwrapped} = "NO";
+           }
+       } elsif ($local_file =~ /zip$/i) {
+           $self->{archived} = "zip";
+           if (system("$CPAN::Config->{unzip} $local_file")==0) {
+               $self->{unwrapped} = "YES";
+           } else {
+               $self->{unwrapped} = "NO";
+           }
+       }
+       # Let's check if the package has its own directory.
+       opendir DIR, "." or Carp::croak("Weird: couldn't opendir .: $!");
+       my @readdir = grep $_ !~ /^\.\.?$/, readdir DIR; ### MAC??
+       closedir DIR;
+       my ($distdir,$packagedir);
+       if (@readdir == 1 && -d $readdir[0]) {
+           $distdir = $readdir[0];
+           $packagedir = $CPAN::META->catdir($builddir,$distdir);
+           -d $packagedir and print "Removing previously used $packagedir\n";
+           File::Path::rmtree($packagedir);
+           rename($distdir,$packagedir) or Carp::confess("Couldn't rename $distdir to $packagedir");
+       } else {
+           my $pragmatic_dir = $self->{'CPAN_USERID'} . '000';
+           $pragmatic_dir =~ s/\W_//g;
+           $pragmatic_dir++ while -d "../$pragmatic_dir";
+           $packagedir = $CPAN::META->catdir($builddir,$pragmatic_dir);
+           File::Path::mkpath($packagedir);
+           my($f);
+           for $f (@readdir) { # is already without "." and ".."
+               my $to = $CPAN::META->catdir($packagedir,$f);
+               rename($f,$to) or Carp::confess("Couldn't rename $f to $to");
+           }
+       }
+       $self->{'build_dir'} = $packagedir;
+
+       chdir "..";
+       $self->debug("Changed directory to .. (self is $self [".$self->as_string."])") if $CPAN::DEBUG;
+       File::Path::rmtree("tmp");
+       if ($CPAN::Config->{keep_source_where} =~ /^no/i ){
+           print "Going to unlink $local_file\n";
+           unlink $local_file or Carp::carp "Couldn't unlink $local_file";
+       }
+       my($makefilepl) = $CPAN::META->catfile($packagedir,"Makefile.PL");
+       unless (-f $makefilepl) {
+           my($configure) = $CPAN::META->catfile($packagedir,"Configure");
+           if (-f $configure) {
+               # do we have anything to do?
+               $self->{'configure'} = $configure;
+           } else {
+               my $fh = IO::File->new(">$makefilepl") or Carp::croak("Could not open >$makefilepl");
+               my $cf = $self->called_for || "unknown";
+               $fh->print(qq{
+# This Makefile.PL has been autogenerated by the module CPAN.pm
+# Autogenerated on: }.scalar localtime().qq{
+                   use ExtUtils::MakeMaker;
+                   WriteMakefile(NAME => q[$cf]);
+});
+               print qq{Package comes without Makefile.PL.\n}.
+                   qq{  Writing one on our own (calling it $cf)\n};
+           }
+       }
+    } else {
+       $self->{archived} = "NO";
+    }
+    return $self;
+}
+
+sub new {
+    my($class,%att) = @_;
+
+    $CPAN::META->{cachemgr} ||= CPAN::CacheMgr->new();
+
+    my $this = { %att };
+    return bless $this, $class;
+}
+
+sub readme {
+    my($self) = @_;
+    print "Readme not yet implemented (says ".$self->id.")\n";
+}
+
+sub verifyMD5 {
+    my($self) = @_;
+  EXCUSE: {
+       my @e;
+       $self->{MD5_STATUS} and push @e, "MD5 Checksum was ok";
+       print join "", map {"  $_\n"} @e and return if @e;
+    }
+    my($local_file);
+    my(@local) = split("/",$self->{ID});
+    my($basename) = pop @local;
+    push @local, "CHECKSUMS";
+    my($local_wanted) =
+       CPAN->catfile(
+                     $CPAN::Config->{keep_source_where},
+                     "authors",
+                     "id",
+                     @local
+                    );
+    local($") = "/";
+    if (
+       -f $local_wanted
+       &&
+       $self->MD5_check_file($local_wanted,$basename)
+       ) {
+       return $self->{MD5_STATUS}="OK";
+    }
+    $local_file = CPAN::FTP->localize("authors/id/@local", $local_wanted, 'force>:-{');
+    my($checksum_pipe);
+    if ($local_file) {
+       # fine
+    } else {
+       $local[-1] .= ".gz";
+       $local_file = CPAN::FTP->localize(
+                                         "authors/id/@local",
+                                         "$local_wanted.gz",
+                                         'force>:-{'
+                                        );
+       my $system = "$CPAN::Config->{gzip} --decompress $local_file";
+       system($system)==0 or die "Could not uncompress $local_file";
+       $local_file =~ s/\.gz$//;
+    }
+    $self->MD5_check_file($local_file,$basename);
+}
+
+sub MD5_check_file {
+    my($self,$lfile,$basename) = @_;
+    my($cksum);
+    my $fh = new IO::File;
+    local($/)=undef;
+    if (open $fh, $lfile){
+       my $eval = <$fh>;
+       close $fh;
+       my($comp) = Safe->new();
+       $cksum = $comp->reval($eval);
+       Carp::confess($@) if $@;
+       if ($cksum->{$basename}->{md5}) {
+           $self->debug("Found checksum for $basename: $cksum->{$basename}->{md5}\n") if $CPAN::DEBUG;
+           my $file = $self->{localfile};
+           my $pipe = "$CPAN::Config->{gzip} --decompress --stdout $self->{localfile}|";
+           if (
+               open($fh, $file) && $self->eq_MD5($fh,$cksum->{$basename}->{md5})
+               or
+               open($fh, $pipe) && $self->eq_MD5($fh,$cksum->{$basename}->{'md5-ungz'})
+              ){
+               print "Checksum for $file ok\n";
+               return $self->{MD5_STATUS}="OK";
+           } else {
+               die join(
+                        "",
+                        "\nChecksum mismatch for distribution file. Please investigate.\n\n",
+                        $self->as_string,
+                        $CPAN::META->instance('CPAN::Author',$self->{CPAN_USERID})->as_string,
+                        "Please contact the author or your CPAN site admin"
+                       );
+           }
+           close $fh if fileno($fh);
+       } else {
+           print "No md5 checksum for $basename in local $lfile\n";
+           return;
+       }
+    } else {
+       Carp::carp "Could not open $lfile for reading";
+    }
+}
+
+sub eq_MD5 {
+    my($self,$fh,$expectMD5) = @_;
+    my $md5 = new MD5;
+    $md5->addfile($fh);
+    my $hexdigest = $md5->hexdigest;
+    $hexdigest eq $expectMD5;
+}
+
+sub force {
+    my($self) = @_;
+    $self->{'force_update'}++;
+    delete $self->{'MD5_STATUS'};
+    delete $self->{'archived'};
+    delete $self->{'build_dir'};
+    delete $self->{'localfile'};
+    delete $self->{'make'};
+    delete $self->{'install'};
+    delete $self->{'unwrapped'};
+    delete $self->{'writemakefile'};
+}
+
+sub make {
+    my($self) = @_;
+    $self->debug($self->id) if $CPAN::DEBUG;
+    print "Running make\n";
+    $self->get;
+    if ($CPAN::META->hasMD5) {
+       $self->verifyMD5;
+    }
+    EXCUSE: {
+         my @e;
+         $self->{archived} eq "NO" and push @e, "Is neither a tar nor a zip archive.";
+         $self->{unwrapped} eq "NO"   and push @e, "had problems unarchiving. Please build manually";
+         exists $self->{writemakefile} && $self->{writemakefile} eq "NO" and push @e, "Had some problem writing Makefile";
+         defined $self->{'make'} and push @e, "Has already been processed within this session";
+         print join "", map {"  $_\n"} @e and return if @e;
+     }
+    print "\n  CPAN: Going to build ".$self->id."\n\n";
+    my $builddir = $self->dir;
+    chdir $builddir or Carp::croak("Couldn't chdir $builddir: $!");
+    $self->debug("Changed directory to $builddir") if $CPAN::DEBUG;
+
+    my $system;
+    if ($self->{'configure'}) {
+       $system = $self->{'configure'};
+    } else {
+       my($perl) = $^X =~ /^\.\// ? "$CPAN::Cwd/$^X" : $^X; # XXX subclassing folks, forgive me!
+       $system = "$perl Makefile.PL $CPAN::Config->{makepl_arg}";
+    }
+    if (system($system)!=0) {
+        $self->{writemakefile} = "NO";
+        return;
+    }
+    $self->{writemakefile} = "YES";
+    return if $CPAN::Signal;
+    $system = join " ", $CPAN::Config->{'make'}, $CPAN::Config->{make_arg};
+    if (system($system)==0) {
+        print "  $system -- OK\n";
+        $self->{'make'} = "YES";
+    } else {
+        $self->{writemakefile} = "YES";
+        $self->{'make'} = "NO";
+        print "  $system -- NOT OK\n";
+    }
+}
+
+sub test {
+    my($self) = @_;
+    $self->make;
+    return if $CPAN::Signal;
+    print "Running make test\n";
+    EXCUSE: {
+         my @e;
+         exists $self->{'make'} or push @e, "Make had some problems, maybe interrupted? Won't test";
+         exists $self->{'make'} and $self->{'make'} eq 'NO' and push @e, "Oops, make had returned bad status";
+         exists $self->{'build_dir'} or push @e, "Has no own directory";
+         print join "", map {"  $_\n"} @e and return if @e;
+     }
+    chdir $self->{'build_dir'} or Carp::croak("Couldn't chdir to $self->{'build_dir'}");
+    $self->debug("Changed directory to $self->{'build_dir'}") if $CPAN::DEBUG;
+    my $system = join " ", $CPAN::Config->{'make'}, "test";
+    if (system($system)==0) {
+        print "  $system -- OK\n";
+        $self->{'make_test'} = "YES";
+    } else {
+        $self->{'make_test'} = "NO";
+        print "  $system -- NOT OK\n";
+    }
+}
+
+sub clean {
+    my($self) = @_;
+    print "Running make clean\n";
+    EXCUSE: {
+         my @e;
+         exists $self->{'build_dir'} or push @e, "Has no own directory";
+         print join "", map {"  $_\n"} @e and return if @e;
+     }
+    chdir $self->{'build_dir'} or Carp::croak("Couldn't chdir to $self->{'build_dir'}");
+    $self->debug("Changed directory to $self->{'build_dir'}") if $CPAN::DEBUG;
+    my $system = join " ", $CPAN::Config->{'make'}, "clean";
+    if (system($system)==0) {
+       print "  $system -- OK\n";
+       $self->force;
+    } else {
+       # Hmmm, what to do if make clean failed?
+    }
+}
+
+sub install {
+    my($self) = @_;
+    $self->test;
+    return