From: Perl 5 Porters Date: Sat, 25 Jan 1997 03:58:00 +0000 (+1200) Subject: [inseparable changes from patch from perl5.003_22 to perl5.003_23] X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=774d564bb7dd1ed64ca0d7e534aa67e93f991f02;p=p5sagit%2Fp5-mst-13.2.git [inseparable changes from patch from perl5.003_22 to perl5.003_23] BUILD PROCESS Subject: Make configure.gnu a copy of configure; make configure writea From: Chip Salzenberg Files: MANIFEST configure.gnu Subject: Regen Configure with metaconfig: +ARCHNAME, -FILE_filbuf From: Chip Salzenberg Files: Configure config_H config_h.SH hints/lynxos.sh os2/diff.configure os2/os2ish.h plan9/config.plan9 sv.c utils/perlbug.PL vms/config.vms vms/fndvers.com Subject: Compile with optimization when testing memory functions From: Chip Salzenberg Files: Configure CORE LANGUAGE CHANGES Subject: Disallow changing $_[0] in __DIE__ handlers From: Chip Salzenberg Files: pod/perlfunc.pod util.c Subject: Fix overloading with inheritance and AUTOLOAD Date: Mon, 20 Jan 1997 17:26:32 -0500 (EST) From: Ilya Zakharevich Files: gv.c lib/diagnostics.pm lib/overload.pm pod/perldebug.pod pod/perldiag.pod pod/perlfunc.pod pod/perlop.pod pod/perlre.pod pod/perltoc.pod pod/perlxs.pod Msg-ID: <199701202226.RAA05072@monk.mps.ohio-state.edu> (applied based on p5p patch as commit e7ea3e70155d0bea30720ba41eb6bb6742aac0d1) Subject: Nested here-docs Date: Mon, 20 Jan 1997 15:13:42 -0800 From: Larry Wall Files: toke.c Msg-ID: <199701202313.PAA11693@wall.org> (applied based on p5p patch as commit fd2d0953290ddd46f0820dbd6c87245486b7ab28) Subject: Revert $^X to old behavior (plus HP-UX bug fix) From: Chip Salzenberg Files: hints/hpux.sh toke.c Subject: Protect against '0' in 'stmt while ' From: Chip Salzenberg Files: op.c Subject: Don't warn when closure uses var at file scope From: Chip Salzenberg Files: op.c CORE PORTABILITY Subject: VMS patches for _22 Date: Mon, 20 Jan 1997 22:50:21 -0500 (EST) From: Charles Bailey Files: ext/POSIX/POSIX.xs lib/ExtUtils/MM_VMS.pm lib/ExtUtils/xsubpp lib/Test/Harness.pm toke.c vms/Makefile vms/descrip.mms vms/genconfig.pl vms/perly_c.vms vms/vmsish.h x2p/a2p.h vms/Makefile vms/config.vms vms/descrip.mms vms/perly_c.vms private-msgid: <01IEGBJ2TMYS003PCL@hmivax.humgen.upenn.edu> Subject: Plan9 update From: Luther Huffman Files: plan9/config.plan9 plan9/mkfile Subject: hints & Configure changes to build perl on DC/OSx Date: Thu, 16 Jan 1997 16:43:52 -0800 From: Stephen Zander Files: Configure MANIFEST hints/dcosx.sh Msg-ID: <199701170043.QAA25985@wsbip1.mckesson.com> (applied based on p5p patch as commit 23f8769697279d7912be5943de9fdf93f6aa3013) DOCUMENTATION Subject: Additional docs for __DIE__ and __WARN__ From: Gurusamy Sarathy Files: pod/perlfunc.pod pod/perlrun.pod pod/perlvar.pod Subject: Document #line directive Date: Fri, 24 Jan 1997 04:08:44 -0500 From: Gurusamy Sarathy Files: pod/perlsyn.pod pod/perltoc.pod private-msgid: <199701240908.EAA23846@aatma.engin.umich.edu> Subject: delta for perldelta Date: Fri, 24 Jan 1997 07:57:43 -0800 From: Tom Christiansen Files: pod/perlnews.pod pod/perltoc.pod private-msgid: <804.854121463@jinete> Subject: Updates to perldelta Date: Mon, 20 Jan 1997 06:48:49 -0500 (EST) From: Ilya Zakharevich Files: pod/perlnews.pod pod/perltoc.pod private-msgid: <199701211610.LAA06227@monk.mps.ohio-state.edu> Subject: perlnews.pod diff for the Fcntl Date: Tue, 21 Jan 1997 18:00:56 +0200 (EET) From: Jarkko Hietaniemi Files: pod/perlnews.pod private-msgid: <199701211600.SAA30117@alpha.hut.fi> Subject: Rename perlnews -> perldelta per Tom's request From: Chip Salzenberg Files: MANIFEST pod/Makefile pod/buildtoc pod/perl.pod pod/perldelta.pod pod/perltoc.pod pod/roffitall LIBRARY AND EXTENSIONS Subject: Refresh IO to 1.15 (plus DESTROY and new_tmpfile fixes) From: Chip Salzenberg Files: ext/IO/lib/IO/File.pm ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Pipe.pm ext/IO/lib/IO/Seekable.pm ext/IO/lib/IO/Socket.pm t/lib/io_pipe.t Subject: Allow IO.xs to remain at 1.15 while $VERSION is 1.1501 From: Chip Salzenberg Files: XSUB.h ext/IO/Makefile.PL ext/IO/lib/IO/Handle.pm Subject: Add E* and SA_* constants Date: Wed, 22 Jan 1997 21:36:07 -0500 From: Roderick Schertler Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs private-msgid: <23338.853986967@eeyore.ibcinc.com> OTHER CORE CHANGES Subject: Make PERL5LIB and -I work like C Date: Thu, 23 Jan 1997 15:23:27 +0000 From: Tim Bunce Files: lib/lib.pm perl.c private-msgid: <9701231523.AA26613@toad.ig.co.uk> Subject: Fix /\G.a/ From: Chip Salzenberg Files: regcomp.c regcomp.h regexec.c regexp.h toke.c Subject: Extend stack in pp_undef (!) From: Chip Salzenberg Files: pp.c Subject: Allow for sub to be redefined while executing From: Chip Salzenberg Files: cop.h pp_hot.c t/op/misc.t Subject: Eliminate redundant flag CVf_FORMAT From: Chip Salzenberg Files: cv.h op.c perl.c perly.c perly.y proto.h sv.c toke.c Subject: Generate IVs when possible in abs() and int() From: Chip Salzenberg Files: pp.c Subject: Efficiency patchlet for pp_aassign() Date: Mon, 20 Jan 1997 22:05:39 -0500 (EST) From: Ilya Zakharevich Files: pp_hot.c Msg-ID: <199701210305.WAA05451@monk.mps.ohio-state.edu> (applied based on p5p patch as commit 7e42bd57a6867e174bc3bc555c3268b485940a98) Subject: Remove "suidperl security patch" message From: Chip Salzenberg Files: perl.c TESTS Subject: Fix tests of $^X and $0 to work with QNX From: Chip Salzenberg Files: t/lib/io_pipe.t t/lib/open2.t t/lib/open3.t t/op/magic.t Subject: Patch tests for systems without fork() Date: Thu, 23 Jan 1997 23:51:28 +0100 From: "Norbert Pueschel" Files: t/io/pipe.t t/lib/filehand.t t/lib/io_pipe.t t/lib/io_sock.t t/lib/open2.t t/lib/open3.t t/op/fork.t private-msgid: <77724697@Armageddon.meb.uni-bonn.de> Subject: Test patches for OS/2 Date: Thu, 16 Jan 1997 23:48:18 -0500 (EST) From: Ilya Zakharevich Files: os2/OS2/ExtAttr/t/os2_ea.t os2/OS2/PrfDB/t/os2_prfdb.t os2/OS2/REXX/t/rx_cmprt.t os2/OS2/REXX/t/rx_dllld.t os2/OS2/REXX/t/rx_objcall.t os2/OS2/REXX/t/rx_sql.test os2/OS2/REXX/t/rx_tiesql.test os2/OS2/REXX/t/rx_tievar.t os2/OS2/REXX/t/rx_tieydb.t os2/OS2/REXX/t/rx_varset.t os2/OS2/REXX/t/rx_vrexx.t t/README t/cmd/while.t t/comp/colon.t t/comp/multiline.t t/io/argv.t t/lib/anydbm.t t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t t/op/cmp.t t/op/magic.t Msg-ID: <199701170448.XAA28948@monk.mps.ohio-state.edu> (applied based on p5p patch as commit bbad36071d5a6d4be3588f0f10c88247439076d8) UTILITIES Subject: Translate \200 to È in pod2html From: Chip Salzenberg Files: pod/pod2html.PL Subject: VMS patches: '.com' extension on scripts Date: Fri, 24 Jan 1997 18:42:29 -0500 (EST) From: Charles Bailey Files: pod/checkpods.PL 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 utils/splain.PL vms/Makefile vms/descrip.mms x2p/find2perl.PL x2p/s2p.PL private-msgid: <01IELNPDLYJM003E7J@hmivax.humgen.upenn.edu> --- 774d564bb7dd1ed64ca0d7e534aa67e93f991f02 diff --cc Changes index f5729bc,f5729bc..685a559 --- a/Changes +++ b/Changes @@@ -9,6 -9,6 +9,311 @@@ releases. ---------------- ++Version 5.003_23 ++---------------- ++ ++This release is our first candidate for a public beta test. ++ ++ CORE LANGUAGE CHANGES ++ ++ Title: "Disallow changing $_[0] in __DIE__ handlers" ++ From: Chip Salzenberg ++ Files: pod/perlfunc.pod util.c ++ ++ Title: "Fix overloading with inheritance and AUTOLOAD" ++ From: Ilya Zakharevich ++ Msg-ID: <199701202226.RAA05072@monk.mps.ohio-state.edu> ++ Date: Mon, 20 Jan 1997 17:26:32 -0500 (EST) ++ Files: gv.c lib/diagnostics.pm lib/overload.pm pod/perldebug.pod ++ pod/perldiag.pod pod/perlfunc.pod pod/perlop.pod ++ pod/perlre.pod pod/perltoc.pod pod/perlxs.pod ++ ++ Title: "Nested here-docs" ++ From: larry@wall.org (Larry Wall) ++ Msg-ID: <199701202313.PAA11693@wall.org> ++ Date: Mon, 20 Jan 1997 15:13:42 -0800 ++ Files: toke.c ++ ++ Title: "Revert $^X to old behavior (plus HP-UX bug fix)" ++ From: Chip Salzenberg ++ Files: hints/hpux.sh toke.c ++ ++ Title: "Protect against '0' in 'stmt while '" ++ From: Chip Salzenberg ++ Files: op.c ++ ++ Title: "Don't warn when closure uses var at file scope" ++ From: Chip Salzenberg ++ Files: op.c ++ ++ CORE PORTABILITY ++ ++ Title: "VMS patches for _22" ++ From: Charles Bailey ++ Msg-ID: <01IEGBJ2TMYS003PCL@hmivax.humgen.upenn.edu> ++ Date: Mon, 20 Jan 1997 22:50:21 -0500 (EST) ++ Files: ext/POSIX/POSIX.xs lib/ExtUtils/MM_VMS.pm lib/ExtUtils/xsubpp ++ lib/Test/Harness.pm toke.c vms/Makefile vms/descrip.mms ++ vms/genconfig.pl vms/perly_c.vms vms/vmsish.h x2p/a2p.h ++ vms/Makefile vms/config.vms vms/descrip.mms vms/perly_c.vms ++ ++ Title: "Re: Perl 5.003_21: OS/2 patches" ++ From: Ilya Zakharevich ++ Msg-ID: <199701170446.XAA28939@monk.mps.ohio-state.edu> ++ Date: Thu, 16 Jan 1997 23:46:40 -0500 (EST) ++ Files: os2/Changes os2/os2.c ++ ++ Title: "Plan9 update" ++ From: lutherh@stratcom.com (Luther Huffman) ++ Files: plan9/config.plan9 plan9/mkfile ++ ++ Title: "Bugfixes for AmigaOS" ++ From: "Norbert Pueschel" ++ Msg-ID: <77724691@Armageddon.meb.uni-bonn.de> ++ Date: Wed, 22 Jan 1997 00:13:54 +0100 ++ Files: hints/amigaos.sh lib/File/Basename.pm ++ ++ Title: "New dec_osf.sh hints file" ++ From: Achim Bohnet ++ Msg-ID: <9701241058.AA29550@o09.rosat.mpe-garching.mpg.de> ++ Date: Fri, 24 Jan 1997 11:58:24 +0100 ++ Files: hints/dec_osf.sh ++ ++ Title: "on NeXT: gdbm problem fixed" ++ From: Andreas Koenig ++ Msg-ID: <199701210201.DAA17794@anna.in-berlin.de> ++ Date: Tue, 21 Jan 1997 03:01:32 +0100 ++ Files: hints/next_3.sh hints/next_3_0.sh ++ ++ Title: "patch for hints/powerux.sh" ++ From: tom@amber.ssd.hcsc.com (Tom Horsley) ++ Msg-ID: <9701181833.AA02602@amber.ssd.hcsc.com> ++ Date: Sat, 18 Jan 97 13:33:26 -0500 ++ Files: hints/powerux.sh ++ ++ Title: "hints & Configure changes to build perl on DC/OSx" ++ From: Stephen Zander ++ Msg-ID: <199701170043.QAA25985@wsbip1.mckesson.com> ++ Date: Thu, 16 Jan 1997 16:43:52 -0800 ++ Files: Configure MANIFEST hints/dcosx.sh ++ ++ Title: "patch for hints/cxux.sh perl5.003_22" ++ From: tom@amber.ssd.hcsc.com (Tom Horsley) ++ Msg-ID: <9701192014.AA05722@amber.ssd.hcsc.com> ++ Date: Sun, 19 Jan 97 15:14:04 -0500 ++ Files: hints/cxux.sh ++ ++ OTHER CORE CHANGES ++ ++ Title: "Make PERL5LIB and -I work like C" ++ From: Tim Bunce ++ Msg-ID: <9701231523.AA26613@toad.ig.co.uk> ++ Date: Thu, 23 Jan 1997 15:23:27 +0000 ++ Files: lib/lib.pm perl.c ++ ++ Title: "Fix /\G.a/" ++ From: Chip Salzenberg ++ Files: regcomp.c regcomp.h regexec.c regexp.h toke.c ++ ++ Title: "Extend stack in pp_undef (!)" ++ From: Chip Salzenberg ++ Files: pp.c ++ ++ Title: "Allow for sub to be redefined while executing" ++ From: Chip Salzenberg ++ Files: cop.h pp_hot.c t/op/misc.t ++ ++ Title: "Eliminate redundant flag CVf_FORMAT" ++ From: Chip Salzenberg ++ Files: cv.h op.c perl.c perly.c perly.y proto.h sv.c toke.c ++ ++ Title: "Generate IVs when possible in abs() and int()" ++ From: Chip Salzenberg ++ Files: pp.c ++ ++ Title: "Efficiency patchlet for pp_aassign()" ++ From: Ilya Zakharevich ++ Msg-ID: <199701210305.WAA05451@monk.mps.ohio-state.edu> ++ Date: Mon, 20 Jan 1997 22:05:39 -0500 (EST) ++ Files: pp_hot.c ++ ++ Title: "When sorting, promote to PVNV only for built-in comparison" ++ From: Chip Salzenberg ++ Files: pp_ctl.c ++ ++ Title: "Remove "suidperl security patch" message" ++ From: Chip Salzenberg ++ Files: perl.c ++ ++ BUILD PROCESS ++ ++ Title: "Make configure.gnu a copy of configure; make configure writea ++ From: Chip Salzenberg ++ Files: MANIFEST configure.gnu ++ ++ Title: "Regen Configure with metaconfig: +ARCHNAME, -FILE_filbuf" ++ From: Chip Salzenberg and Charles Bailey ++ Files: Configure config_H config_h.SH hints/lynxos.sh ++ os2/diff.configure os2/os2ish.h plan9/config.plan9 sv.c ++ utils/perlbug.PL vms/config.vms vms/fndvers.com ++ ++ Title: "Compile with optimization when testing memory functions" ++ From: Chip Salzenberg ++ Files: Configure ++ ++ Title: "Minor patch for Debian installation" ++ From: Chip Salzenberg ++ Files: installperl ++ ++ LIBRARY AND EXTENSIONS ++ ++ Title: "Debugger update" ++ From: Ilya Zakharevich ++ Msg-ID: <199701190455.XAA02579@monk.mps.ohio-state.edu> ++ Date: Sat, 18 Jan 1997 23:54:59 -0500 (EST) ++ Files: lib/perl5db.pl ++ ++ Title: "DynaLoader enhancement: support RTLD_GLOBAL" ++ From: Nick Ing-Simmons ++ Msg-ID: <199701240937.JAA11443@pluto.tiuk.ti.com> ++ Date: Fri, 24 Jan 1997 09:37:18 GMT ++ Files: ext/DynaLoader/DynaLoader.pm ext/DynaLoader/dl_aix.xs ++ ext/DynaLoader/dl_dld.xs ext/DynaLoader/dl_dlopen.xs ++ ext/DynaLoader/dl_hpux.xs ext/DynaLoader/dl_next.xs ++ ext/DynaLoader/dl_vms.xs ++ ++ Title: "Fcntl: add more constants" ++ From: Jarkko.Hietaniemi@cc.hut.fi ++ Msg-ID: <199701191811.UAA16346@alpha.hut.fi> ++ Date: Sun, 19 Jan 1997 20:11:22 +0200 (EET) ++ Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs ++ ++ Title: "Refresh IO to 1.15 (plus DESTROY and new_tmpfile fixes)" ++ From: Chip Salzenberg ++ Files: ext/IO/lib/IO/File.pm ext/IO/lib/IO/Handle.pm ++ ext/IO/lib/IO/Pipe.pm ext/IO/lib/IO/Seekable.pm ++ ext/IO/lib/IO/Socket.pm t/lib/io_pipe.t ++ ++ Title: "Allow IO.xs to remain at 1.15 while $VERSION is 1.1501" ++ From: Chip Salzenberg ++ Files: XSUB.h ext/IO/Makefile.PL ext/IO/lib/IO/Handle.pm ++ ++ Title: "Refresh CPAN to 1.15" ++ From: Andreas Koenig ++ Files: lib/CPAN.pm lib/CPAN/FirstTime.pm ++ ++ Title: "Add E* and SA_* constants" ++ From: Roderick Schertler ++ Msg-ID: <23338.853986967@eeyore.ibcinc.com> ++ Date: Wed, 22 Jan 1997 21:36:07 -0500 ++ Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod ext/POSIX/POSIX.xs ++ ++ TESTS ++ ++ Title: "Test nested here-docs" ++ From: hv@crypt.compulink.co.uk (Hugo van der Sanden) ++ Msg-ID: <199701210053.AAA02139@crypt.compulink.co.uk> ++ Date: Tue, 21 Jan 1997 00:53:44 +0000 (GMT) ++ Files: t/base/lex.t ++ ++ Title: "Fix tests of $^X and $0 to work with QNX" ++ From: Chip Salzenberg ++ Files: t/lib/io_pipe.t t/lib/open2.t t/lib/open3.t t/op/magic.t ++ ++ Title: "Patch tests for systems without fork()" ++ From: "Norbert Pueschel" ++ Msg-ID: <77724697@Armageddon.meb.uni-bonn.de> ++ Date: Thu, 23 Jan 1997 23:51:28 +0100 ++ Files: t/io/pipe.t t/lib/filehand.t t/lib/io_pipe.t t/lib/io_sock.t ++ t/lib/open2.t t/lib/open3.t t/op/fork.t ++ ++ Title: "Test patches for OS/2" ++ From: Ilya Zakharevich ++ Msg-ID: <199701170448.XAA28948@monk.mps.ohio-state.edu> ++ Date: Thu, 16 Jan 1997 23:48:18 -0500 (EST) ++ Files: os2/OS2/ExtAttr/t/os2_ea.t os2/OS2/PrfDB/t/os2_prfdb.t ++ os2/OS2/REXX/t/rx_cmprt.t os2/OS2/REXX/t/rx_dllld.t ++ os2/OS2/REXX/t/rx_objcall.t os2/OS2/REXX/t/rx_sql.test ++ os2/OS2/REXX/t/rx_tiesql.test os2/OS2/REXX/t/rx_tievar.t ++ os2/OS2/REXX/t/rx_tieydb.t os2/OS2/REXX/t/rx_varset.t ++ os2/OS2/REXX/t/rx_vrexx.t t/README t/cmd/while.t ++ t/comp/colon.t t/comp/multiline.t t/io/argv.t t/lib/anydbm.t ++ t/lib/gdbm.t t/lib/ndbm.t t/lib/odbm.t t/lib/sdbm.t ++ t/op/cmp.t t/op/magic.t ++ ++ UTILITIES ++ ++ Title: "Translate \200 to È in pod2html" ++ From: Chip Salzenberg ++ Files: pod/pod2html.PL ++ ++ Title: "VMS patches: '.com' extension on scripts" ++ From: Charles Bailey ++ Msg-ID: <01IELNPDLYJM003E7J@hmivax.humgen.upenn.edu> ++ Date: Fri, 24 Jan 1997 18:42:29 -0500 (EST) ++ Files: pod/checkpods.PL 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 utils/splain.PL vms/Makefile vms/descrip.mms ++ x2p/find2perl.PL x2p/s2p.PL ++ ++ Title: "Allow MakeMaker 5.34 to use libraries containing '+' in name" ++ From: dennism@cyrix.com (Dennis Marsa) ++ Msg-ID: <9701172027.AA27861@orion.cyrix.com> ++ Date: Fri, 17 Jan 97 14:27:32 CST ++ Files: lib/ExtUtils/Liblist.pm ++ ++ DOCUMENTATION ++ ++ Title: "First cut at INSTALL edit" ++ From: Chip Salzenberg ++ Files: INSTALL ++ ++ Title: "Additional docs for __DIE__ and __WARN__" ++ From: Gurusamy Sarathy ++ Files: pod/perlfunc.pod pod/perlrun.pod pod/perlvar.pod ++ ++ Title: "Document #line directive" ++ From: Gurusamy Sarathy ++ Msg-ID: <199701240908.EAA23846@aatma.engin.umich.edu> ++ Date: Fri, 24 Jan 1997 04:08:44 -0500 ++ Files: pod/perlsyn.pod pod/perltoc.pod ++ ++ Title: "Perlguts version 30" ++ From: Jeff Okamoto ++ Msg-ID: <199701172117.AA116515863@hpcc123.corp.hp.com> ++ Date: Fri, 17 Jan 1997 13:17:43 -0800 ++ Files: pod/perlguts.pod ++ ++ Title: "delta for perldelta" ++ From: Tom Christiansen ++ Msg-ID: <804.854121463@jinete> ++ Date: Fri, 24 Jan 1997 07:57:43 -0800 ++ Files: pod/perlnews.pod pod/perltoc.pod ++ ++ Title: "Updates to perldelta" ++ From: Ilya Zakharevich ++ Msg-ID: <199701211610.LAA06227@monk.mps.ohio-state.edu> ++ Date: Mon, 20 Jan 1997 06:48:49 -0500 (EST) ++ Files: pod/perlnews.pod pod/perltoc.pod ++ ++ Title: "perlnews.pod diff for the Fcntl" ++ From: Jarkko Hietaniemi ++ Msg-ID: <199701211600.SAA30117@alpha.hut.fi> ++ Date: Tue, 21 Jan 1997 18:00:56 +0200 (EET) ++ Files: pod/perlnews.pod ++ ++ Title: "Rename perlnews -> perldelta per Tom's request" ++ From: Chip Salzenberg ++ Files: MANIFEST pod/Makefile pod/buildtoc pod/perl.pod ++ pod/perldelta.pod pod/perltoc.pod pod/roffitall ++ ++ Title: "Remove bad advice from perllocale.pod" ++ From: Chip Salzenberg ++ Files: pod/perllocale.pod ++ ++ ++---------------- Version 5.003_22 ---------------- diff --cc Configure index f9af03c,1d5ae4a..ec4cfa2 --- a/Configure +++ b/Configure @@@ -20,7 -20,7 +20,7 @@@ # $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $ # --# Generated on Tue Dec 17 14:33:33 EST 1996 [metaconfig 3.0 PL60] ++# Generated on Thu Jan 23 14:39:28 EST 1997 [metaconfig 3.0 PL60] cat >/tmp/c1$$ </dev/null` -- ;; ++ ;; esac fi ;; @@@ -6418,9 -6421,9 +6423,7 @@@ main( } EOCP if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then -- cat <mtry --$startsh --EOS ++ echo "$startsh" >mtry echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry chmod +x mtry ./mtry >/dev/null 2>&1 @@@ -7048,7 -7051,7 +7051,8 @@@ for (align = 7; align >= 0; align--) exit(0); } EOCP -- if $cc $ccflags $ldflags foo.c -o safebcpy $libs >/dev/null 2>&1; then ++ if $cc $optimize $ccflags $ldflags foo.c \ ++ -o safebcpy $libs >/dev/null 2>&1; then if ./safebcpy 2>/dev/null; then echo "Yes, it can." val="$define" @@@ -7126,7 -7129,7 +7130,8 @@@ for (align = 7; align >= 0; align--) exit(0); } EOCP -- if $cc $ccflags $ldflags foo.c -o safemcpy $libs >/dev/null 2>&1; then ++ if $cc $optimize $ccflags $ldflags foo.c \ ++ -o safemcpy $libs >/dev/null 2>&1; then if ./safemcpy 2>/dev/null; then echo "Yes, it can." val="$define" @@@ -7186,7 -7189,7 +7191,8 @@@ if ((a < b) && memcmp(&a, &b, 1) < 0 exit(0); } EOCP -- if $cc $ccflags $ldflags foo.c -o sanemcmp $libs >/dev/null 2>&1; then ++ if $cc $optimize $ccflags $ldflags foo.c \ ++ -o sanemcmp $libs >/dev/null 2>&1; then if ./sanemcmp 2>/dev/null; then echo "Yes, it can." val="$define" @@@ -7635,47 -7638,47 +7641,6 @@@ esa set d_stdio_cnt_lval eval $setvar --: How to access the stdio _filbuf or __filbuf function. --: If this fails, check how the getc macro in stdio.h works. --case "${d_stdio_ptr_lval}${d_stdio_cnt_lval}" in --${define}${define}) -- : Try $hint value, if any, then _filbuf, __filbuf, _fill, then punt. -- : _fill is for os/2. -- xxx='notok' -- for filbuf in $stdio_filbuf '_filbuf(fp)' '__filbuf(fp) ' '_fill(fp)' ; do -- $cat >try.c < --#define FILE_ptr(fp) $stdio_ptr --#define FILE_cnt(fp) $stdio_cnt --#define FILE_filbuf(fp) $filbuf --main() { -- FILE *fp = fopen("try.c", "r"); -- int c; -- c = getc(fp); -- c = FILE_filbuf(fp); /* Just looking for linker errors.*/ -- exit(0); --} --EOP -- if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 && ./try; then -- echo "Your stdio appears to use $filbuf" -- stdio_filbuf="$filbuf" -- xxx='ok' -- break -- else -- echo "Hmm. $filbuf doesn't seem to work." -- fi -- $rm -f try.c try -- done -- case "$xxx" in -- notok) echo "I can't figure out how to access _filbuf" -- echo "I'll just have to work around it." -- d_stdio_ptr_lval="$undef" -- d_stdio_cnt_lval="$undef" -- ;; -- esac -- ;; --esac -- : see if _base is also standard val="$undef" @@@ -10298,7 -10301,7 +10263,6 @@@ stdchar='$stdchar stdio_base='$stdio_base' stdio_bufsiz='$stdio_bufsiz' stdio_cnt='$stdio_cnt' --stdio_filbuf='$stdio_filbuf' stdio_ptr='$stdio_ptr' strings='$strings' submit='$submit' diff --cc MANIFEST index 6b202da,6a45129..c48ec40 --- a/MANIFEST +++ b/MANIFEST @@@ -4,8 -4,8 +4,9 @@@ Changes5.000 Differences between 4.x a Changes5.001 Differences between 5.000 and 5.001 Changes5.002 Differences between 5.001 and 5.002 Changes5.003 Differences between 5.002 and 5.003 --Configure Portability tool configure Crude emulation of GNU configure ++configure.gnu Copy of configure (for case-insensitive systems) ++Configure Portability tool Copying The GNU General Public License EXTERN.h Included before foreign .h files INSTALL Detailed installation instructions @@@ -208,6 -208,6 +209,7 @@@ hints/broken-db.msg Warning message fo hints/bsdos.sh Hints for named architecture hints/convexos.sh Hints for named architecture hints/cxux.sh Hints for named architecture ++hints/dcosx.sh Hints for named architecture hints/dec_osf.sh Hints for named architecture hints/dgux.sh Hints for named architecture hints/dynix.sh Hints for named architecture @@@ -495,6 -495,6 +497,7 @@@ pod/perlbot.pod Object-oriented Bag o pod/perlcall.pod Callback info pod/perldata.pod Data structure info pod/perldebug.pod Debugger info ++pod/perldelta.pod Changes since last version pod/perldiag.pod Diagnostic info pod/perldsc.pod Data Structures Cookbook pod/perlembed.pod Embedding info @@@ -505,7 -505,7 +508,6 @@@ pod/perlipc.pod IPC inf 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/perlpod.pod Pod info diff --cc README index 7ed5de4,7ed5de4..90d9410 --- a/README +++ b/README @@@ -1,7 -1,7 +1,7 @@@ Perl Kit, Version 5.0 -- Copyright 1989-1996, Larry Wall ++ Copyright 1989-1997, Larry Wall All rights reserved. This program is free software; you can redistribute it and/or modify diff --cc XSUB.h index af452ea,af452ea..aaa4c22 --- a/XSUB.h +++ b/XSUB.h @@@ -38,19 -38,19 +38,25 @@@ #ifdef XS_VERSION # define XS_VERSION_BOOTCHECK \ -- STMT_START { \ -- char vn[255], *module = SvPV(ST(0),na); \ -- if (items >= 2) /* version supplied as bootstrap arg */ \ -- Sv=ST(1); \ -- else { /* read version from module::VERSION */ \ -- sprintf(vn,"%s::VERSION", module); \ -- Sv = perl_get_sv(vn, FALSE); /* XXX GV_ADDWARN */ \ -- } \ -- if (Sv && (!SvOK(Sv) || strNE(XS_VERSION, SvPV(Sv,na))) ) \ -- croak("%s object version %s does not match %s.pm $VERSION %s", \ -- module,XS_VERSION, module,(Sv && SvOK(Sv))?SvPV(Sv,na):"(undef)");\ ++ STMT_START { \ ++ char vn[255], *module = SvPV(ST(0),na); \ ++ if (items >= 2) /* version supplied as bootstrap arg */ \ ++ Sv = ST(1); \ ++ else { \ ++ sprintf(vn,"%s::XS_VERSION", module); \ ++ Sv = perl_get_sv(vn, FALSE); /* XXX GV_ADDWARN */ \ ++ if (!Sv || !SvOK(Sv)) { \ ++ sprintf(vn,"%s::VERSION", module); \ ++ Sv = perl_get_sv(vn, FALSE); /* XXX GV_ADDWARN */ \ ++ } \ ++ } \ ++ if (!Sv || !SvOK(Sv)) \ ++ croak("%s object can't find $%s::XS_VERSION or $%s::VERSION", \ ++ module, module, module); \ ++ else if (strNE(XS_VERSION, SvPV(Sv, na))) \ ++ croak("%s object version %s does not match $%s %s", \ ++ module, XS_VERSION, vn, SvPV(Sv, na)); \ } STMT_END #else # define XS_VERSION_BOOTCHECK #endif -- diff --cc config_H index cec8188,cec8188..2b6834b --- a/config_H +++ b/config_H @@@ -28,6 -28,6 +28,14 @@@ */ #define MEM_ALIGNBYTES 4 /**/ ++/* ARCHNAME: ++ * This symbol holds a string representing the architecture name. ++ * It may be used to construct an architecture-dependant pathname ++ * where library files may be held under a private library, for ++ * instance. ++ */ ++#define ARCHNAME "unknown" /**/ ++ /* BIN: * This symbol holds the path of the bin directory where the package will * be installed. Program must be prepared to deal with ~name substitution. @@@ -335,13 -335,13 +343,6 @@@ #define HAS_NTOHL /**/ #define HAS_NTOHS /**/ --/* HAS_INET_ATON: -- * This symbol, if defined, indicates to the C program that the -- * inet_aton() function is available to parse IP address "dotted-quad" -- * strings. -- */ --#define HAS_INET_ATON /**/ -- /* HAS_ISASCII: * This manifest constant lets the C program know that isascii * is available. @@@ -723,22 -723,22 +724,12 @@@ * This symbol is defined if the FILE_cnt macro can be used as an * lvalue. */ --/* FILE_filbuf: -- * This macro is used to access the internal stdio _filbuf function -- * (or equivalent), if STDIO_CNT_LVALUE and STDIO_PTR_LVALUE -- * are defined. It is typically either _filbuf or __filbuf. -- * This macro will only be defined if both STDIO_CNT_LVALUE and -- * STDIO_PTR_LVALUE are defined. -- */ #define USE_STDIO_PTR /**/ #ifdef USE_STDIO_PTR #define FILE_ptr(fp) ((fp)->_ptr) #define STDIO_PTR_LVALUE /**/ #define FILE_cnt(fp) ((fp)->_cnt) #define STDIO_CNT_LVALUE /**/ --#if defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE) --#define FILE_filbuf(fp) _filbuf(fp) /**/ --#endif #endif /* USE_STDIO_BASE: @@@ -813,19 -813,19 +804,19 @@@ /* 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(). */ #define 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. */ #define 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. */ #define HAS_STRTOUL /**/ @@@ -1290,6 -1290,6 +1281,33 @@@ */ #define Mode_t mode_t /* file mode parameter for system calls */ ++/* VAL_O_NONBLOCK: ++ * This symbol is to be used during open() or fcntl(F_SETFL) to turn on ++ * non-blocking I/O for the file descriptor. Note that there is no way ++ * back, i.e. you cannot turn it blocking again this way. If you wish to ++ * alternatively switch between blocking and non-blocking, use the ++ * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. ++ */ ++/* VAL_EAGAIN: ++ * This symbol holds the errno error code set by read() when no data was ++ * present on the non-blocking file descriptor. ++ */ ++/* RD_NODATA: ++ * This symbol holds the return code from read() when no data is present ++ * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is ++ * not defined, then you can't distinguish between no data and EOF by ++ * issuing a read(). You'll have to find another way to tell for sure! ++ */ ++/* EOF_NONBLOCK: ++ * This symbol, if defined, indicates to the C program that a read() on ++ * a non-blocking file descriptor will return 0 on EOF, and not the value ++ * held in RD_NODATA (-1 usually, in that case!). ++ */ ++#define VAL_O_NONBLOCK O_NONBLOCK ++#define VAL_EAGAIN EAGAIN ++#define RD_NODATA -1 ++#define EOF_NONBLOCK ++ /* CAN_PROTOTYPE: * If defined, this macro indicates that the C compiler can handle * function prototypes. @@@ -1338,6 -1338,6 +1356,16 @@@ */ #define Size_t size_t /* length paramater for string functions */ ++/* SSize_t: ++ * This symbol holds the type used by functions that return ++ * a count of bytes or an error condition. It must be a signed type. ++ * It is usually ssize_t, but may be long or int, etc. ++ * It may be necessary to include or ++ * to get any typedef'ed information. ++ * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). ++ */ ++#define SSize_t ssize_t /* signed count of bytes */ ++ /* STDCHAR: * This symbol is defined to be the type of char used in stdio.h. * It has the values "unsigned char" or "char". @@@ -1477,6 -1477,6 +1505,13 @@@ #define HAS_GETPGRP /**/ /*#define USE_BSD_GETPGRP / **/ ++/* HAS_INET_ATON: ++ * This symbol, if defined, indicates to the C program that the ++ * inet_aton() function is available to parse IP address "dotted-quad" ++ * strings. ++ */ ++#define HAS_INET_ATON /**/ ++ /* HAS_SETPGID: * This symbol, if defined, indicates to the C program that * the setpgid(pid, gpid) function is available to set the @@@ -1591,33 -1591,33 +1626,6 @@@ */ #define MYMALLOC /**/ --/* VAL_O_NONBLOCK: -- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on -- * non-blocking I/O for the file descriptor. Note that there is no way -- * back, i.e. you cannot turn it blocking again this way. If you wish to -- * alternatively switch between blocking and non-blocking, use the -- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. -- */ --/* VAL_EAGAIN: -- * This symbol holds the errno error code set by read() when no data was -- * present on the non-blocking file descriptor. -- */ --/* RD_NODATA: -- * This symbol holds the return code from read() when no data is present -- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is -- * not defined, then you can't distinguish between no data and EOF by -- * issuing a read(). You'll have to find another way to tell for sure! -- */ --/* EOF_NONBLOCK: -- * This symbol, if defined, indicates to the C program that a read() on -- * a non-blocking file descriptor will return 0 on EOF, and not the value -- * held in RD_NODATA (-1 usually, in that case!). -- */ --#define VAL_O_NONBLOCK O_NONBLOCK --#define VAL_EAGAIN EAGAIN --#define RD_NODATA -1 --#define EOF_NONBLOCK -- /* OLDARCHLIB: * This variable, if defined, holds the name of the directory in * which the user has perl5.000 or perl5.001 architecture-dependent @@@ -1718,16 -1718,16 +1726,6 @@@ #define SITELIB "/opt/perl/lib/site_perl" /**/ #define SITELIB_EXP "/opt/perl/lib/site_perl" /**/ --/* SSize_t: -- * This symbol holds the type used by functions that return -- * a count of bytes or an error condition. It must be a signed type. -- * It is usually ssize_t, but may be long or int, etc. -- * It may be necessary to include or -- * to get any typedef'ed information. -- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). -- */ --#define SSize_t ssize_t /* signed count of bytes */ -- /* STARTPERL: * This variable contains the string to put in front of a perl * script to make sure (one hopes) that it runs with perl and not diff --cc config_h.SH index c6d662a,c6d662a..9b9236e --- a/config_h.SH +++ b/config_h.SH @@@ -42,6 -42,6 +42,14 @@@ sed <config.h -e 's!^#und */ #define MEM_ALIGNBYTES $alignbytes /**/ ++/* ARCHNAME: ++ * This symbol holds a string representing the architecture name. ++ * It may be used to construct an architecture-dependant pathname ++ * where library files may be held under a private library, for ++ * instance. ++ */ ++#define ARCHNAME "$archname" /**/ ++ /* BIN: * This symbol holds the path of the bin directory where the package will * be installed. Program must be prepared to deal with ~name substitution. @@@ -349,13 -349,13 +357,6 @@@ #$d_htonl HAS_NTOHL /**/ #$d_htonl HAS_NTOHS /**/ --/* HAS_INET_ATON: -- * This symbol, if defined, indicates to the C program that the -- * inet_aton() function is available to parse IP address "dotted-quad" -- * strings. -- */ --#$d_inetaton HAS_INET_ATON /**/ -- /* HAS_ISASCII: * This manifest constant lets the C program know that isascii * is available. @@@ -737,22 -737,22 +738,12 @@@ * This symbol is defined if the FILE_cnt macro can be used as an * lvalue. */ --/* FILE_filbuf: -- * This macro is used to access the internal stdio _filbuf function -- * (or equivalent), if STDIO_CNT_LVALUE and STDIO_PTR_LVALUE -- * are defined. It is typically either _filbuf or __filbuf. -- * This macro will only be defined if both STDIO_CNT_LVALUE and -- * STDIO_PTR_LVALUE are defined. -- */ #$d_stdstdio USE_STDIO_PTR /**/ #ifdef USE_STDIO_PTR #define FILE_ptr(fp) $stdio_ptr #$d_stdio_ptr_lval STDIO_PTR_LVALUE /**/ #define FILE_cnt(fp) $stdio_cnt #$d_stdio_cnt_lval STDIO_CNT_LVALUE /**/ --#if defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE) --#define FILE_filbuf(fp) $stdio_filbuf /**/ --#endif #endif /* USE_STDIO_BASE: @@@ -1304,6 -1304,6 +1295,33 @@@ */ #define Mode_t $modetype /* file mode parameter for system calls */ ++/* VAL_O_NONBLOCK: ++ * This symbol is to be used during open() or fcntl(F_SETFL) to turn on ++ * non-blocking I/O for the file descriptor. Note that there is no way ++ * back, i.e. you cannot turn it blocking again this way. If you wish to ++ * alternatively switch between blocking and non-blocking, use the ++ * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. ++ */ ++/* VAL_EAGAIN: ++ * This symbol holds the errno error code set by read() when no data was ++ * present on the non-blocking file descriptor. ++ */ ++/* RD_NODATA: ++ * This symbol holds the return code from read() when no data is present ++ * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is ++ * not defined, then you can't distinguish between no data and EOF by ++ * issuing a read(). You'll have to find another way to tell for sure! ++ */ ++/* EOF_NONBLOCK: ++ * This symbol, if defined, indicates to the C program that a read() on ++ * a non-blocking file descriptor will return 0 on EOF, and not the value ++ * held in RD_NODATA (-1 usually, in that case!). ++ */ ++#define VAL_O_NONBLOCK $o_nonblock ++#define VAL_EAGAIN $eagain ++#define RD_NODATA $rd_nodata ++#$d_eofnblk EOF_NONBLOCK ++ /* CAN_PROTOTYPE: * If defined, this macro indicates that the C compiler can handle * function prototypes. @@@ -1352,6 -1352,6 +1370,16 @@@ */ #define Size_t $sizetype /* length paramater for string functions */ ++/* SSize_t: ++ * This symbol holds the type used by functions that return ++ * a count of bytes or an error condition. It must be a signed type. ++ * It is usually ssize_t, but may be long or int, etc. ++ * It may be necessary to include or ++ * to get any typedef'ed information. ++ * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). ++ */ ++#define SSize_t $ssizetype /* signed count of bytes */ ++ /* STDCHAR: * This symbol is defined to be the type of char used in stdio.h. * It has the values "unsigned char" or "char". @@@ -1491,6 -1491,6 +1519,13 @@@ #$d_getpgrp HAS_GETPGRP /**/ #$d_bsdgetpgrp USE_BSD_GETPGRP /**/ ++/* HAS_INET_ATON: ++ * This symbol, if defined, indicates to the C program that the ++ * inet_aton() function is available to parse IP address "dotted-quad" ++ * strings. ++ */ ++#$d_inetaton HAS_INET_ATON /**/ ++ /* HAS_SETPGID: * This symbol, if defined, indicates to the C program that * the setpgid(pid, gpid) function is available to set the @@@ -1605,33 -1605,33 +1640,6 @@@ */ #$d_mymalloc MYMALLOC /**/ --/* VAL_O_NONBLOCK: -- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on -- * non-blocking I/O for the file descriptor. Note that there is no way -- * back, i.e. you cannot turn it blocking again this way. If you wish to -- * alternatively switch between blocking and non-blocking, use the -- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. -- */ --/* VAL_EAGAIN: -- * This symbol holds the errno error code set by read() when no data was -- * present on the non-blocking file descriptor. -- */ --/* RD_NODATA: -- * This symbol holds the return code from read() when no data is present -- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is -- * not defined, then you can't distinguish between no data and EOF by -- * issuing a read(). You'll have to find another way to tell for sure! -- */ --/* EOF_NONBLOCK: -- * This symbol, if defined, indicates to the C program that a read() on -- * a non-blocking file descriptor will return 0 on EOF, and not the value -- * held in RD_NODATA (-1 usually, in that case!). -- */ --#define VAL_O_NONBLOCK $o_nonblock --#define VAL_EAGAIN $eagain --#define RD_NODATA $rd_nodata --#$d_eofnblk EOF_NONBLOCK -- /* OLDARCHLIB: * This variable, if defined, holds the name of the directory in * which the user has perl5.000 or perl5.001 architecture-dependent @@@ -1732,16 -1732,16 +1740,6 @@@ #define SITELIB "$sitelib" /**/ #define SITELIB_EXP "$sitelibexp" /**/ --/* SSize_t: -- * This symbol holds the type used by functions that return -- * a count of bytes or an error condition. It must be a signed type. -- * It is usually ssize_t, but may be long or int, etc. -- * It may be necessary to include or -- * to get any typedef'ed information. -- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). -- */ --#define SSize_t $ssizetype /* signed count of bytes */ -- /* STARTPERL: * This variable contains the string to put in front of a perl * script to make sure (one hopes) that it runs with perl and not diff --cc configure.gnu index e69de29,e69de29..868e454 --- a/configure.gnu +++ b/configure.gnu @@@ -1,0 -1,0 +1,120 @@@ ++#! /bin/sh ++# ++# $Id: configure,v 3.0.1.1 1995/07/25 14:16:21 ram Exp $ ++# ++# GNU configure-like front end to metaconfig's Configure. ++# ++# Written by Andy Dougherty ++# and Matthew Green . ++# ++# Reformatted and modified for inclusion in the dist-3.0 package by ++# Raphael Manfredi . ++# ++# This script belongs to the public domain and may be freely redistributed. ++# ++# The remaining of this leading shell comment may be removed if you ++# include this script in your own package. ++# ++# $Log: configure,v $ ++# Revision 3.0.1.1 1995/07/25 14:16:21 ram ++# patch56: created ++# ++ ++(exit $?0) || exec sh $0 $argv:q ++ ++case "$0" in ++*configure) ++ if cmp $0 `echo $0 | sed -e s/configure/Configure/` >/dev/null; then ++ echo "Your configure and Configure scripts seem to be identical." ++ echo "This can happen on filesystems that aren't fully case sensitive." ++ echo "You'll have to explicitely extract Configure and run that." ++ exit 1 ++ fi ++ ;; ++esac ++ ++opts='' ++verbose='' ++create='-e' ++while test $# -gt 0; do ++ case $1 in ++ --help) ++ cat </dev/null 2>&1 ++ shift ++ ;; ++ --verbose) ++ verbose=true ++ shift ++ ;; ++ --version) ++ copt="$copt -V" ++ shift ++ ;; ++ --*) ++ opt=`echo $1 | sed 's/=.*//'` ++ echo "This GNU configure front end does not understand $opt" ++ exit 1 ++ ;; ++ *) ++ opts="$opts $1" ++ shift ++ ;; ++ esac ++done ++ ++case "$CC" in ++'') ;; ++*) opts="$opts -Dcc='$CC'";; ++esac ++ ++# Join DEFS and CFLAGS together. ++ccflags='' ++case "$DEFS" in ++'') ;; ++*) ccflags=$DEFS;; ++esac ++case "$CFLAGS" in ++'') ;; ++*) ccflags="$ccflags $CFLAGS";; ++esac ++case "$ccflags" in ++'') ;; ++*) opts="$opts -Dccflags='$ccflags'";; ++esac ++ ++# Don't use -s if they want verbose mode ++case "$verbose" in ++'') copt="$copt -ds";; ++*) copt="$copt -d";; ++esac ++ ++set X sh Configure $copt $create $opts ++shift ++echo "$@" ++exec "$@" diff --cc cop.h index 14cd43e,14cd43e..d450e09 --- a/cop.h +++ b/cop.h @@@ -49,9 -49,9 +49,13 @@@ struct block_sub /* We muck with cxstack_ix since _dec may call a DESTROY, overwriting cx. */ #define POPSUB(cx) \ -- if (cx->blk_sub.hasargs) { /* put back old @_ */ \ ++ if (cx->blk_sub.hasargs) { \ ++ /* put back old @_ */ \ SvREFCNT_dec(GvAV(defgv)); \ GvAV(defgv) = cx->blk_sub.savearray; \ ++ /* destroy arg array */ \ ++ av_clear(cx->blk_sub.argarray); \ ++ AvREAL_off(cx->blk_sub.argarray); \ } \ if (cx->blk_sub.cv) { \ if (!(CvDEPTH(cx->blk_sub.cv) = cx->blk_sub.olddepth)) { \ diff --cc cv.h index b29793f,b29793f..e7e8ce2 --- a/cv.h +++ b/cv.h @@@ -52,7 -52,7 +52,6 @@@ struct xpvcv #define CVf_UNIQUE 0x10 /* can't be cloned */ #define CVf_NODEBUG 0x20 /* no DB::sub indirection for this CV (esp. useful for special XSUBs) */ --#define CVf_FORMAT 0x40 /* is a format, not a sub */ #define CvCLONE(cv) (CvFLAGS(cv) & CVf_CLONE) #define CvCLONE_on(cv) (CvFLAGS(cv) |= CVf_CLONE) @@@ -74,10 -74,10 +73,6 @@@ #define CvUNIQUE_on(cv) (CvFLAGS(cv) |= CVf_UNIQUE) #define CvUNIQUE_off(cv) (CvFLAGS(cv) &= ~CVf_UNIQUE) --#define CvFORMAT(cv) (CvFLAGS(cv) & CVf_FORMAT) --#define CvFORMAT_on(cv) (CvFLAGS(cv) |= CVf_FORMAT) --#define CvFORMAT_off(cv) (CvFLAGS(cv) &= ~CVf_FORMAT) -- #define CvNODEBUG(cv) (CvFLAGS(cv) & CVf_NODEBUG) #define CvNODEBUG_on(cv) (CvFLAGS(cv) |= CVf_NODEBUG) #define CvNODEBUG_off(cv) (CvFLAGS(cv) &= ~CVf_NODEBUG) diff --cc ext/IO/Makefile.PL index eb059bf,eb059bf..4a34be6 --- a/ext/IO/Makefile.PL +++ b/ext/IO/Makefile.PL @@@ -4,4 -4,4 +4,5 @@@ WriteMakefile MAN3PODS => ' ', # Pods will be built by installman. XSPROTOARG => '-noprototypes', # XXX remove later? VERSION_FROM => 'lib/IO/Handle.pm', ++ XS_VERSION => 1.15 ); diff --cc ext/IO/lib/IO/File.pm index e44d77f,e44d77f..0f8df00 --- a/ext/IO/lib/IO/File.pm +++ b/ext/IO/lib/IO/File.pm @@@ -11,12 -11,12 +11,12 @@@ IO::File - supply object methods for fi use IO::File; $fh = new IO::File; -- if ($fh->open "< file") { ++ if ($fh->open("< file")) { print <$fh>; $fh->close; } -- $fh = new IO::File "> FOO"; ++ $fh = new IO::File "> file"; if (defined $fh) { print $fh "bar\n"; $fh->close; @@@ -31,13 -31,13 +31,12 @@@ $fh = new IO::File "file", O_WRONLY|O_APPEND; if (defined $fh) { print $fh "corge\n"; -- undef $fh; # automatically closes the file -- } -- $pos = $fh->getpos; -- $fh->setpos $pos; ++ $pos = $fh->getpos; ++ $fh->setpos($pos); -- $fh->setvbuf($buffer_var, _IOLBF, 1024); ++ undef $fh; # automatically closes the file ++ } autoflush STDOUT 1; diff --cc ext/IO/lib/IO/Handle.pm index 03118ee,03118ee..135351f --- a/ext/IO/lib/IO/Handle.pm +++ b/ext/IO/lib/IO/Handle.pm @@@ -1,3 -1,3 +1,4 @@@ ++ package IO::Handle; =head1 NAME @@@ -9,39 -9,39 +10,33 @@@ IO::Handle - supply object methods for use IO::Handle; $fh = new IO::Handle; -- if ($fh->open "< file") { -- print <$fh>; -- $fh->close; -- } -- -- $fh = new IO::Handle "> FOO"; -- if (defined $fh) { -- print $fh "bar\n"; ++ if ($fh->fdopen(fileno(STDIN),"r")) { ++ print $fh->getline; $fh->close; } -- $fh = new IO::Handle "file", "r"; -- if (defined $fh) { -- print <$fh>; -- undef $fh; # automatically closes the file -- } -- -- $fh = new IO::Handle "file", O_WRONLY|O_APPEND; -- if (defined $fh) { -- print $fh "corge\n"; -- undef $fh; # automatically closes the file ++ $fh = new IO::Handle; ++ if ($fh->fdopen(fileno(STDOUT),"w")) { ++ $fh->print("Some text\n"); } -- $pos = $fh->getpos; -- $fh->setpos $pos; -- $fh->setvbuf($buffer_var, _IOLBF, 1024); ++ undef $fh; # automatically closes the file if it's open ++ autoflush STDOUT 1; =head1 DESCRIPTION --C is the base class for all other IO handle classes. ++C is the base class for all other IO handle classes. It is ++not intended that objects of C would be created directly, ++but instead C is inherited from by several other classes ++in the IO hierarchy. ++ ++If you are reading this documentation, looking for a replacement for ++the C package, then I suggest you read the documentation ++for C ++ A C object is a reference to a symbol (see the C package) =head1 CONSTRUCTOR @@@ -167,7 -167,7 +162,7 @@@ module keeps a C variable in ' L, L, --L ++L =head1 BUGS @@@ -184,7 -184,7 +179,7 @@@ Derived from FileHandle.pm by Graham Ba require 5.000; use strict; --use vars qw($VERSION @EXPORT_OK $AUTOLOAD @ISA); ++use vars qw($VERSION $XS_VERSION @EXPORT_OK $AUTOLOAD @ISA); use Carp; use Symbol; use SelectSaver; @@@ -192,7 -192,7 +187,8 @@@ require Exporter; @ISA = qw(Exporter); --$VERSION = "1.1402"; ++$VERSION = "1.1501"; ++$XS_VERSION = "1.15"; @EXPORT_OK = qw( autoflush @@@ -231,7 -231,7 +227,7 @@@ require DynaLoader; @IO::ISA = qw(DynaLoader); --bootstrap IO $VERSION; ++bootstrap IO $XS_VERSION; sub AUTOLOAD { if ($AUTOLOAD =~ /::(_?[a-z])/) { @@@ -314,14 -314,14 +310,8 @@@ sub fdopen sub close { @_ == 1 or croak 'usage: $fh->close()'; my($fh) = @_; -- my $r = close($fh); -- -- # This may seem as though it should be in IO::Pipe, but the -- # object gets blessed out of IO::Pipe when reader/writer is called -- waitpid(${*$fh}{'io_pipe_pid'},0) -- if(defined ${*$fh}{'io_pipe_pid'}); -- $r; ++ close($fh); } ################################################ diff --cc ext/IO/lib/IO/Pipe.pm index 34cb0da,34cb0da..499856a --- a/ext/IO/lib/IO/Pipe.pm +++ b/ext/IO/lib/IO/Pipe.pm @@@ -1,7 -1,7 +1,145 @@@ ++# IO::Pipe.pm # ++# Copyright (c) 1996 Graham Barr . All rights ++# reserved. This program is free software; you can redistribute it and/or ++# modify it under the same terms as Perl itself. package IO::Pipe; ++require 5.000; ++ ++use IO::Handle; ++use strict; ++use vars qw($VERSION); ++use Carp; ++use Symbol; ++ ++$VERSION = "1.09"; ++ ++sub new { ++ my $type = shift; ++ my $class = ref($type) || $type || "IO::Pipe"; ++ @_ == 0 || @_ == 2 or croak "usage: new $class [READFH, WRITEFH]"; ++ ++ my $me = bless gensym(), $class; ++ ++ my($readfh,$writefh) = @_ ? @_ : $me->handles; ++ ++ pipe($readfh, $writefh) ++ or return undef; ++ ++ @{*$me} = ($readfh, $writefh); ++ ++ $me; ++} ++ ++sub handles { ++ @_ == 1 or croak 'usage: $pipe->handles()'; ++ (IO::Pipe::End->new(), IO::Pipe::End->new()); ++} ++ ++my $do_spawn = $^O eq 'os2'; ++ ++sub _doit { ++ my $me = shift; ++ my $rw = shift; ++ ++ my $pid = $do_spawn ? 0 : fork(); ++ ++ if($pid) { # Parent ++ return $pid; ++ } ++ elsif(defined $pid) { # Child or spawn ++ my $fh; ++ my $io = $rw ? \*STDIN : \*STDOUT; ++ my ($mode, $save) = $rw ? "r" : "w"; ++ if ($do_spawn) { ++ require Fcntl; ++ $save = IO::Handle->new_from_fd($io, $mode); ++ # Close in child: ++ fcntl(shift, Fcntl::F_SETFD(), 1) or croak "fcntl: $!"; ++ $fh = $rw ? ${*$me}[0] : ${*$me}[1]; ++ } else { ++ shift; ++ $fh = $rw ? $me->reader() : $me->writer(); # close the other end ++ } ++ bless $io, "IO::Handle"; ++ $io->fdopen($fh, $mode); ++ ++ if ($do_spawn) { ++ $pid = eval { system 1, @_ }; # 1 == P_NOWAIT ++ my $err = $!; ++ ++ $io->fdopen($save, $mode); ++ $save->close or croak "Cannot close $!"; ++ croak "IO::Pipe: Cannot spawn-NOWAIT: $err" if not $pid or $pid < 0; ++ return $pid; ++ } else { ++ exec @_ or ++ croak "IO::Pipe: Cannot exec: $!"; ++ } ++ } ++ else { ++ croak "IO::Pipe: Cannot fork: $!"; ++ } ++ ++ # NOT Reached ++} ++ ++sub reader { ++ @_ >= 1 or croak 'usage: $pipe->reader()'; ++ my $me = shift; ++ my $fh = ${*$me}[0]; ++ my $pid = $me->_doit(0, $fh, @_) ++ if(@_); ++ ++ close ${*$me}[1]; ++ bless $me, ref($fh); ++ *{*$me} = *{*$fh}; # Alias self to handle ++ bless $fh; # Really wan't un-bless here ++ ${*$me}{'io_pipe_pid'} = $pid ++ if defined $pid; ++ ++ $me; ++} ++ ++sub writer { ++ @_ >= 1 or croak 'usage: $pipe->writer()'; ++ my $me = shift; ++ my $fh = ${*$me}[1]; ++ my $pid = $me->_doit(1, $fh, @_) ++ if(@_); ++ ++ close ${*$me}[0]; ++ bless $me, ref($fh); ++ *{*$me} = *{*$fh}; # Alias self to handle ++ bless $fh; # Really wan't un-bless here ++ ${*$me}{'io_pipe_pid'} = $pid ++ if defined $pid; ++ ++ $me; ++} ++ ++package IO::Pipe::End; ++ ++use vars qw(@ISA); ++ ++@ISA = qw(IO::Handle); ++ ++sub close { ++ my $fh = shift; ++ my $r = $fh->SUPER::close(@_); ++ ++ waitpid(${*$fh}{'io_pipe_pid'},0) ++ if(defined ${*$fh}{'io_pipe_pid'}); ++ ++ $r; ++} ++ ++1; ++ ++__END__ ++ =head1 NAME IO::pipe - supply object methods for pipes @@@ -79,7 -79,7 +217,7 @@@ is called and C are passed to exe This method is called during construction by C on the newly created C object. It returns an array of two objects --blessed into C, or a subclass thereof. ++blessed into C, or a subclass thereof. =back @@@ -93,101 -93,101 +231,8 @@@ Graham Barr handles; -- -- pipe($readfh, $writefh) -- or return undef; -- -- @{*$me} = ($readfh, $writefh); -- -- $me; --} -- --sub handles { -- @_ == 1 or croak 'usage: $pipe->handles()'; -- (IO::Handle->new(), IO::Handle->new()); --} -- --sub _doit { -- my $me = shift; -- my $rw = shift; -- -- my $pid = fork(); -- -- if($pid) { # Parent -- return $pid; -- } -- elsif(defined $pid) { # Child -- my $fh = $rw ? $me->reader() : $me->writer(); -- my $io = $rw ? \*STDIN : \*STDOUT; -- -- bless $io, "IO::Handle"; -- $io->fdopen($fh, $rw ? "r" : "w"); -- exec @_ or -- croak "IO::Pipe: Cannot exec: $!"; -- } -- else { -- croak "IO::Pipe: Cannot fork: $!"; -- } -- -- # NOT Reached --} -- --sub reader { -- @_ >= 1 or croak 'usage: $pipe->reader()'; -- my $me = shift; -- my $fh = ${*$me}[0]; -- my $pid = $me->_doit(0,@_) -- if(@_); -- -- close(${*$me}[1]); -- bless $me, ref($fh); -- *{*$me} = *{*$fh}; # Alias self to handle -- bless $fh, 'IO::Pipe::DeadEnd'; # Really wan't un-bless here -- ${*$me}{'io_pipe_pid'} = $pid -- if defined $pid; -- -- $me; --} -- --sub writer { -- @_ >= 1 or croak 'usage: $pipe->writer()'; -- my $me = shift; -- my $fh = ${*$me}[1]; -- my $pid = $me->_doit(1,@_) -- if(@_); -- -- close(${*$me}[0]); -- bless $me, ref($fh); -- *{*$me} = *{*$fh}; # Alias self to handle -- bless $fh, 'IO::Pipe::DeadEnd'; # Really wan't un-bless here -- ${*$me}{'io_pipe_pid'} = $pid -- if defined $pid; -- -- $me; --} -- --1; -- diff --cc ext/IO/lib/IO/Socket.pm index 6a69c6b,6a69c6b..264d1ac --- a/ext/IO/lib/IO/Socket.pm +++ b/ext/IO/lib/IO/Socket.pm @@@ -1,4 -1,4 +1,8 @@@ ++# IO::Socket.pm # ++# Copyright (c) 1996 Graham Barr . All rights ++# reserved. This program is free software; you can redistribute it and/or ++# modify it under the same terms as Perl itself. package IO::Socket; @@@ -114,7 -114,7 +118,7 @@@ use Exporter @ISA = qw(IO::Handle); --$VERSION = "1.15"; ++$VERSION = "1.16"; sub import { my $pkg = shift; @@@ -136,16 -136,16 +140,7 @@@ my @domain2pkg = () sub register_domain { my($p,$d) = @_; -- $domain2pkg[$d] = bless \$d, $p; --} -- --sub _domain2pkg { -- my $domain = shift; -- -- croak "Unsupported socket domain" -- unless defined $domain2pkg[$domain]; -- -- $domain2pkg[$domain] ++ $domain2pkg[$d] = $p; } sub configure { @@@ -155,12 -155,12 +150,13 @@@ croak 'IO::Socket: Cannot configure a generic socket' unless defined $domain; -- my $class = ref(_domain2pkg($domain)); ++ croak "IO::Socket: Unsupported socket domain" ++ unless defined $domain2pkg[$domain]; croak "IO::Socket: Cannot configure socket in domain '$domain'" unless ref($fh) eq "IO::Socket"; -- bless($fh, $class); ++ bless($fh, $domain2pkg[$domain]); $fh->configure; } @@@ -168,18 -168,18 +164,13 @@@ sub socket @_ == 4 or croak 'usage: $fh->socket(DOMAIN, TYPE, PROTOCOL)'; my($fh,$domain,$type,$protocol) = @_; socket($fh,$domain,$type,$protocol) or return undef; -- ${*$fh}{'io_socket_type'} = $type; -- ${*$fh}{'io_socket_proto'} = $protocol; ++ ${*$fh}{'io_socket_domain'} = $domain; ++ ${*$fh}{'io_socket_type'} = $type; ++ ${*$fh}{'io_socket_proto'} = $protocol; ++ $fh; } @@@ -352,7 -352,7 +343,7 @@@ sub timeout sub sockdomain { @_ == 1 or croak 'usage: $fh->sockdomain()'; my $fh = shift; -- ${${*$fh}{'io_socket_domain'}} ++ ${*$fh}{'io_socket_domain'}; } sub socktype { @@@ -549,9 -549,9 +540,6 @@@ sub configure my $pname = (getprotobynumber($proto))[0]; $type = $arg->{Type} || $socket_type{$pname}; -- my $domain = AF_INET; -- ${*$fh}{'io_socket_domain'} = bless \$domain; -- $fh->socket(AF_INET, $type, $proto) or return _error($fh,"$!"); @@@ -667,9 -667,9 +655,6 @@@ sub configure my $type = $arg->{Type} || SOCK_STREAM; -- my $domain = AF_UNIX; -- ${*$fh}{'io_socket_domain'} = bless \$domain; -- $fh->socket(AF_UNIX, $type, 0) or return undef; @@@ -713,7 -713,7 +698,7 @@@ Graham Barr EF [qw()], -- errno_h => [qw(E2BIG EACCES EAGAIN EBADF EBUSY ECHILD EDEADLK EDOM -- EEXIST EFAULT EFBIG EINTR EINVAL EIO EISDIR EMFILE -- EMLINK ENAMETOOLONG ENFILE ENODEV ENOENT ENOEXEC ENOLCK -- ENOMEM ENOSPC ENOSYS ENOTDIR ENOTEMPTY ENOTTY ENXIO -- EPERM EPIPE ERANGE EROFS ESPIPE ESRCH EXDEV errno)], ++ errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT ++ EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED ++ ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT ++ EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS ++ EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK ++ EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ++ ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM ++ ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR ++ ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM ++ EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE ++ ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT ++ ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY ++ EUSERS EWOULDBLOCK EXDEV errno)], fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK @@@ -72,12 -72,12 +80,13 @@@ setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)], -- signal_h => [qw(SA_NOCLDSTOP SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE -- SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV -- SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 -- SIG_BLOCK SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK SIG_UNBLOCK -- raise sigaction signal sigpending sigprocmask -- sigsuspend)], ++ signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK ++ SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM ++ SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL ++ SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN ++ SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR ++ SIG_IGN SIG_SETMASK SIG_UNBLOCK raise sigaction signal ++ sigpending sigprocmask sigsuspend)], stdarg_h => [qw()], diff --cc ext/POSIX/POSIX.pod index 34597d1,34597d1..fba225f --- a/ext/POSIX/POSIX.pod +++ b/ext/POSIX/POSIX.pod @@@ -1576,7 -1576,7 +1576,16 @@@ _SC_ARG_MAX _SC_CHILD_MAX _SC_CLK_TCK _ =item Constants --E2BIG EACCES EAGAIN EBADF EBUSY ECHILD EDEADLK EDOM EEXIST EFAULT EFBIG EINTR EINVAL EIO EISDIR EMFILE EMLINK ENAMETOOLONG ENFILE ENODEV ENOENT ENOEXEC ENOLCK ENOMEM ENOSPC ENOSYS ENOTDIR ENOTEMPTY ENOTTY ENXIO EPERM EPIPE ERANGE EROFS ESPIPE ESRCH EXDEV ++E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF ++EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ ++EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS EINTR ++EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE ENAMETOOLONG ++ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ++ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR ++ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM EPFNOSUPPORT EPIPE ++EPROCLIM EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE ERESTART EROFS ++ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ++ETXTBSY EUSERS EWOULDBLOCK EXDEV =back @@@ -1636,7 -1636,7 +1645,11 @@@ HUGE_VA =item Constants --SA_NOCLDSTOP SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK SIG_UNBLOCK ++SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK SA_RESETHAND SA_RESTART ++SA_SIGINFO SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT ++SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU ++SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR SIG_IGN SIG_SETMASK ++SIG_UNBLOCK =back diff --cc ext/POSIX/POSIX.xs index 6354dc3,6354dc3..42aeb3b --- a/ext/POSIX/POSIX.xs +++ b/ext/POSIX/POSIX.xs @@@ -47,6 -47,6 +47,9 @@@ # include /* LIB$_INVARG constant */ # include /* prototype for lib$ediv() */ # include /* prototype for sys$gettim() */ ++# if DECC_VERSION < 50000000 ++# define pid_t int /* old versions of DECC miss this in types.h */ ++# endif # undef mkfifo /* #defined in perl.h */ # define mkfifo(a,b) (not_here("mkfifo"),-1) @@@ -624,12 -624,12 +627,36 @@@ int arg #else goto not_there; #endif ++ if (strEQ(name, "EADDRINUSE")) ++#ifdef EADDRINUSE ++ return EADDRINUSE; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "EADDRNOTAVAIL")) ++#ifdef EADDRNOTAVAIL ++ return EADDRNOTAVAIL; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "EAFNOSUPPORT")) ++#ifdef EAFNOSUPPORT ++ return EAFNOSUPPORT; ++#else ++ goto not_there; ++#endif if (strEQ(name, "EAGAIN")) #ifdef EAGAIN return EAGAIN; #else goto not_there; #endif ++ if (strEQ(name, "EALREADY")) ++#ifdef EALREADY ++ return EALREADY; ++#else ++ goto not_there; ++#endif break; case 'B': if (strEQ(name, "EBADF")) @@@ -676,6 -676,6 +703,24 @@@ #else goto not_there; #endif ++ if (strEQ(name, "ECONNABORTED")) ++#ifdef ECONNABORTED ++ return ECONNABORTED; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ECONNREFUSED")) ++#ifdef ECONNREFUSED ++ return ECONNREFUSED; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ECONNRESET")) ++#ifdef ECONNRESET ++ return ECONNRESET; ++#else ++ goto not_there; ++#endif break; case 'D': if (strEQ(name, "EDEADLK")) @@@ -684,12 -684,12 +729,24 @@@ #else goto not_there; #endif ++ if (strEQ(name, "EDESTADDRREQ")) ++#ifdef EDESTADDRREQ ++ return EDESTADDRREQ; ++#else ++ goto not_there; ++#endif if (strEQ(name, "EDOM")) #ifdef EDOM return EDOM; #else goto not_there; #endif ++ if (strEQ(name, "EDQUOT")) ++#ifdef EDQUOT ++ return EDQUOT; ++#else ++ goto not_there; ++#endif break; case 'E': if (strEQ(name, "EEXIST")) @@@ -713,7 -713,7 +770,27 @@@ goto not_there; #endif break; ++ case 'H': ++ if (strEQ(name, "EHOSTDOWN")) ++#ifdef EHOSTDOWN ++ return EHOSTDOWN; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "EHOSTUNREACH")) ++#ifdef EHOSTUNREACH ++ return EHOSTUNREACH; ++#else ++ goto not_there; ++#endif ++ break; case 'I': ++ if (strEQ(name, "EINPROGRESS")) ++#ifdef EINPROGRESS ++ return EINPROGRESS; ++#else ++ goto not_there; ++#endif if (strEQ(name, "EINTR")) #ifdef EINTR return EINTR; @@@ -732,12 -732,12 +809,24 @@@ #else goto not_there; #endif ++ if (strEQ(name, "EISCONN")) ++#ifdef EISCONN ++ return EISCONN; ++#else ++ goto not_there; ++#endif if (strEQ(name, "EISDIR")) #ifdef EISDIR return EISDIR; #else goto not_there; #endif ++ if (strEQ(name, "ELOOP")) ++#ifdef ELOOP ++ return ELOOP; ++#else ++ goto not_there; ++#endif break; case 'M': if (strEQ(name, "EMFILE")) @@@ -752,29 -752,29 +841,71 @@@ #else goto not_there; #endif ++ if (strEQ(name, "EMSGSIZE")) ++#ifdef EMSGSIZE ++ return EMSGSIZE; ++#else ++ goto not_there; ++#endif break; case 'N': ++ if (strEQ(name, "ENETDOWN")) ++#ifdef ENETDOWN ++ return ENETDOWN; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ENETRESET")) ++#ifdef ENETRESET ++ return ENETRESET; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ENETUNREACH")) ++#ifdef ENETUNREACH ++ return ENETUNREACH; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ENOBUFS")) ++#ifdef ENOBUFS ++ return ENOBUFS; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ENOEXEC")) ++#ifdef ENOEXEC ++ return ENOEXEC; ++#else ++ goto not_there; ++#endif if (strEQ(name, "ENOMEM")) #ifdef ENOMEM return ENOMEM; #else goto not_there; #endif ++ if (strEQ(name, "ENOPROTOOPT")) ++#ifdef ENOPROTOOPT ++ return ENOPROTOOPT; ++#else ++ goto not_there; ++#endif if (strEQ(name, "ENOSPC")) #ifdef ENOSPC return ENOSPC; #else goto not_there; #endif -- if (strEQ(name, "ENOEXEC")) --#ifdef ENOEXEC -- return ENOEXEC; ++ if (strEQ(name, "ENOTBLK")) ++#ifdef ENOTBLK ++ return ENOTBLK; #else goto not_there; #endif -- if (strEQ(name, "ENOTTY")) --#ifdef ENOTTY -- return ENOTTY; ++ if (strEQ(name, "ENOTCONN")) ++#ifdef ENOTCONN ++ return ENOTCONN; #else goto not_there; #endif @@@ -790,6 -790,6 +921,18 @@@ #else goto not_there; #endif ++ if (strEQ(name, "ENOTSOCK")) ++#ifdef ENOTSOCK ++ return ENOTSOCK; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ENOTTY")) ++#ifdef ENOTTY ++ return ENOTTY; ++#else ++ goto not_there; ++#endif if (strEQ(name, "ENFILE")) #ifdef ENFILE return ENFILE; @@@ -840,6 -840,6 +983,12 @@@ #else goto not_there; #endif ++ if (strEQ(name, "EOPNOTSUPP")) ++#ifdef EOPNOTSUPP ++ return EOPNOTSUPP; ++#else ++ goto not_there; ++#endif break; case 'P': if (strEQ(name, "EPERM")) @@@ -848,12 -848,12 +997,36 @@@ #else goto not_there; #endif ++ if (strEQ(name, "EPFNOSUPPORT")) ++#ifdef EPFNOSUPPORT ++ return EPFNOSUPPORT; ++#else ++ goto not_there; ++#endif if (strEQ(name, "EPIPE")) #ifdef EPIPE return EPIPE; #else goto not_there; #endif ++ if (strEQ(name, "EPROCLIM")) ++#ifdef EPROCLIM ++ return EPROCLIM; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "EPROTONOSUPPORT")) ++#ifdef EPROTONOSUPPORT ++ return EPROTONOSUPPORT; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "EPROTOTYPE")) ++#ifdef EPROTOTYPE ++ return EPROTOTYPE; ++#else ++ goto not_there; ++#endif break; case 'R': if (strEQ(name, "ERANGE")) @@@ -862,6 -862,6 +1035,18 @@@ #else goto not_there; #endif ++ if (strEQ(name, "EREMOTE")) ++#ifdef EREMOTE ++ return EREMOTE; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ERESTART")) ++#ifdef ERESTART ++ return ERESTART; ++#else ++ goto not_there; ++#endif if (strEQ(name, "EROFS")) #ifdef EROFS return EROFS; @@@ -870,6 -870,6 +1055,18 @@@ #endif break; case 'S': ++ if (strEQ(name, "ESHUTDOWN")) ++#ifdef ESHUTDOWN ++ return ESHUTDOWN; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ESOCKTNOSUPPORT")) ++#ifdef ESOCKTNOSUPPORT ++ return ESOCKTNOSUPPORT; ++#else ++ goto not_there; ++#endif if (strEQ(name, "ESPIPE")) #ifdef ESPIPE return ESPIPE; @@@ -882,7 -882,7 +1079,49 @@@ #else goto not_there; #endif ++ if (strEQ(name, "ESTALE")) ++#ifdef ESTALE ++ return ESTALE; ++#else ++ goto not_there; ++#endif break; ++ case 'T': ++ if (strEQ(name, "ETIMEDOUT")) ++#ifdef ETIMEDOUT ++ return ETIMEDOUT; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ETOOMANYREFS")) ++#ifdef ETOOMANYREFS ++ return ETOOMANYREFS; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "ETXTBSY")) ++#ifdef ETXTBSY ++ return ETXTBSY; ++#else ++ goto not_there; ++#endif ++ break; ++ case 'U': ++ if (strEQ(name, "EUSERS")) ++#ifdef EUSERS ++ return EUSERS; ++#else ++ goto not_there; ++#endif ++ break; ++ case 'W': ++ if (strEQ(name, "EWOULDBLOCK")) ++#ifdef EWOULDBLOCK ++ return EWOULDBLOCK; ++#else ++ goto not_there; ++#endif ++ break; case 'X': if (strEQ(name, "EXIT_FAILURE")) #ifdef EXIT_FAILURE @@@ -1769,12 -1769,12 +2008,51 @@@ #else goto not_there; #endif -- if (strEQ(name, "SA_NOCLDSTOP")) ++ if (strnEQ(name, "SA_", 3)) { ++ if (strEQ(name, "SA_NOCLDSTOP")) #ifdef SA_NOCLDSTOP -- return SA_NOCLDSTOP; ++ return SA_NOCLDSTOP; #else -- goto not_there; ++ goto not_there; #endif ++ if (strEQ(name, "SA_NOCLDWAIT")) ++#ifdef SA_NOCLDWAIT ++ return SA_NOCLDWAIT; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "SA_NODEFER")) ++#ifdef SA_NODEFER ++ return SA_NODEFER; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "SA_ONSTACK")) ++#ifdef SA_ONSTACK ++ return SA_ONSTACK; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "SA_RESETHAND")) ++#ifdef SA_RESETHAND ++ return SA_RESETHAND; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "SA_RESTART")) ++#ifdef SA_RESTART ++ return SA_RESTART; ++#else ++ goto not_there; ++#endif ++ if (strEQ(name, "SA_SIGINFO")) ++#ifdef SA_SIGINFO ++ return SA_SIGINFO; ++#else ++ goto not_there; ++#endif ++ break; ++ } if (strEQ(name, "SCHAR_MAX")) #ifdef SCHAR_MAX return SCHAR_MAX; diff --cc gv.c index 89533ff,3b09463..4cfb584 --- a/gv.c +++ b/gv.c @@@ -997,10 -997,10 +997,10 @@@ HV* stash if ( cp = (char *)AMG_names[0] ) { /* Try to find via inheritance. */ - gv = gv_fetchmeth(stash, "()", 2, 0); /* A cooky: "()". */ - gv = gv_fetchmeth(stash, "()", 2, -1); /* A cooky: "()". */ ++ gv = gv_fetchmeth(stash, "()", 2, -1); /* A cookie: "()". */ if (gv) sv = GvSV(gv); - if (!sv) /* Empty */; - if (!gv) goto notable; ++ if (!gv) goto no_table; else if (SvTRUE(sv)) amt.fallback=AMGfallYES; else if (SvOK(sv)) amt.fallback=AMGfallNEVER; } @@@ -1009,7 -1009,7 +1009,7 @@@ cv = 0; cp = (char *)AMG_names[i]; -- *buf = '('; /* A cooky: "(". */ ++ *buf = '('; /* A cookie: "(". */ strcpy(buf + 1, cp); DEBUG_o( deb("Checking overloading of `%s' in package `%.256s'\n", cp, HvNAME(stash)) ); @@@ -1057,6 -1057,7 +1057,7 @@@ } } /* Here we have no table: */ - notable: ++ no_table: AMT_AMAGIC_off(&amt); sv_magic((SV*)stash, 0, 'c', (char*)&amt, sizeof(AMTS)); return FALSE; @@@ -1221,9 -1222,10 +1222,11 @@@ int flags } else if (cvp && (cv=cvp[nomethod_amg])) { notfound = 1; lr = 1; } else { -- if (off==-1) off=method; - sprintf(buf, "Operation `%s': no method found,\n\tleft argument %s%.256s,\n\tright argument %s%.256s", - sprintf(buf, "Operation `%s': no method found,%sargument %s%.256s%s%.256s", ++ if (off==-1) off=method; ++ sprintf(buf, ++ "Operation `%s': no method found,%sargument %s%.256s%s%.256s", AMG_names[method + assignshift], + (flags & AMGf_unary ? " " : "\n\tleft "), SvAMAGIC(left)? "in overloaded package ": "has no overloaded magic", @@@ -1246,7 -1250,7 +1251,8 @@@ } } if (!notfound) { -- DEBUG_o( deb("Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %.256s%s\n", ++ DEBUG_o( deb( ++ "Overloaded operator `%s'%s%s%s:\n\tmethod%s found%s in package %.256s%s\n", AMG_names[off], method+assignshift==off? "" : " (initially `", diff --cc hints/hpux.sh index b103cf5,b103cf5..a310a2d --- a/hints/hpux.sh +++ b/hints/hpux.sh @@@ -113,6 -113,6 +113,9 @@@ usemymalloc='y alignbytes=8 selecttype='int *' ++# When HP-UX runs a script with "#!", it sets argv[0] to the script name. ++toke_cflags='ccflags="$ccflags -DARG_ZERO_IS_SCRIPT"' ++ # If your compile complains about FLT_MIN, uncomment the next line # POSIX_cflags='ccflags="$ccflags -DFLT_MIN=1.17549435E-38"' diff --cc hints/lynxos.sh index 5f8991b,5f8991b..ddffcbe --- a/hints/lynxos.sh +++ b/hints/lynxos.sh @@@ -7,6 -7,6 +7,5 @@@ # cc='gcc' --ccflags='-D_filbuf=_fillbuf' so='none' usemymalloc='n' diff --cc lib/ExtUtils/MM_VMS.pm index 13383e9,13383e9..1e39e11 --- a/lib/ExtUtils/MM_VMS.pm +++ b/lib/ExtUtils/MM_VMS.pm @@@ -6,7 -6,7 +6,7 @@@ # Author: Charles Bailey bailey@genetics.upenn.edu package ExtUtils::MM_VMS; --$ExtUtils::MM_VMS::Revision=$ExtUtils::MM_VMS::Revision = '5.38 (19-Nov-1996)'; ++$ExtUtils::MM_VMS::Revision=$ExtUtils::MM_VMS::Revision = '5.39 (16-Jan-1997)'; unshift @MM::ISA, 'ExtUtils::MM_VMS'; use Config; @@@ -1055,6 -1055,6 +1055,7 @@@ CP = $self->{CP MV = $self->{MV} RM_F = $self->{RM_F} RM_RF = $self->{RM_RF} ++SAY = Write Sys\$Output UMASK_NULL = $self->{UMASK_NULL} NOOP = $self->{NOOP} NOECHO = $self->{NOECHO} @@@ -1064,7 -1064,7 +1065,7 @@@ EQUALIZE_TIMESTAMP = \$(PERL) -we "ope qq!WARN_IF_OLD_PACKLIST = \$(PERL) -e "if (-f \$ARGV[0]){print qq[WARNING: Old package found (\$ARGV[0]); please check for collisions\\n]}" MOD_INSTALL = \$(PERL) "-I\$(PERL_LIB)" "-MExtUtils::Install" -e "install({split(' ',)},1);" DOC_INSTALL = \$(PERL) -e "\@ARGV=split(/\\|/,);print '=head2 ',scalar(localtime),': C<',shift,qq[>\\n\\n=over 4\\n\\n];while(\$key=shift && \$val=shift){print qq[=item *\\n\\nC<\$key: \$val>\\n\\n];}print qq[=back\\n\\n]" --UNINSTALL = \$(PERL) "-I\$(PERL_LIB)" "-MExtUtils::Install" -e "uninstall(\$ARGV[0],1);" ++UNINSTALL = \$(PERL) "-I\$(PERL_LIB)" "-MExtUtils::Install" -e "uninstall(\$ARGV[0],1,1);" !); } @@@ -1335,7 -1335,7 +1336,7 @@@ BOOTSTRAP = '."$self->{BASEEXT}.bs". # we use touch to prevent make continually trying to remake it. # The DynaLoader only reads a non-empty file. $(BOOTSTRAP) : $(MAKEFILE) '."$self->{BOOTDEP}".' $(INST_ARCHAUTODIR).exists -- $(NOECHO) Write Sys$Output "Running mkbootstrap for $(NAME) ($(BSLOADLIBS))" ++ $(NOECHO) $(SAY) "Running mkbootstrap for $(NAME) ($(BSLOADLIBS))" $(NOECHO) $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" - -e "use ExtUtils::Mkbootstrap; Mkbootstrap(\'$(BASEEXT)\',\'$(BSLOADLIBS)\');" $(NOECHO) $(TOUCH) $(MMS$TARGET) @@@ -1790,19 -1790,19 +1791,19 @@@ install_site :: all pure_site_install d $(NOECHO) $(NOOP) install_ :: install_site -- $(NOECHO) Write Sys$Output "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site" ++ $(NOECHO) $(SAY) "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site" pure_install :: pure_$(INSTALLDIRS)_install $(NOECHO) $(NOOP) doc_install :: doc_$(INSTALLDIRS)_install -- $(NOECHO) Write Sys$Output "Appending installation info to $(INSTALLARCHLIB)perllocal.pod" ++ $(NOECHO) $(SAY) "Appending installation info to $(INSTALLARCHLIB)perllocal.pod" pure__install : pure_site_install -- $(NOECHO) Write Sys$Output "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site" ++ $(NOECHO) $(SAY) "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site" doc__install : doc_site_install -- $(NOECHO} Write Sys$Output "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site" ++ $(NOECHO} $(SAY) "INSTALLDIRS not defined, defaulting to INSTALLDIRS=site" # This hack brought to you by DCL's 255-character command line limit pure_perl_install :: @@@ -1866,9 -1866,9 +1867,16 @@@ uninstall :: uninstall_from_$(INSTALLDI uninstall_from_perldirs :: $(NOECHO) $(UNINSTALL) ].$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q[ ++ $(NOECHO) $(SAY) "Uninstall is now deprecated and makes no actual changes." ++ $(NOECHO) $(SAY) "Please check the list above carefully for errors, and manually remove" ++ $(NOECHO) $(SAY) "the appropriate files. Sorry for the inconvenience." uninstall_from_sitedirs :: -- $(NOECHO) $(UNINSTALL) ].$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist')."\n"; ++ $(NOECHO) $(UNINSTALL) ],$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist'),"\n",q[ ++ $(NOECHO) $(SAY) "Uninstall is now deprecated and makes no actual changes." ++ $(NOECHO) $(SAY) "Please check the list above carefully for errors, and manually remove" ++ $(NOECHO) $(SAY) "the appropriate files. Sorry for the inconvenience." ++]; join('',@m); } @@@ -1951,13 -1951,13 +1959,13 @@@ $(OBJECT) : $(FIRST_MAKEFILE # We take a very conservative approach here, but it\'s worth it. # We move $(MAKEFILE) to $(MAKEFILE)_old here to avoid gnu make looping. $(MAKEFILE) : Makefile.PL $(CONFIGDEP) -- $(NOECHO) Write Sys$Output "$(MAKEFILE) out-of-date with respect to $(MMS$SOURCE_LIST)" -- $(NOECHO) Write Sys$Output "Cleaning current config before rebuilding $(MAKEFILE) ..." ++ $(NOECHO) $(SAY) "$(MAKEFILE) out-of-date with respect to $(MMS$SOURCE_LIST)" ++ $(NOECHO) $(SAY) "Cleaning current config before rebuilding $(MAKEFILE) ..." - $(MV) $(MAKEFILE) $(MAKEFILE)_old - $(MMS) $(USEMAKEFILE)$(MAKEFILE)_old clean $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL ],join(' ',map(qq["$_"],@ARGV)),q[ -- $(NOECHO) Write Sys$Output "$(MAKEFILE) has been rebuilt." -- $(NOECHO) Write Sys$Output "Please run $(MMS) to build the extension." ++ $(NOECHO) $(SAY) "$(MAKEFILE) has been rebuilt." ++ $(NOECHO) $(SAY) "Please run $(MMS) to build the extension." ]; join('',@m); @@@ -1991,7 -1991,7 +1999,7 @@@ testdb :: testdb_\$(LINKTYPE push(@m, ' If F$Search("',$vmsdir,'$(MAKEFILE)").nes."" Then $(PERL) -e "chdir ',"'$vmsdir'", '; print `$(MMS) $(PASTHRU2) test`'."\n"); } -- push(@m, "\t\$(NOECHO) Write Sys\$Output \"No tests defined for \$(NAME) extension.\"\n") ++ push(@m, "\t\$(NOECHO) \$(SAY) \"No tests defined for \$(NAME) extension.\"\n") unless $tests or -f "test.pl" or @{$self->{DIR}}; push(@m, "\n"); @@@ -2074,7 -2074,7 +2082,7 @@@ MAP_TARGET = $targe unless ($self->{MAKEAPERL}) { push @m, q{ $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) -- $(NOECHO) Write Sys$Output "Writing ""$(MMS$TARGET)"" for this $(MAP_TARGET)" ++ $(NOECHO) $(SAY) "Writing ""$(MMS$TARGET)"" for this $(MAP_TARGET)" $(NOECHO) $(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \ Makefile.PL DIR=}, $dir, q{ \ MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \ @@@ -2226,10 -2226,10 +2234,10 @@@ $(MAP_SHRTARGET) : $(MAP_LIBPERL) $(MAP $(MAP_LINKCMD)/Shareable=$(MMS$TARGET) $(MAP_OPTS), $(MAP_EXTRA), $(MAP_LIBPERL) ',"${libperldir}Perlshr_Attr.Opt",' $(MAP_TARGET) : $(MAP_SHRTARGET) ',"${tmp}perlmain\$(OBJ_EXT) ${tmp}PerlShr.Opt",' $(MAP_LINKCMD) ',"${tmp}perlmain\$(OBJ_EXT)",', PerlShr.Opt/Option -- $(NOECHO) Write Sys$Output "To install the new ""$(MAP_TARGET)"" binary, say" -- $(NOECHO) Write Sys$Output " $(MMS)$(USEMAKEFILE)$(MAKEFILE) inst_perl $(USEMACROS)MAP_TARGET=$(MAP_TARGET)$(ENDMACRO)" -- $(NOECHO) Write Sys$Output "To remove the intermediate files, say -- $(NOECHO) Write Sys$Output " $(MMS)$(USEMAKEFILE)$(MAKEFILE) map_clean" ++ $(NOECHO) $(SAY) "To install the new ""$(MAP_TARGET)"" binary, say" ++ $(NOECHO) $(SAY) " $(MMS)$(USEMAKEFILE)$(MAKEFILE) inst_perl $(USEMACROS)MAP_TARGET=$(MAP_TARGET)$(ENDMACRO)" ++ $(NOECHO) $(SAY) "To remove the intermediate files, say ++ $(NOECHO) $(SAY) " $(MMS)$(USEMAKEFILE)$(MAKEFILE) map_clean" '; push @m,' ',"${tmp}perlmain.c",' : $(MAKEFILE) diff --cc lib/ExtUtils/xsubpp index 76e45d6,76e45d6..74e3250 --- a/lib/ExtUtils/xsubpp +++ b/lib/ExtUtils/xsubpp @@@ -75,11 -75,11 +75,14 @@@ perl(1), perlxs(1), perlxstut(1), perlx =cut --# Global Constants --$XSUBPP_version = "1.940"; require 5.002; ++use Cwd; use vars '$cplusplus'; ++# Global Constants ++$XSUBPP_version = "1.94001"; ++$Is_VMS = $^O eq 'VMS'; ++ sub Q ; $FH = 'File0000' ; @@@ -118,10 -118,10 +121,7 @@@ els or ($dir, $filename) = $ARGV[0] =~ m#(.*[>\]])(.*)# or ($dir, $filename) = ('.', $ARGV[0]); chdir($dir); --# Check for VMS; Config.pm may not be installed yet, but this routine --# is built into VMS perl --if (defined(&VMS::Filespec::vmsify)) { $Is_VMS = 1; $pwd = $ENV{DEFAULT}; } --else { $Is_VMS = 0; chomp($pwd = `pwd`); } ++$pwd = cwd(); ++ $IncludedFiles{$ARGV[0]} ; diff --cc lib/Test/Harness.pm index cca05b7,cca05b7..ddf80c9 --- a/lib/Test/Harness.pm +++ b/lib/Test/Harness.pm @@@ -48,8 -48,8 +48,12 @@@ sub runtests my $bad = 0; my $good = 0; my $total = @tests; ++ ++ # pass -I flags to children my $old5lib = $ENV{PERL5LIB}; -- local($ENV{'PERL5LIB'}) = join($Config{path_sep}, @INC); # pass -I flags to children ++ local($ENV{'PERL5LIB'}) = join($Config{path_sep}, @INC); ++ ++ if ($Is_VMS) { $switches =~ s/-(\S*[A-Z]\S*)/"-$1"/g } my $t_start = new Benchmark; while ($test = shift(@tests)) { @@@ -150,7 -150,7 +154,14 @@@ } my $t_total = timediff(new Benchmark, $t_start); -- if ($^O eq 'VMS' and defined($old5lib)) { $ENV{PERL5LIB} = $old5lib; } ++ if ($^O eq 'VMS') { ++ if (defined $old5lib) { ++ $ENV{PERL5LIB} = $old5lib; ++ } ++ else { ++ delete $ENV{PERL5LIB}; ++ } ++ } if ($bad == 0 && $totmax) { print "All tests successful.\n"; } elsif ($total==0){ diff --cc lib/diagnostics.pm index b00349f,05d1178..89d7467 --- a/lib/diagnostics.pm +++ b/lib/diagnostics.pm @@@ -506,7 -507,7 +507,7 @@@ sub unescape sub shorten { my $line = $_[0]; - if (length $line > 79) { - if (length $line > 79 and index $line, "\n" == -1) { ++ if (length($line) > 79 and index($line, "\n") == -1) { my $space_place = rindex($line, ' ', 79); if ($space_place != -1) { substr($line, $space_place, 1) = "\n\t"; diff --cc lib/lib.pm index 8ca28de,8ca28de..4d32f96 --- a/lib/lib.pm +++ b/lib/lib.pm @@@ -1,10 -1,10 +1,10 @@@ package lib; ++use vars qw(@ORIG_INC); use Config; my $archname = $Config{'archname'}; --@ORIG_INC = (); # (avoid typo warning) @ORIG_INC = @INC; # take a handy copy of 'original' value @@@ -15,13 -15,13 +15,16 @@@ sub import next unless defined($_); if ($_ eq '') { require Carp; -- Carp::carp("Empty compile time value given to use lib"); # at foo.pl line ... ++ Carp::carp("Empty compile time value given to use lib"); ++ # at foo.pl line ... } unshift(@INC, $_); # Put a corresponding archlib directory infront of $_ if it # looks like $_ has an archlib directory below it. -- unshift(@INC, "$_/$archname/$]") if -d "$_/$archname/$]/auto"; -- unshift(@INC, "$_/$archname") if -d "$_/$archname/auto"; ++ if (-d "$_/$archname") { ++ unshift(@INC, "$_/$archname") if -d "$_/$archname/auto"; ++ unshift(@INC, "$_/$archname/$]") if -d "$_/$archname/$]/auto"; ++ } } } @@@ -67,7 -67,7 +70,6 @@@ It is typically used to add extra direc that later C or C statements will find modules which are not located on perl's default search path. -- =head2 ADDING DIRECTORIES TO @INC The parameters to C are added to the start of the perl search @@@ -87,7 -87,7 +89,6 @@@ architecture specific directory and is If LIST includes both $dir and $dir/$archname then $dir/$archname will be added to @INC twice (if $dir/$archname/auto exists). -- =head2 DELETING DIRECTORIES FROM @INC You should normally only add directories to @INC. If you need to @@@ -113,7 -113,7 +114,6 @@@ architecture specific directory and is If LIST includes both $dir and $dir/$archname then $dir/$archname will be deleted from @INC twice (if $dir/$archname/auto exists). -- =head2 RESTORING ORIGINAL @INC When the lib module is first loaded it records the current value of @INC diff --cc lib/overload.pm index 0495459,2bbb639..0eb9702 --- a/lib/overload.pm +++ b/lib/overload.pm @@@ -161,6 -162,10 +162,10 @@@ C<$a+=7>, or C<$a++>. See L and C<*=> in all -the packages which inherit from C. ++Since overloading respects inheritance via the @ISA hierarchy, the ++above declaration would also trigger overloading of C<+> and C<*=> in ++all the packages which inherit from C. + =head2 Calling Conventions for Binary Operations The functions specified in the C directive are called @@@ -269,12 -274,46 +274,46 @@@ see L for an explanation of when a missing method can be autogenerated. + =head2 Inheritance and overloading + -There are two ways how inheritance interacts with overloading. ++Inheritance interacts with overloading in two ways. + + =over + + =item Strings as values of C directive + -If the value of ++If C in + + use overload key => value; + -directive is a string, it is interpreted as a method name. ++is a string, it is interpreted as a method name. + + =item Overloading of an operation is inherited by derived classes + -If any of ancestors is overloaded, so is the derived class. The set of -overloaded methods is the union of overloaded methods of all the -ancestors. If some method is overloaded in several ancestor, then ++Any class derived from an overloaded class is also overloaded. The ++set of overloaded methods is the union of overloaded methods of all ++the ancestors. If some method is overloaded in several ancestor, then + which description will be used is decided by the usual inheritance -rules: ++rules: + -If C inherits from C and C (in this order), and C -overloads C<+> by C<\&D::plus_sub>, C overloads C<+> by -C<"plus_meth">, then the subroutine C will be called to -implement operation C<+> for an object in package C. ++If C inherits from C and C (in this order), C overloads ++C<+> with C<\&D::plus_sub>, and C overloads C<+> by C<"plus_meth">, ++then the subroutine C will be called to implement ++operation C<+> for an object in package C. + + =back + -Note that since the value of C key is not a subroutine, its -inheritance is not governed by the above rules. Current implementation -is that the value of C in the first overloaded ancestor is -taken, but this may be subject to change. ++Note that since the value of the C key is not a subroutine, ++its inheritance is not governed by the above rules. In the current ++implementation, the value of C in the first overloaded ++ancestor is used, but this is accidental and subject to change. + =head1 SPECIAL SYMBOLS FOR C Three keys are recognized by Perl that are not covered by the above description. --=head2 Last Resort ++=head2 Last Resort C<"nomethod"> should be followed by a reference to a function of four parameters. If defined, it is called when the overloading mechanism @@@ -499,16 -546,20 +546,20 @@@ If an object belongs to a package usin flag. Thus the only speed penalty during arithmetic operations without overloading is the checking of this flag. --In fact, if C is not present, there is almost no overhead for --overloadable operations, so most programs should not suffer measurable --performance penalties. A considerable effort was made to minimize the overhead - when overload is used and the current operation is overloadable but - the arguments in question do not belong to packages using overload. When - in doubt, test your speed with C and without it. So far there - have been no reports of substantial speed degradation if Perl is compiled - with optimization turned on. - - There is no size penalty for data if overload is not used. -when overload is used in some package, but -the arguments in question do not belong to packages using overload. When -in doubt, test your speed with C and without it. So far there -have been no reports of substantial speed degradation if Perl is compiled -with optimization turned on. ++In fact, if C is not present, there is almost no overhead ++for overloadable operations, so most programs should not suffer ++measurable performance penalties. A considerable effort was made to ++minimize the overhead when overload is used in some package, but the ++arguments in question do not belong to packages using overload. When ++in doubt, test your speed with C and without it. So far ++there have been no reports of substantial speed degradation if Perl is ++compiled with optimization turned on. + + There is no size penalty for data if overload is not used. The only + size penalty if overload is used in some package is that I the + packages acquire a magic during the next Cing into the + package. This magic is three-words-long for packages without + overloading, and carries the cache tabel if the package is overloaded. Copying (C<$a=$b>) is shallow; however, a one-level-deep copying is carried out before any operation that can imply an assignment to the diff --cc op.c index e0393bf,e0393bf..2776dda --- a/op.c +++ b/op.c @@@ -212,7 -212,7 +212,7 @@@ pad_findlex(char *name, PADOFFSET newof SvNVX(sv) = (double)curcop->cop_seq; SvIVX(sv) = 999999999; /* A ref, intro immediately */ SvFLAGS(sv) |= SVf_FAKE; -- if (CvANON(compcv) || CvFORMAT(compcv)) { ++ if (CvANON(compcv) || SvTYPE(compcv) == SVt_PVFM) { /* "It's closures all the way down." */ CvCLONE_on(compcv); if (cv != startcv) { @@@ -223,7 -223,7 +223,7 @@@ if (CvANON(bcv)) CvCLONE_on(bcv); else { -- if (dowarn) ++ if (dowarn && !CvUNIQUE(cv)) warn( "Variable \"%s\" may be unavailable", name); @@@ -2637,8 -2637,8 +2637,10 @@@ OP *block if (expr) { if (once && expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv)) return block; /* do {} while 0 does once */ -- else if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB) -- expr = newASSIGNOP(0, newSVREF(newGVOP(OP_GV, 0, defgv)), 0, expr); ++ if (expr->op_type == OP_READLINE || expr->op_type == OP_GLOB) { ++ expr = newUNOP(OP_DEFINED, 0, ++ newASSIGNOP(0, newSVREF(newGVOP(OP_GV, 0, defgv)), 0, expr) ); ++ } } listop = append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0)); diff --cc os2/diff.configure index d19bf4a,d19bf4a..863bdf5 --- a/os2/diff.configure +++ b/os2/diff.configure @@@ -1,6 -1,6 +1,6 @@@ ----- perl5.003_06/Configure Fri Oct 4 11:08:50 1996 --+++ Configure Wed Oct 9 17:53:14 1996 --@@ -1451,7 +1451,7 @@ ++--- Configure.dist Fri Jan 24 10:22:24 1997 +++++ Configure Fri Jan 24 10:22:27 1997 ++@@ -1465,7 +1465,7 @@ *) echo "I don't know where '$file' is, and my life depends on it." >&4 echo "Go find a public domain implementation or fix your PATH setting!" >&4 @@@ -9,7 -9,7 +9,7 @@@ ;; esac done --@@ -1460,7 +1460,9 @@ ++@@ -1474,7 +1474,9 @@ say=offhand for file in $trylist; do xxx=`./loc $file $file $pth` @@@ -20,7 -20,7 +20,7 @@@ eval _$file=$xxx case "$xxx" in /*) --@@ -3091,7 +3093,7 @@ ++@@ -3161,7 +3163,7 @@ exit(0); } EOM @@@ -29,7 -29,7 +29,7 @@@ gccversion=`./gccvers` case "$gccversion" in '') echo "You are not using GNU cc." ;; --@@ -3275,6 +3277,12 @@ ++@@ -3364,6 +3366,12 @@ *"-l$thislib "*);; *) dflt="$dflt -l$thislib";; esac @@@ -42,7 -42,7 +42,7 @@@ else echo "No -l$thislib." fi --@@ -3387,7 +3395,7 @@ ++@@ -3912,7 +3920,7 @@ esac ;; esac @@@ -51,7 -51,7 +51,7 @@@ case "$libs" in '') ;; *) for thislib in $libs; do --@@ -3583,6 +3593,10 @@ ++@@ -4114,6 +4122,10 @@ eval $xscan;\ $contains '^fprintf$' libc.list >/dev/null 2>&1; then eval $xrun @@@ -62,7 -62,7 +62,7 @@@ else nm -p $* 2>/dev/null >libc.tmp $grep fprintf libc.tmp > libc.ptf --@@ -3593,23 +3607,33 @@ ++@@ -4124,23 +4136,33 @@ eval $xrun else echo " " @@@ -103,7 -103,7 +103,7 @@@ done echo "Ok." >&4 else --@@ -5606,7 +5630,7 @@ ++@@ -5738,7 +5760,7 @@ exit(0); } EOCP @@@ -112,7 -112,7 +112,7 @@@ intsize=`./try` echo "Your integers are $intsize bytes long." else --@@ -5686,7 +5710,7 @@ ++@@ -5818,7 +5840,7 @@ exit(result); } EOCP @@@ -121,7 -121,7 +121,7 @@@ ./try yyy=$? else --@@ -5767,7 +5791,7 @@ ++@@ -5899,7 +5921,7 @@ } EOCP @@@ -130,7 -130,7 +130,7 @@@ ./try castflags=$? else --@@ -5806,7 +5830,7 @@ ++@@ -5938,7 +5960,7 @@ exit((unsigned long)vsprintf(buf,"%s",args) > 10L); } EOF @@@ -139,7 -139,7 +139,7 @@@ echo "Your vsprintf() returns (int)." >&4 val2="$undef" else --@@ -6148,7 +6172,7 @@ ++@@ -6283,7 +6305,7 @@ EOCP : check sys/file.h first to get FREAD on Sun if $test `./findhdr sys/file.h` && \ @@@ -148,7 -148,7 +148,7 @@@ h_sysfile=true; echo " defines the O_* constants..." >&4 if ./open3; then --@@ -6159,7 +6183,7 @@ ++@@ -6294,7 +6316,7 @@ val="$undef" fi elif $test `./findhdr fcntl.h` && \ @@@ -157,7 -157,7 +157,7 @@@ h_fcntl=true; echo " defines the O_* constants..." >&4 if ./open3; then --@@ -6642,7 +6666,7 @@ ++@@ -6800,7 +6822,7 @@ y*|true) usemymalloc='y' mallocsrc='malloc.c' @@@ -166,7 -166,7 +166,7 @@@ d_mymalloc="$define" case "$libs" in *-lmalloc*) --@@ -7867,7 +7891,7 @@ ++@@ -8053,7 +8075,7 @@ printf("%d\n", (char *)&try.bar - (char *)&try.foo); } EOCP @@@ -175,7 -175,7 +175,7 @@@ dflt=`./try` else dflt='8' --@@ -7915,7 +7939,7 @@ ++@@ -8101,7 +8123,7 @@ } EOCP xxx_prompt=y @@@ -184,7 -184,7 +184,7 @@@ dflt=`./try` case "$dflt" in [1-4][1-4][1-4][1-4]|12345678|87654321) --@@ -8337,7 +8361,7 @@ ++@@ -8523,7 +8545,7 @@ printf("%d\n",i); } EOCP @@@ -193,7 -193,7 +193,7 @@@ dflt=`try` else dflt='?' --@@ -8447,7 +8471,7 @@ ++@@ -8633,7 +8655,7 @@ '') $echo $n ".$c" if $cc $ccflags \ $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \ @@@ -202,7 -202,7 +202,7 @@@ set X $i_time $i_systime $i_systimek $sysselect $s_timeval shift flags="$*" --@@ -8517,7 +8541,7 @@ ++@@ -8702,7 +8724,7 @@ #endif } EOCP @@@ -211,7 -211,7 +211,7 @@@ d_fds_bits="$define" d_fd_set="$define" echo "Well, your system knows about the normal fd_set typedef..." >&4 --@@ -8534,7 +8558,7 @@ ++@@ -8719,7 +8741,7 @@ $cat <<'EOM' Hmm, your compiler has some difficulty with fd_set. Checking further... EOM @@@ -220,7 -220,7 +220,7 @@@ d_fds_bits="$undef" d_fd_set="$define" echo "Well, your system has some sort of fd_set available..." >&4 --@@ -9272,7 +9296,7 @@ ++@@ -9458,7 +9480,7 @@ else echo "false" fi @@@ -229,7 -229,7 +229,7 @@@ EOP chmod +x varargs --@@ -9596,7 +9620,7 @@ ++@@ -9785,7 +9807,7 @@ echo " " echo "Stripping down executable paths..." >&4 for file in $loclist $trylist; do diff --cc os2/os2ish.h index ade4199,ade4199..7cf56fe --- a/os2/os2ish.h +++ b/os2/os2ish.h @@@ -140,7 -140,7 +140,6 @@@ void *emx_realloc (void *, size_t) /* This guy is needed for quick stdstd */ #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE) --# define _filbuf _fill /* Perl uses ungetc only with successful return */ # define ungetc(c,fp) \ (FILE_ptr(fp) > FILE_base(fp) && c == (int)*(FILE_ptr(fp) - 1) \ diff --cc patchlevel.h index d43d803,d43d803..2603bc1 --- a/patchlevel.h +++ b/patchlevel.h @@@ -1,5 -1,5 +1,5 @@@ #define PATCHLEVEL 3 --#define SUBVERSION 22 ++#define SUBVERSION 23 /* local_patches -- list of locally applied less-than-subversion patches. diff --cc perl.c index d6f055d,d6f055d..9b9265c --- a/perl.c +++ b/perl.c @@@ -59,7 -59,7 +59,7 @@@ dEXTCONST char rcsid[] = "perl.c\nPatc static void find_beginning _((void)); static void forbid_setid _((char *)); --static void incpush _((char *)); ++static void incpush _((char *, int)); static void init_ids _((void)); static void init_debugger _((void)); static void init_lexer _((void)); @@@ -561,10 -561,10 +561,10 @@@ setuid perl scripts securely.\n") sv_catpv(sv,s); sv_catpv(sv," "); if (*++s) { -- av_push(GvAVn(incgv),newSVpv(s,0)); ++ incpush(s, TRUE); } else if (argv[1]) { -- av_push(GvAVn(incgv),newSVpv(argv[1],0)); ++ incpush(argv[1], TRUE); sv_catpv(sv,argv[1]); argc--,argv++; sv_catpv(sv," "); @@@ -881,7 -881,7 +881,7 @@@ I32 create { GV* gv = gv_fetchpv(name, create, SVt_PVCV); if (create && !GvCVu(gv)) -- return newSUB(start_subparse(0), ++ return newSUB(start_subparse(FALSE, 0), newSVOP(OP_CONST, 0, newSVpv(name,0)), Nullop, Nullop); @@@ -1190,47 -1190,47 +1190,6 @@@ I32 namlen sv_magic(GvSV(gv), (SV*)gv, 0, name, namlen); } --#if defined(DOSISH) --# define PERLLIB_SEP ';' --#else --# if defined(VMS) --# define PERLLIB_SEP '|' --# else --# define PERLLIB_SEP ':' --# endif --#endif --#ifndef PERLLIB_MANGLE --# define PERLLIB_MANGLE(s,n) (s) --#endif -- --static void --incpush(p) --char *p; --{ -- char *s; -- -- if (!p) -- return; -- -- /* Break at all separators */ -- while (*p) { -- /* First, skip any consecutive separators */ -- while ( *p == PERLLIB_SEP ) { -- /* Uncomment the next line for PATH semantics */ -- /* av_push(GvAVn(incgv), newSVpv(".", 1)); */ -- p++; -- } -- if ( (s = strchr(p, PERLLIB_SEP)) != Nullch ) { -- av_push(GvAVn(incgv), newSVpv(PERLLIB_MANGLE(p, (STRLEN)(s - p)), -- (STRLEN)(s - p))); -- p = s + 1; -- } else { -- av_push(GvAVn(incgv), newSVpv(PERLLIB_MANGLE(p, 0), 0)); -- break; -- } -- } --} -- static void usage(name) /* XXX move this out into a module ? */ char *name; @@@ -1346,9 -1346,9 +1305,11 @@@ char *s case 'I': forbid_setid("-I"); if (*++s) { -- char *e; ++ char *e, *p; for (e = s; *e && !isSPACE(*e); e++) ; -- av_push(GvAVn(incgv),newSVpv(s,e-s)); ++ p = savepvn(s, e-s); ++ incpush(p, TRUE); ++ Safefree(p); if (*e) return e; } @@@ -1444,7 -1444,7 +1405,6 @@@ #endif printf("\n\nCopyright 1987-1997, Larry Wall\n"); -- printf("\n\t+ suidperl security patch"); #ifdef MSDOS printf("\n\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n"); #endif @@@ -2298,9 -2298,9 +2258,9 @@@ init_perllib( #ifndef VMS s = getenv("PERL5LIB"); if (s) -- incpush(s); ++ incpush(s, TRUE); else -- incpush(getenv("PERLLIB")); ++ incpush(getenv("PERLLIB"), FALSE); #else /* VMS */ /* Treat PERL5?LIB as a possible search list logical name -- the * "natural" VMS idiom for a Unix path string. We allow each @@@ -2309,9 -2309,9 +2269,9 @@@ char buf[256]; int idx = 0; if (my_trnlnm("PERL5LIB",buf,0)) -- do { incpush(buf); } while (my_trnlnm("PERL5LIB",buf,++idx)); ++ do { incpush(buf,TRUE); } while (my_trnlnm("PERL5LIB",buf,++idx)); else -- while (my_trnlnm("PERLLIB",buf,idx++)) incpush(buf); ++ while (my_trnlnm("PERLLIB",buf,idx++)) incpush(buf,FALSE); #endif /* VMS */ } @@@ -2319,29 -2319,29 +2279,116 @@@ ARCHLIB PRIVLIB SITEARCH SITELIB and OLDARCHLIB */ #ifdef APPLLIB_EXP -- incpush(APPLLIB_EXP); ++ incpush(APPLLIB_EXP, FALSE); #endif #ifdef ARCHLIB_EXP -- incpush(ARCHLIB_EXP); ++ incpush(ARCHLIB_EXP, FALSE); #endif #ifndef PRIVLIB_EXP #define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl" #endif -- incpush(PRIVLIB_EXP); ++ incpush(PRIVLIB_EXP, FALSE); #ifdef SITEARCH_EXP -- incpush(SITEARCH_EXP); ++ incpush(SITEARCH_EXP, FALSE); #endif #ifdef SITELIB_EXP -- incpush(SITELIB_EXP); ++ incpush(SITELIB_EXP, FALSE); #endif #ifdef OLDARCHLIB_EXP /* 5.00[01] compatibility */ -- incpush(OLDARCHLIB_EXP); ++ incpush(OLDARCHLIB_EXP, FALSE); #endif if (!tainting) -- incpush("."); ++ incpush(".", FALSE); ++} ++ ++#if defined(DOSISH) ++# define PERLLIB_SEP ';' ++#else ++# if defined(VMS) ++# define PERLLIB_SEP '|' ++# else ++# define PERLLIB_SEP ':' ++# endif ++#endif ++#ifndef PERLLIB_MANGLE ++# define PERLLIB_MANGLE(s,n) (s) ++#endif ++ ++static void ++incpush(p, addsubdirs) ++char *p; ++int addsubdirs; ++{ ++ SV *subdir = Nullsv; ++ static char *archpat_auto; ++ ++ if (!p) ++ return; ++ ++ if (addsubdirs) { ++ subdir = newSV(0); ++ if (!archpat_auto) { ++ STRLEN len = (sizeof(ARCHNAME) + strlen(patchlevel) ++ + sizeof("//auto")); ++ New(55, archpat_auto, len, char); ++ sprintf(archpat_auto, "/%s/%s/auto", ARCHNAME, patchlevel); ++ } ++ } ++ ++ /* Break at all separators */ ++ while (p && *p) { ++ SV *libdir = newSV(0); ++ char *s; ++ ++ /* skip any consecutive separators */ ++ while ( *p == PERLLIB_SEP ) { ++ /* Uncomment the next line for PATH semantics */ ++ /* av_push(GvAVn(incgv), newSVpv(".", 1)); */ ++ p++; ++ } ++ ++ if ( (s = strchr(p, PERLLIB_SEP)) != Nullch ) { ++ sv_setpvn(libdir, PERLLIB_MANGLE(p, (STRLEN)(s - p)), ++ (STRLEN)(s - p)); ++ p = s + 1; ++ } ++ else { ++ sv_setpv(libdir, PERLLIB_MANGLE(p, 0)); ++ p = Nullch; /* break out */ ++ } ++ ++ /* ++ * BEFORE pushing libdir onto @INC we may first push version- and ++ * archname-specific sub-directories. ++ */ ++ if (addsubdirs) { ++ struct stat tmpstatbuf; ++ ++ /* .../archname/version if -d .../archname/auto */ ++ sv_setsv(subdir, libdir); ++ sv_catpv(subdir, archpat_auto); ++ if (Stat(SvPVX(subdir), &tmpstatbuf) >= 0 && ++ S_ISDIR(tmpstatbuf.st_mode)) ++ av_push(GvAVn(incgv), ++ newSVpv(SvPVX(subdir), SvCUR(subdir) - sizeof "auto")); ++ ++ /* .../archname/version if -d .../archname/version/auto */ ++ sv_insert(subdir, SvCUR(libdir) + sizeof(ARCHNAME), ++ strlen(patchlevel) + 1, "", 0); ++ if (Stat(SvPVX(subdir), &tmpstatbuf) >= 0 && ++ S_ISDIR(tmpstatbuf.st_mode)) ++ av_push(GvAVn(incgv), ++ newSVpv(SvPVX(subdir), SvCUR(subdir) - sizeof "auto")); ++ } ++ ++ /* finally push this lib directory on the end of @INC */ ++ av_push(GvAVn(incgv), libdir); ++ } ++ ++ SvREFCNT_dec(subdir); } void diff --cc perly.c index 6de75e5,6de75e5..8480949 --- a/perly.c +++ b/perly.c @@@ -1706,15 -1706,15 +1706,15 @@@ case 52 break; case 53: #line 280 "perly.y" --{ yyval.ival = start_subparse(0); } ++{ yyval.ival = start_subparse(FALSE, 0); } break; case 54: #line 284 "perly.y" --{ yyval.ival = start_subparse(CVf_ANON); } ++{ yyval.ival = start_subparse(FALSE, CVf_ANON); } break; case 55: #line 288 "perly.y" --{ yyval.ival = start_subparse(CVf_FORMAT); } ++{ yyval.ival = start_subparse(TRUE, 0); } break; case 56: #line 291 "perly.y" diff --cc perly.y index 608f9e0,608f9e0..5de74ff --- a/perly.y +++ b/perly.y @@@ -277,15 -277,15 +277,15 @@@ subrout : SUB startsub subname proto su ; startsub: /* NULL */ /* start a regular subroutine scope */ -- { $$ = start_subparse(0); } ++ { $$ = start_subparse(FALSE, 0); } ; startanonsub: /* NULL */ /* start an anonymous subroutine scope */ -- { $$ = start_subparse(CVf_ANON); } ++ { $$ = start_subparse(FALSE, CVf_ANON); } ; startformsub: /* NULL */ /* start a format subroutine scope */ -- { $$ = start_subparse(CVf_FORMAT); } ++ { $$ = start_subparse(TRUE, 0); } ; subname : WORD { char *name = SvPVx(((SVOP*)$1)->op_sv, na); diff --cc plan9/config.plan9 index b10c758,b10c758..a900df3 --- a/plan9/config.plan9 +++ b/plan9/config.plan9 @@@ -51,6 -51,6 +51,12 @@@ */ #define BIN "/_P9P_OBJTYPE/bin" /* */ ++/* BINCOMPAT3: ++ * This symbol, if defined, indicates that Perl 5.004 should be ++ * binary-compatible with Perl 5.003. ++ */ ++#undef BINCOMPAT3 /**/ ++ /* CPPSTDIN: * This symbol contains the first part of the string which will invoke * the C preprocessor on the standard input and produce to standard @@@ -298,6 -298,6 +304,15 @@@ */ #undef HAS_GETPRIORITY /**/ ++/* HAS_GETTIMEOFDAY: ++ * This symbol, if defined, indicates that the gettimeofday() system ++ * call is available for a sub-second accuracy clock. Usually, the file ++ * needs to be included (see I_SYS_RESOURCE). ++ * The type "Timeval" should be used to refer to "struct timeval". ++ */ ++#define HAS_GETTIMEOFDAY /**/ ++#define Timeval struct timeval /* Structure used by gettimeofday() */ /* config-skip */ ++ /* HAS_HTONL: * This symbol, if defined, indicates that the htonl() routine (and * friends htons() ntohl() ntohs()) are available to do network @@@ -326,6 -326,6 +341,13 @@@ #define HAS_NTOHS /**/ ++/* HAS_INET_ATON: ++ * This symbol, if defined, indicates to the C program that the ++ * inet_aton() function is available to parse IP address "dotted-quad" ++ * strings. ++ */ ++#undef HAS_INET_ATON /**/ ++ /* HAS_ISASCII: * This manifest constant lets the C program know that isascii * is available. @@@ -484,6 -484,6 +506,13 @@@ */ #define HAS_READDIR /**/ ++/* HAS_SANE_MEMCMP: ++ * 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 /**/ ++ /* HAS_SEEKDIR: * This symbol, if defined, indicates that the seekdir routine is * available. You may have to include . See I_DIRENT. @@@ -693,6 -693,6 +722,24 @@@ #define HAS_SOCKET /**/ #define HAS_SOCKETPAIR /**/ ++/* HAS_STRTOD: ++ * This symbol, if defined, indicates that the strtod routine is ++ * available to provide better numeric string conversion than atof(). ++ */ ++#define HAS_STRTOD /**/ ++ ++/* HAS_STRTOL: ++ * This symbol, if defined, indicates that the strtol routine is available ++ * to provide better numeric string conversion than atoi() and friends. ++ */ ++#define HAS_STRTOL /**/ ++ ++/* HAS_STRTOUL: ++ * This symbol, if defined, indicates that the strtoul routine is ++ * available to provide conversion of strings to unsigned long. ++ */ ++#define HAS_STRTOUL /**/ ++ /* USE_STAT_BLOCKS: * This symbol is defined if this system has a stat structure declaring * st_blksize and st_blocks. @@@ -759,15 -759,15 +806,6 @@@ #define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base) #endif --/* FILE_filbuf: -- * This macro is used to access the internal stdio _filbuf function -- * (or equivalent), if STDIO_CNT_LVALUE and STDIO_PTR_LVALUE -- * are defined. It is typically either _filbuf or __filbuf. -- * This macro will only be defined if both STDIO_CNT_LVALUE and -- * STDIO_PTR_LVALUE are defined. -- */ --#undef FILE_filbuf -- /* HAS_STRCHR: * This symbol is defined to indicate that the strchr()/strrchr() * functions are available for string searching. If not, try the @@@ -1347,6 -1347,6 +1385,14 @@@ #define ARCHLIB_EXP "/_P9P_OBJTYPE/lib/perl/_P9P_VERSION" #define ARCHLIB "/_P9P_OBJTYPE/lib/perl/_P9P_VERSION" ++/* ARCHNAME: ++ * This symbol holds a string representing the architecture name. ++ * It may be used to construct an architecture-dependant pathname ++ * where library files may be held under a private library, for ++ * instance. ++ */ ++#define ARCHNAME "plan9__P9P_OBJTYPE" /**/ ++ /* BYTEORDER: * This symbol hold the hexadecimal constant defined in byteorder, * i.e. 0x1234 or 0x4321, etc... diff --cc plan9/mkfile index e3102f5,e3102f5..e56aa3c --- a/plan9/mkfile +++ b/plan9/mkfile @@@ -26,8 -26,8 +26,8 @@@ libpods = ${podnames:%=pod/%.pod perlpods = $libpods --extensions = IO Socket Opcode DynaLoader Fcntl FileHandle POSIX --ext_xs = IO.xs Socket.xs Opcode.xs dl_none.xs Fcntl.xs FileHandle.xs POSIX.xs ++extensions = IO Socket Opcode DynaLoader Fcntl POSIX ++ext_xs = IO.xs Socket.xs Opcode.xs dl_none.xs Fcntl.xs POSIX.xs ext_c = ${ext_xs:%.xs=%.c} ext_obj = ${ext_xs:%.xs=%.$O} @@@ -98,10 -98,10 +98,6 @@@ Fcntl.c: miniperl ext/Fcntl/Fcntl.x ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/Fcntl/Fcntl.xs > $target cp ext/Fcntl/Fcntl.pm $privlib --FileHandle.c: miniperl ext/FileHandle/FileHandle.xs -- ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/FileHandle/FileHandle.xs > $target -- cp ext/FileHandle/FileHandle.pm $privlib -- POSIX.c: miniperl ext/POSIX/POSIX.xs ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/POSIX/POSIX.xs > $target cp ext/POSIX/POSIX.pm $privlib diff --cc pod/Makefile index cd01028,cd01028..cf1e7a4 --- a/pod/Makefile +++ b/pod/Makefile @@@ -5,7 -5,7 +5,7 @@@ PERL = ../miniper POD = \ perl.pod \ -- perlnews.pod \ ++ perldelta.pod \ perldata.pod \ perlsyn.pod \ perlop.pod \ @@@ -42,7 -42,7 +42,7 @@@ MAN = \ perl.man \ -- perlnews.man \ ++ perldelta.man \ perldata.man \ perlsyn.man \ perlop.man \ @@@ -79,7 -79,7 +79,7 @@@ HTML = \ perl.html \ -- perlnews.html \ ++ perldelta.html \ perldata.html \ perlsyn.html \ perlop.html \ @@@ -116,7 -116,7 +116,7 @@@ TEX = \ perl.tex \ -- perlnews.tex \ ++ perldelta.tex \ perldata.tex \ perlsyn.tex \ perlop.tex \ diff --cc pod/buildtoc index da45856,da45856..b0e514e --- a/pod/buildtoc +++ b/pod/buildtoc @@@ -5,11 -5,11 +5,11 @@@ use Text::Wrap sub output ($); @pods = qw( -- perl perlnews perldata perlsyn perlop perlre perlrun perlfunc ++ perl perldelta perldata perlsyn perlop perlre perlrun perlfunc perlvar perlsub perlmod perlform perllocale perlref perldsc perllol perltoot perlobj perltie perlbot perlipc perldebug -- perldiag perlsec perltrap perlstyle perlpod perlbook -- perlembed perlapio perlxs perlxstut perlguts perlcall ++ perldiag perlsec perltrap perlstyle perlpod perlbook perlembed ++ perlapio perlxs perlxstut perlguts perlcall ); for (@pods) { s/$/.pod/ } diff --cc pod/checkpods.PL index c4721a6,c4721a6..4bec4da --- a/pod/checkpods.PL +++ b/pod/checkpods.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; diff --cc pod/perl.pod index 7ac7094,7ac7094..dcab07a --- a/pod/perl.pod +++ b/pod/perl.pod @@@ -19,7 -19,7 +19,7 @@@ For ease of access, the Perl manual ha of sections: perl Perl overview (this section) -- perlnews Perl news about changes from previous version ++ perldelta Perl changes since previous version perldata Perl data structures perlsyn Perl syntax diff --cc pod/perldebug.pod index 77502f2,8e595f5..0c61b74 --- a/pod/perldebug.pod +++ b/pod/perldebug.pod @@@ -105,10 -110,12 +110,12 @@@ Single step. Executes until it reache statement, descending into subroutine calls. If an expression is supplied that includes function calls, it too will be single-stepped. - =item n + =item n [expr] Next. Executes over subroutine calls, until it reaches the beginning - of the next statement. -of the next statement. If an expression is -supplied that includes function calls, it too will be executed with -stops before each statement. ++of the next statement. If an expression is supplied that includes ++function calls, those functions will be executed with stops before ++each statement. =item ECRE @@@ -129,7 -136,7 +136,7 @@@ List C lines starting at C =item l min-max - List lines C through C. -List lines C through C. C is synonymous to C<->. ++List lines C through C. C is synonymous to C<->. =item l line @@@ -154,7 -161,9 +161,9 @@@ print it out =item f filename - Switch to viewing a different file. -Switch to viewing a different file or eval statement. If C ++Switch to viewing a different file or eval statement. If C + is not a full filename as found in values of %INC, it is considered as + a regexp. =item /pattern/ @@@ -235,7 -244,13 +244,13 @@@ Set breakpoint at first line of subrout =item b load filename - Set breakpoint at the first executed line of the file. -Set breakpoint at the first executed line of the file. Filename should ++Set breakpoint at the first executed line of the file. Filename should + be a full name as found in values of %INC. + + =item b compile subname + + Sets breakpoint at the first statement executed after the subroutine + is compiled. =item d [line] @@@ -288,19 -303,26 +303,26 @@@ C<$ENV{PAGER}> will be used Run Tk while prompting (with ReadLine). - =item signalLevel, warnLevel, dieLevel + =item C, C, C + -Level of verbosity. By default the debugger is in a sane verbose mode, ++Level of verbosity. By default the debugger is in a sane verbose mode, + thus it will print backtraces on all the warnings and die-messages + which are going to be printed out, and will print a message when + interesting uncaught signals arrive. - Level of verbosity. -To disable this behaviour, set these values to 0. If C is 2, ++To disable this behaviour, set these values to 0. If C is 2, + then the messages which will be caught by surrounding C are also + printed. - =item AutoTrace + =item C - Where to print all the breakable points in the executed program - (similar to C command, but can be put into C). + Trace mode (similar to C command, but can be put into + C). - =item LineInfo + =item C - File or pipe to print line number info to. If it is a - pipe, then a short, "emacs like" message is used. + File or pipe to print line number info to. If it is a pipe (say, + C<|visual_perl_db>), then a short, "emacs like" message is used. =item C @@@ -317,7 -339,14 +339,14 @@@ C is false, messages are pri on exit may be useful if inter(di)spersed with other messages.) If C, arguments to functions are printed as well as the - context and caller info. -context and caller info. If C, overloaded C and -Cd C are enabled on the printed arguments. The length at ++context and caller info. If C, overloaded C and ++Cd C are enabled on the printed arguments. The length at + which the argument list is truncated is governed by the next option: + + =item C + + length at which the argument list is truncated when C option's + bit 4 is set. =back @@@ -330,11 -359,12 +359,12 @@@ commands Print only first N elements ('' for all). - =item compactDump, veryCompact + =item C, C - Change style of array and hash dump. -Change style of array and hash dump. If C, short array ++Change style of array and hash dump. If C, short array + may be printed on one line. - =item globPrint + =item C Whether to print contents of globs. @@@ -346,9 -376,17 +376,17 @@@ Dump arrays holding debugged files Dump symbol tables of packages. - =item quote, HighBit, undefPrint + =item C, C, C + -Change style of string dump. Default value of C is C, one ++Change style of string dump. Default value of C is C, one + can enable either double-quotish dump, or single-quotish by setting it -to C<"> or C<'>. By default, characters with high bit set are printed ++to C<"> or C<'>. By default, characters with high bit set are printed + I. + + =item C - Change style of string dump. -I rudimentally per-package memory usage dump. Calculates total ++I rudimentally per-package memory usage dump. Calculates total + size of strings in variables in the package. =back @@@ -370,16 -408,9 +408,9 @@@ C to something "interactive"! The TTY to use for debugging I/O. - =item noTTY - - If set, goes in C mode. On interrupt if TTY is not set uses the - value of C or "/tmp/perldbtty$$" to find TTY using - C. Current variant is to have the name of TTY in this - file. - =item C --If set, goes in C mode, and would not connect to a TTY. If ++If set, goes in C mode, and would not connect to a TTY. If interrupt (or if control goes to debugger via explicit setting of $DB::signal or $DB::single from the Perl script), connects to a TTY specified by the C option at startup, or to a TTY found at @@@ -387,7 -418,7 +418,7 @@@ runtime using C modul This module should implement a method C which returns an object with two methods: C and C, returning two filehandles to use --for debugging input and output correspondingly. Method C may ++for debugging input and output correspondingly. Method C may inspect an argument which is a value of C<$ENV{PERLDB_NOTTY}> at startup, or is C<"/tmp/perldbtty$$"> otherwise. @@@ -409,7 -440,7 +440,7 @@@ Here's an example of using the C<$ENV{P will run the script C without human intervention, printing out the call tree with entry and exit points. Note that C is --equivalent to C. Note also that at the moment when ++equivalent to C. Note also that at the moment when this documentation was written all the options to the debugger could be uniquely abbreviated by the first letter (with exception of C options). @@@ -424,13 -455,13 +455,13 @@@ interrupt it, you would better reset C< "interactive"!) - $ env "PERLDB_OPTS=R=0 TTY=/dev/ttyc" perl -d myprogram + $ env "PERLDB_OPTS=R=0 TTY=/dev/ttyc" perl -d myprogram may be useful for debugging a program which uses C --itself. Do not forget detach shell from the TTY in the window which ++itself. Do not forget detach shell from the TTY in the window which corresponds to F, say, by issuing a command like - $ sleep 1000000 + $ sleep 1000000 See L<"Debugger Internals"> below for more details. @@@ -500,7 -531,7 +531,7 @@@ Quit. ("quit" doesn't work for this. to exit the debugger, though typing C twice may do it too. Set an Cption C to 0 if you want to be able to I the end the script. You may also need to set C<$finished> to 0 at ++off> the end the script. You may also need to set C<$finished> to 0 at some moment if you want to step through global destruction. =item R @@@ -604,10 -809,19 +809,19 @@@ just typed the C command, whereas a command. The C<$DB::trace> variable should be set to 1 to simulate having typed the C command. + Another way to debug compile-time code is to start debugger, set a + breakpoint on I of some module thusly + + DB<7> b load f:/perllib/lib/Carp.pm + Will stop on load of `f:/perllib/lib/Carp.pm'. + -and restart debugger by C command (if possible). One can use C command (if possible). One can use C for the same purpose. + =head2 Debugger Customization Most probably you not want to modify the debugger, it contains enough --hooks to satisfy most needs. You may change the behaviour of debugger ++hooks to satisfy most needs. You may change the behaviour of debugger from the debugger itself, using Cptions, from the command line via C environment variable, and from I. @@@ -624,10 -838,10 +838,10 @@@ One changes options from F<.perldb> fil parse_options("NonStop=1 LineInfo=db.out AutoTrace=1 frame=2"); --(the code is executed in the package C). Note that F<.perldb> is --processed before processing C. If F<.perldb> defines the ++(the code is executed in the package C). Note that F<.perldb> is ++processed before processing C. If F<.perldb> defines the subroutine C, it is called after all the debugger --initialization ends. F<.perldb> may be contained in the current ++initialization ends. F<.perldb> may be contained in the current directory, or in the C/C directory. If you want to modify the debugger, copy F from the Perl @@@ -701,48 -919,48 +919,48 @@@ application =item * The array C<@{"_<$filename"}> is the line-by-line contents of --$filename for all the compiled files. Same for Ced strings which --contain subroutines, or which are currently executed. The C<$filename> ++$filename for all the compiled files. Same for Ced strings which ++contain subroutines, or which are currently executed. The C<$filename> for Ced strings looks like C<(eval 34)>. =item * The hash C<%{"_<$filename"}> contains breakpoints and action (it is keyed by line number), and individual entries are settable (as opposed --to the whole hash). Only true/false is important to Perl, though the ++to the whole hash). Only true/false is important to Perl, though the values used by F have the form --C<"$break_condition\0$action">. Values are magical in numeric context: ++C<"$break_condition\0$action">. Values are magical in numeric context: they are zeros if the line is not breakable. Same for evaluated strings which contain subroutines, or which are --currently executed. The C<$filename> for Ced strings looks like ++currently executed. The C<$filename> for Ced strings looks like C<(eval 34)>. =item * --The scalar C<${"_<$filename"}> contains C<"_<$filename">. Same for ++The scalar C<${"_<$filename"}> contains C<"_<$filename">. Same for evaluated strings which contain subroutines, or which are currently --executed. The C<$filename> for Ced strings looks like C<(eval ++executed. The C<$filename> for Ced strings looks like C<(eval 34)>. =item * After each Cd file is compiled, but before it is executed, C is called (if subroutine --C exists). Here the $filename is the expanded name of ++C exists). Here the $filename is the expanded name of the Cd file (as found in values of C<%INC>). =item * After each subroutine C is compiled existence of --C<$DB::postponed{subname}> is checked. If this key exists, ++C<$DB::postponed{subname}> is checked. If this key exists, C is called (if subroutine C exists). =item * A hash C<%DB::sub> is maintained, with keys being subroutine names, --values having the form C. C has ++values having the form C. C has the form C<(eval 31)> for subroutines defined inside Cs. =item * @@@ -764,10 -982,42 +982,42 @@@ in the package C. =back Note that no subroutine call is possible until C<&DB::sub> is defined - (for subroutines outside of package C). (In fact, for the - standard debugger the same is true if C<$DB::deep> (how many levels of - recursion deep into the debugger you can go before a mandatory break) - is not defined.) + (for subroutines outside of package C). (This restriction is + recently lifted.) + + (In fact, for the standard debugger the same is true if C<$DB::deep> + (how many levels of recursion deep into the debugger you can go before + a mandatory break) is not defined.) + + With the recent updates the minimal possible debugger consists of one + line + + sub DB::DB {} + + which is quite handy as contents of C environment + variable: + + env "PERL5DB=sub DB::DB {}" perl -d your-script + + Another (a little bit more useful) minimal debugger can be created + with the only line being + + sub DB::DB {print ++$i; scalar } + + This debugger would print the sequential number of encountered + statement, and would wait for your C to continue. + + The following debugger is quite functional: + + { + package DB; + sub DB {} + sub sub {print ++$i, " $sub\n"; &$sub} + } + + It prints the sequential number of subroutine call and the name of the -called subroutine. Note that C<&DB::sub> should be compiled into the ++called subroutine. Note that C<&DB::sub> should be compiled into the + package C. =head2 Debugger Internals @@@ -781,21 -1031,21 +1031,21 @@@ PERLDB_OPTS and parses it as a rest of It also maintains magical internal variables, such as C<@DB::dbline>, C<%DB::dbline>, which are aliases for C<@{"::_ --C<%{"::_. Here C is the currently ++C<%{"::_. Here C is the currently selected (with the debugger's C command, or by flow of execution) file. --Some functions are provided to simplify customization. See L<"Debugger --Customization"> for description of C. The ++Some functions are provided to simplify customization. See L<"Debugger ++Customization"> for description of C. The function C skips the specified number of frames, and returns an array containing info about the caller --frames (all if C is missing). Each entry is a hash with keys ++frames (all if C is missing). Each entry is a hash with keys C (C<$> or C<@>), C (subroutine name, or info about eval), C (C or a reference to an array), C, and C. The function C prints --formatted info about caller frames. The last two functions may be ++formatted info about caller frames. The last two functions may be convenient as arguments to C>, CE> commands. =head2 Other resources diff --cc pod/perldelta.pod index 3cd71de,3cd71de..b33f1ff --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@@ -1,6 -1,6 +1,6 @@@ =head1 NAME --perlnews - what's new for perl5.004 ++perldelta - what's new for perl5.004 =head1 DESCRIPTION @@@ -24,7 -24,7 +24,8 @@@ There is a new Configure question that binary compatibility with Perl 5.003. If you choose binary compatibility, you do not have to recompile your extensions, but you might have symbol conflicts if you embed Perl in another application, --just as in the 5.003 release. ++just as in the 5.003 release. By default, binary compatibility ++is preserved at the expense of symbol table pollution. =head2 New Opcode Module and Revised Safe Module @@@ -33,11 -33,11 +34,26 @@@ application of opcode masks. The revis and is implemented using the new Opcode module. Please read the new Opcode and Safe documentation. ++=head2 Extended Fcntl Module ++ ++The Fcntl module now supports these new constants ++ ++ F_GETOWN F_SETOWN ++ O_ASYNC O_DEFER O_DSYNC O_RSYNC O_SYNC ++ O_EXLOCK O_SHLOCK ++ ++provided that your operating system supports these constants. The ++constants are for use with the Perl sysopen() and fcntl(). These ++constants are also visible for the basic database modules like the ++SDBM_File. For the exact meaning of these contants and other Fcntl ++constants please refer to the fcntl() documentation of your operating ++system. Unsupported constants will cause run-time errors. ++ =head2 Internal Change: FileHandle Deprecated Filehandles are now stored internally as type IO::Handle. Although C and C<*STDOUT{FILEHANDLE}> --are still supported for backwards compatibility ++are still supported for backwards compatibility, C (or C or C) and C<*STDOUT{IO}> are the way of the future. @@@ -73,7 -73,7 +89,7 @@@ compiled with -DEMERGENCY_SBRK and use $^M = 'a' x (1<<16); --would allocate 64K buffer for use when in emergency. ++would allocate a 64K buffer for use when in emergency. See the F file for information on how to enable this option. As a disincentive to casual use of this advanced feature, there is no C long name for this variable. @@@ -121,13 -121,13 +137,13 @@@ expressions of control structures such print $line; } -- if ((my $answer = ) =~ /^yes$/i) { ++ if ((my $answer = ) =~ /^y(es)?$/i) { user_agrees(); -- } elsif ($answer =~ /^no$/i) { ++ } elsif ($answer =~ /^n(o)?$/i) { user_disagrees(); } else { chomp $answer; -- die "'$answer' is neither 'yes' nor 'no'"; ++ die "`$answer' is neither `yes' nor `no'"; } Also, you can declare a foreach loop control variable as lexical by @@@ -156,10 -156,10 +172,12 @@@ which bit eight is clear If the first argument to C is a number, it is treated as a version number instead of a module name. If the version of the Perl interpreter is less than VERSION, then an error message is printed and Perl exits --immediately. This is often useful if you need to check the current --Perl version before Cing library modules which have changed in --incompatible ways from older versions of Perl. (We try not to do --this more than we have to.) ++immediately. Because C occurs at compile time, this check happens ++immediately during the compilation process, unlike C, ++which waits until run-time for the check. This is often useful if you ++need to check the current Perl version before Cing library modules ++which have changed in incompatible ways from older versions of Perl. ++(We try not to do this more than we have to.) =item use Module VERSION LIST @@@ -187,7 -187,7 +205,7 @@@ function whose prototype you want to re Functions documented in the Camel to default to $_ now in fact do, and all those that do are so documented in L. --=head2 C does not trigger a pos() reset on failure ++=item C does not trigger a pos() reset on failure The C match iteration construct used to reset the iteration when it failed to match (so that the next C match would start at @@@ -197,6 -197,6 +215,27 @@@ string in some way. This change makes matches together in conjunction with ordinary matches using the C<\G> zero-width assertion. See L and L. ++=item nested C closures work now ++ ++Prior to the 5.004 release, nested anonymous functions ++didn't work right. They do now. ++ ++=item formats work right on changing lexicals ++ ++Just like anonymous functions that contain lexical variables ++that change (like a lexical index variable for a C loop), ++formats now work properly. For example, this silently failed ++before, and is fine now: ++ ++ my $i; ++ foreach $i ( 1 .. 10 ) { ++ format = ++ my i is @# ++ $i ++ . ++ write; ++ } ++ =back =head2 New Built-in Methods @@@ -255,10 -255,10 +294,21 @@@ class, false if its object is the clas $ref = bless [], 'A'; $ref->is_instance(); # True ++This can be useful for methods that wish to easily distinguish ++whether they were invoked as class or as instance methods. ++ ++ sub some_meth { ++ my $classname = shift; ++ if ($classname->is_instance()) { ++ die "unexpectedly called as instance not class method"; ++ } ++ ..... ++ } ++ =back B C directly uses Perl's internal code for method lookup, and --C uses a very similar method and cache-ing strategy. This may cause ++C uses a very similar method and caching strategy. This may cause strange effects if the Perl code dynamically changes @ISA in any package. You may add other methods to the UNIVERSAL class via Perl or XS code. @@@ -268,6 -268,6 +318,8 @@@ have C available as a plain subrou =head2 TIEHANDLE Now Supported ++See L for other kinds of tie()s. ++ =over =item TIEHANDLE classname, LIST @@@ -276,7 -276,7 +328,11 @@@ This is the constructor for the class return an object of some sort. The reference can be used to hold some internal information. -- sub TIEHANDLE { print "\n"; my $i; bless \$i, shift } ++ sub TIEHANDLE { ++ print "\n"; ++ my $i; ++ return bless \$i, shift; ++ } =item PRINT this, LIST @@@ -284,14 -284,14 +340,21 @@@ This method will be triggered every tim Beyond its self reference it also expects the list that was passed to the print function. -- sub PRINT { $r = shift; $$r++; print join($,,map(uc($_),@_)),$\ } ++ sub PRINT { ++ $r = shift; ++ $$r++; ++ return print join( $, => map {uc} @_), $\; ++ } =item READLINE this This method will be called when the handle is read from. The method should return undef when there is no more data. -- sub READLINE { $r = shift; "PRINT called $$r times\n"; } ++ sub READLINE { ++ $r = shift; ++ return "PRINT called $$r times\n"; ++ } =item DESTROY this @@@ -299,10 -299,10 +362,21 @@@ As with the other types of ties, this m tied handle is about to be destroyed. This is useful for debugging and possibly for cleaning up. -- sub DESTROY { print "\n" } ++ sub DESTROY { ++ print "\n"; ++ } =back ++=item Efficiency Enhancements ++ ++All hash keys with the same string are only allocated once, so ++even if you have 100 copies of the same hash, the immutable keys ++never have to be re-allocated. ++ ++Functions that have an empty prototype and that do nothing but return ++a fixed value are now inlined (e.g. C). ++ =head1 Pragmata Three new pragmatic modules exist: @@@ -311,6 -311,6 +385,8 @@@ =item use blib ++=item use blib 'dir' ++ Looks for MakeMaker-like I<'blib'> directory structure starting in I (or current directory) and working back up to five levels of parent directories. @@@ -344,9 -344,9 +420,23 @@@ Disable unsafe opcodes, or any named op =head1 Modules ++=head2 Fcntl ++ ++New constants in the existing Fcntl modules are now supported, ++provided that your operating system happens to support them: ++ ++ F_GETOWN F_SETOWN ++ O_ASYNC O_DEFER O_DSYNC O_FSYNC O_SYNC ++ O_EXLOCK O_SHLOCK ++ =head2 Module Information Summary --Brand new modules: ++Brand new modules, arranged by topic rather than strictly ++alphabetically: ++ ++ CPAN interface to Comprehensive Perl Archive Network ++ CPAN::FirstTime create a CPAN configuration file ++ CPAN::Nox run CPAN while avoiding compiled extensions IO.pm Top-level interface to IO::* classes IO/File.pm IO::File extension Perl module @@@ -376,7 -376,7 +466,7 @@@ User/grent.pm Object-oriented wrapper around CORE::getgr* User/pwent.pm Object-oriented wrapper around CORE::getpw* -- lib/Tie/RefHash.pm Base class for tied hashes with references as keys ++ Tie/RefHash.pm Base class for tied hashes with references as keys UNIVERSAL.pm Base class for *ALL* classes @@@ -430,14 -430,14 +520,28 @@@ For example, you can now sa use User::pwent; $his = (stat($filename)->st_uid == pwent($whoever)->pw_uid); --=head1 Efficiency Enhancements ++=head1 Utility Changes --All hash keys with the same string are only allocated once, so --even if you have 100 copies of the same hash, the immutable keys --never have to be re-allocated. ++=head2 xsubpp --Functions that have an empty prototype and that do nothing but return --a fixed value are now inlined (e.g. C). ++=item C XSUBs now default to returning nothing ++ ++Due to a documentation/implementation bug in previous versions of ++Perl, XSUBs with a return type of C have actually been ++returning one value. Usually that value was the GV for the XSUB, ++but sometimes it was some already freed or reused value, which would ++sometimes lead to program failure. ++ ++In Perl 5.004, if an XSUB is declared as returning C, it ++actually returns no value, i.e. an empty list (though there is a ++backward-compatibility exception; see below). If your XSUB really ++does return an SV, you should give it a return type of C. ++ ++For backward compatibility, I tries to guess whether a ++C XSUB is really C or if it wants to return an C. ++It does so by examining the text of the XSUB: if I finds ++what looks like an assignment to C, it assumes that the ++XSUB's return type is really C. =head1 Documentation Changes @@@ -446,7 -446,7 +550,7 @@@ new pods are included in section 1 =over 4 --=item L ++=item L This document. @@@ -476,8 -476,8 +580,17 @@@ Although not new, this has been massive Several new conditions will trigger warnings that were silent before. Some only affect certain platforms. --The following new warnings and errors --outline these: ++The following new warnings and errors outline these. ++These messages are classified as follows (listed in ++increasing order of desperation): ++ ++ (W) A warning (optional). ++ (D) A deprecation (optional). ++ (S) A severe warning (mandatory). ++ (F) A fatal error (trappable). ++ (P) An internal error you should never see (trappable). ++ (X) A very fatal error (non-trappable). ++ (A) An alien error message (not generated by Perl). =over 4 @@@ -489,6 -489,6 +602,18 @@@ a typographical error. Note that the e until the end of the scope or until all closure referents to it are destroyed. ++=item %s argument is not a HASH element or slice ++ ++(F) The argument to delete() must be either a hash element, such as ++ ++ $foo{$bar} ++ $ref->[12]->{"susie"} ++ ++or a hash slice, such as ++ ++ @foo{$bar, $baz, $xyzzy} ++ @{$ref->[12]}{"susie", "queue"} ++ =item Allocation too large: %lx (X) You can't allocate more than 64K on an MSDOS machine. @@@ -527,6 -527,6 +652,22 @@@ appear in %ENV. This may be a benign o might directly modify logical name tables and introduce non-standard names, or it may indicate that a logical name table has been corrupted. ++=item Can't use bareword ("%s") as %s ref while "strict refs" in use ++ ++(F) Only hard references are allowed by "strict refs". Symbolic references ++are disallowed. See L. ++ ++=item Constant subroutine %s redefined ++ ++(S) You redefined a subroutine which had previously been eligible for ++inlining. See L for commentary and ++workarounds. ++ ++=item Died ++ ++(F) You passed die() an empty string (the equivalent of C) or ++you called it with no args and both C<$@> and C<$_> were empty. ++ =item Integer overflow in hex number (S) The literal hex number you have specified is too big for your @@@ -539,6 -539,6 +680,13 @@@ architecture. On a 32-bit architecture architecture. On a 32-bit architecture the largest octal literal is 037777777777. ++=item Name "%s::%s" used only once: possible typo ++ ++(W) Typographical errors often show up as unique variable names. ++If you had a good reason for having a unique name, then just mention ++it again somehow to suppress the message (the C pragma is ++provided for just this purpose). ++ =item Null picture in formline (F) The first argument to formline must be a valid format picture @@@ -552,6 -552,6 +700,17 @@@ pointing outside the buffer. This is d The sole exception to this is that Cing past the buffer will extend the buffer and zero pad the new area. ++=item Stub found while resolving method `%s' overloading `%s' in package `%s' ++ ++(P) Overloading resolution over @ISA tree may be broken by importing stubs. ++Stubs should never be implicitely created, but explicit calls to C ++may break this. ++ ++=item Cannot resolve method `%s' overloading `%s' in package `s' ++ ++(P) Internal error trying to resolve overloading specified by a method ++name (as opposed to a subroutine reference). ++ =item Out of memory! (X|F) The malloc() function returned 0, indicating there was insufficient @@@ -572,37 -572,37 +731,125 @@@ a possibility to shut down by trapping =item Possible attempt to put comments in qw() list --(W) You probably wrote something like this: ++(W) qw() lists contain items separated by whitespace; as with literal ++strings, comment characters are not ignored, but are instead treated ++as literal data. (You may have used different delimiters than the ++exclamation marks parentheses shown here; braces are also frequently ++used.) ++ ++You probably wrote something like this: -- qw( a # a comment ++ @list = qw( ++ a # a comment b # another comment -- ) ; ++ ); when you should have written this: -- qw( a ++ @list = qw( ++ a b -- ) ; ++ ); ++ ++If you really want comments, build your list the ++old-fashioned way, with quotes and commas: ++ ++ @list = ( ++ 'a', # a comment ++ 'b', # another comment ++ ); =item Possible attempt to separate words with commas --(W) You probably wrote something like this: ++(W) qw() lists contain items separated by whitespace; therefore commas ++aren't needed to separate the items. (You may have used different ++delimiters than the parentheses shown here; braces are also frequently ++used.) -- qw( a, b, c ); ++You probably wrote something like this: --when you should have written this: ++ qw! a, b, c !; ++ ++which puts literal commas into some of the list items. Write it without ++commas if you don't want them to appear in your data: ++ ++ qw! a b c !; -- qw( a b c ); ++=item Scalar value @%s{%s} better written as $%s{%s} ++ ++(W) You've used a hash slice (indicated by @) to select a single element of ++a hash. Generally it's better to ask for a scalar value (indicated by $). ++The difference is that C<$foo{&bar}> always behaves like a scalar, both when ++assigning to it and when evaluating its argument, while C<@foo{&bar}> behaves ++like a list when you assign to it, and provides a list context to its ++subscript, which can do weird things if you're expecting only one subscript. =item untie attempted while %d inner references still exist (W) A copy of the object returned from C (or C) was still valid when C was called. --=item Got an error from DosAllocMem: ++=item Value of %s construct can be "0"; test with defined() ++ ++(W) In a conditional expression, you used , <*> (glob), or ++C as a boolean value. Each of these constructs can return a ++value of "0"; that would make the conditional expression false, which ++is probably not what you intended. When using these constructs in ++conditional expressions, test their values with the C operator. ++ ++=item Variable "%s" may be unavailable ++ ++(W) An inner (nested) I subroutine is inside a I ++subroutine, and outside that is another subroutine; and the anonymous ++(innermost) subroutine is referencing a lexical variable defined in ++the outermost subroutine. For example: ++ ++ sub outermost { my $a; sub middle { sub { $a } } } ++ ++If the anonymous subroutine is called or referenced (directly or ++indirectly) from the outermost subroutine, it will share the variable ++as you would expect. But if the anonymous subroutine is called or ++referenced when the outermost subroutine is not active, it will see ++the value of the shared variable as it was before and during the ++*first* call to the outermost subroutine, which is probably not what ++you want. ++ ++In these circumstances, it is usually best to make the middle ++subroutine anonymous, using the C syntax. Perl has specific ++support for shared variables in nested anonymous subroutines; a named ++subroutine in between interferes with this feature. ++ ++=item Variable "%s" will not stay shared ++ ++(W) An inner (nested) I subroutine is referencing a lexical ++variable defined in an outer subroutine. ++ ++When the inner subroutine is called, it will probably see the value of ++the outer subroutine's variable as it was before and during the ++*first* call to the outer subroutine; in this case, after the first ++call to the outer subroutine is complete, the inner and outer ++subroutines will no longer share a common value for the variable. In ++other words, the variable will no longer be shared. ++ ++Furthermore, if the outer subroutine is anonymous and references a ++lexical variable outside itself, then the outer and inner subroutines ++will I share the given variable. ++ ++This problem can usually be solved by making the inner subroutine ++anonymous, using the C syntax. When inner anonymous subs that ++reference variables in outer subroutines are called or referenced, ++they are automatically re-bound to the current values of such ++variables. ++ ++=item Warning: something's wrong ++ ++(W) You passed warn() an empty string (the equivalent of C) or ++you called it with no args and C<$_> was empty. ++ ++=item Got an error from DosAllocMem --(P) An error peculiar to OS/2. Most probably you use an obsolete version --of Perl, and should not happen anyway. ++(P) An error peculiar to OS/2. Most probably you're using an obsolete ++version of Perl, and this should not happen anyway. =item Malformed PERLLIB_PREFIX @@@ -634,10 -634,10 +881,10 @@@ L. See L program included with your release. Make sure you trim your bug diff --cc pod/perldiag.pod index d08d2dc,68cc69d..0f204a8 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@@ -1714,27 -1716,27 +1716,49 @@@ the BSD version, which takes a pid =item Possible attempt to put comments in qw() list --(W) You probably wrote something like this: ++(W) qw() lists contain items separated by whitespace; as with literal ++strings, comment characters are not ignored, but are instead treated ++as literal data. (You may have used different delimiters than the ++exclamation marks parentheses shown here; braces are also frequently ++used.) -- qw( a # a comment ++You probably wrote something like this: ++ ++ @list = qw( ++ a # a comment b # another comment -- ) ; ++ ); when you should have written this: -- qw( a ++ @list = qw( ++ a b -- ) ; ++ ); ++ ++If you really want comments, build your list the ++old-fashioned way, with quotes and commas: ++ ++ @list = ( ++ 'a', # a comment ++ 'b', # another comment ++ ); =item Possible attempt to separate words with commas --(W) You probably wrote something like this: ++(W) qw() lists contain items separated by whitespace; therefore commas ++aren't needed to separate the items. (You may have used different ++delimiters than the parentheses shown here; braces are also frequently ++used.) -- qw( a, b, c ); ++You probably wrote something like this: --when you should have written this: ++ qw! a, b, c !; ++ ++which puts literal commas into some of the list items. Write it without ++commas if you don't want them to appear in your data: -- qw( a b c ); ++ qw! a b c !; =item Possible memory corruption: %s overflowed 3rd argument @@@ -2558,10 -2566,10 +2588,10 @@@ streams, such a } close OUT; --=item Got an error from DosAllocMem: ++=item Got an error from DosAllocMem --(P) An error peculiar to OS/2. Most probably you use an obsolete version --of perl, and this should not happen anyway. ++(P) An error peculiar to OS/2. Most probably you're using an obsolete ++version of Perl, and this should not happen anyway. =item Malformed PERLLIB_PREFIX diff --cc pod/perlembed.pod index e55ee63,e55ee63..2a9ce58 --- a/pod/perlembed.pod +++ b/pod/perlembed.pod @@@ -930,7 -930,7 +930,8 @@@ B can also automate wr % perl -MExtUtils::Embed -e xsinit -o perlxsi.c % cc -c perlxsi.c `perl -MExtUtils::Embed -e ccopts` % cc -c interp.c `perl -MExtUtils::Embed -e ccopts` -- % cc -o interp perlxsi.o interp.o `perl -MExtUtils::Embed -e ldopts` ++ % cc -o interp perlxsi.o interp.o \ ++ `perl -MExtUtils::Embed -e ccdlflags -e ldopts` Consult L and L for more details. diff --cc pod/perlfunc.pod index 488c797,34d9281..99231b9 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@@ -774,6 -783,6 +783,12 @@@ produce, respectivel See also exit() and warn(). ++You can arrange for a callback to be called just before the die() does ++its deed, by setting the C<$SIG{__DIE__}> hook. The associated handler ++will be called with the error text and can change the error message, if ++it sees fit, by calling die() again. See L for details on ++setting C<%SIG> entries, and eval() for some examples. ++ =item do BLOCK Not really a function. Returns the value of the last command in the @@@ -919,8 -928,8 +934,11 @@@ context of the eval If there is a syntax error or runtime error, or a die() statement is executed, an undefined value is returned by eval(), and C<$@> is set to the error message. If there was no error, C<$@> is guaranteed to be a null --string. If EXPR is omitted, evaluates $_. The final semicolon, if --any, may be omitted from the expression. ++string. If EXPR is omitted, evaluates C<$_>. The final semicolon, if ++any, may be omitted from the expression. Beware that using eval() ++neither silences perl from printing warnings to STDERR, nor does it ++stuff the text of warning messages into C<$@>. To do either of those, ++you have to use the C<$SIG{__WARN__}> facility. See warn() and L. Note that, because eval() traps otherwise-fatal errors, it is useful for determining whether a particular feature (such as socket() or symlink()) @@@ -944,6 -953,6 +962,24 @@@ Examples # a run-time error eval '$answer ='; # sets $@ ++When using the eval{} form as an exception trap in libraries, you may ++wish not to trigger any C<__DIE__> hooks that user code may have ++installed. You can use the C construct for this ++purpose, as shown in this example: ++ ++ # a very private exception trap for divide-by-zero ++ eval { local $SIG{'__DIE__'}; $answer = $a / $b; }; warn $@ if $@; ++ ++This is especially significant, given that C<__DIE__> hooks can call ++die() again, which has the effect of changing their error messages: ++ ++ # __DIE__ hooks may modify error messages ++ { ++ local $SIG{'__DIE__'} = sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x }; ++ eval { die "foo foofs here" }; ++ print $@ if $@; # prints "bar barfs here" ++ } ++ With an eval(), you should be especially careful to remember what's being looked at when: @@@ -3045,7 -3054,7 +3081,7 @@@ meaning of the fields size total size of file, in bytes atime last access time since the epoch mtime last modify time since the epoch -- ctime inode change time (NOT creation type!) since the epoch ++ ctime inode change time (NOT creation time!) since the epoch blksize preferred block size for file system I/O blocks actual number of blocks allocated @@@ -3640,8 -3649,8 +3676,38 @@@ for a scalar =item warn LIST --Produces a message on STDERR just like die(), but doesn't exit or --on an exception. ++Produces a message on STDERR just like die(), but doesn't exit or throw ++an exception. ++ ++No message is printed if there is a C<$SIG{__WARN__}> handler ++installed. It is the handler's responsibility to deal with the message ++as it sees fit (like, for instance, converting it into a die()). Most ++handlers must therefore make arrangements to actually display the ++warnings that they are not prepared to deal with, by calling warn() ++again in the handler. Note that this is quite safe and will not ++produce an endless loop, since C<__WARN__> hooks are not called from ++inside one. ++ ++You will find this behavior is slightly different from that of ++C<$SIG{__DIE__}> handlers (which don't suppress the error text, but can ++instead call die() again to change it). ++ ++Using a C<__WARN__> handler provides a powerful way to silence all ++warnings (even the so-called mandatory ones). An example: ++ ++ # wipe out *all* compile-time warnings ++ BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } } ++ my $foo = 10; ++ my $foo = 20; # no warning about duplicate my $foo, ++ # but hey, you asked for it! ++ # no compile-time or run-time warnings before here ++ $DOWARN = 1; ++ ++ # run-time warnings enabled after here ++ warn "\$foo is alive and $foo!"; # does show up ++ ++See L for details on setting C<%SIG> entries, and for more ++examples. =item write FILEHANDLE diff --cc pod/perlrun.pod index 083b567,083b567..da355c1 --- a/pod/perlrun.pod +++ b/pod/perlrun.pod @@@ -420,10 -420,10 +420,12 @@@ prints warnings about variable names th scalar variables that are used before being set. Also warns about redefined subroutines, and references to undefined filehandles or filehandles opened read-only that you are attempting to write on. Also --warns you if you use values as a number that doesn't look like numbers, using --an array as though it were a scalar, if --your subroutines recurse more than 100 deep, and innumerable other things. --See L and L. ++warns you if you use values as a number that doesn't look like numbers, ++using an array as though it were a scalar, if your subroutines recurse ++more than 100 deep, and innumerable other things. ++ ++You can disable specific warnings using C<__WARN__> hooks, as described ++in L and L. See also L and L. =item B<-x> I diff --cc pod/perlsyn.pod index 91a601a,91a601a..8bb557e --- a/pod/perlsyn.pod +++ b/pod/perlsyn.pod @@@ -508,3 -508,3 +508,47 @@@ ignored by both the compiler and the tr You probably shouldn't rely upon the warn() being podded out forever. Not all pod translators are well-behaved in this regard, and perhaps the compiler will become pickier. ++ ++One may also use pod directives to quickly comment out a section ++of code. ++ ++=head2 Plain Old Comments (Not!) ++ ++Much like the C preprocessor, perl can process line directives. Using ++this, one can control perl's idea of filenames and line numbers in ++error or warning messages (especially for strings that are processed ++with eval()). The syntax for this mechanism is the same as for most ++C preprocessors: it matches the regular expression ++C with C<$1> being the line ++number for the next line, and C<$2> being the optional filename ++(specified within quotes). ++ ++Here are some examples that you should be able to type into your command ++shell: ++ ++ % perl ++ # line 200 "bzzzt" ++ # the `#' on the previous line must be the first char on line ++ die 'foo'; ++ __END__ ++ foo at bzzzt line 201. ++ ++ % perl ++ # line 200 "bzzzt" ++ eval qq[\n#line 2001 ""\ndie 'foo']; print $@; ++ __END__ ++ foo at - line 2001. ++ ++ % perl ++ eval qq[\n#line 200 "foo bar"\ndie 'foo']; print $@; ++ __END__ ++ foo at foo bar line 200. ++ ++ % perl ++ # line 345 "goop" ++ eval "\n#line " . __LINE__ . ' "' . __FILE__ ."\"\ndie 'foo'"; ++ print $@; ++ __END__ ++ foo at goop line 345. ++ ++=cut diff --cc pod/perltoc.pod index b8353fc,b8353fc..f451606 --- a/pod/perltoc.pod +++ b/pod/perltoc.pod @@@ -40,7 -40,7 +40,7 @@@ HOME, LOGDIR, PATH, PERL5LIB, PERL5DB, =item NOTES --=head2 perlnews - what's new for perl5.004 ++=head2 perldelta - what's new for perl5.004 =item DESCRIPTION @@@ -54,6 -54,6 +54,8 @@@ =item New Opcode Module and Revised Safe Module ++=item Extended Fcntl Module ++ =item Internal Change: FileHandle Deprecated =item Internal Change: PerlIO internal IO abstraction interface @@@ -66,9 -66,9 +68,9 @@@ $^E, $^H, $^ delete on slices, flock, keys as an lvalue, my() in Control Structures, unpack() and pack(), use VERSION, use Module VERSION LIST, --prototype(FUNCTION), $_ as Default -- --=item C does not trigger a pos() reset on failure ++prototype(FUNCTION), $_ as Default, C does not trigger a pos() reset ++on failure, nested C closures work now, formats work right on ++changing lexicals =item New Built-in Methods @@@ -76,18 -76,18 +78,21 @@@ isa(CLASS), can(METHOD), VERSION( [NEED =item TIEHANDLE Now Supported --TIEHANDLE classname, LIST, PRINT this, LIST, READLINE this, DESTROY this ++TIEHANDLE classname, LIST, PRINT this, LIST, READLINE this, DESTROY this, ++Efficiency Enhancements =back =item Pragmata --use blib, use locale, use ops ++use blib, use blib 'dir', use locale, use ops =item Modules =over ++=item Fcntl ++ =item Module Information Summary =item IO @@@ -98,25 -98,25 +103,40 @@@ =back --=item Efficiency Enhancements ++=item Utility Changes ++ ++=over ++ ++=item xsubpp ++ ++C XSUBs now default to returning nothing ++ ++=back =item Documentation Changes --L, L, L, L, L, ++L, L, L, L, L, L =item New Diagnostics --"my" variable %s masks earlier declaration in same scope, Allocation too --large: %lx, Allocation too large, Attempt to free non-existent shared --string, Attempt to use reference as lvalue in substr, Unsupported function --fork, Ill-formed logical name |%s| in prime_env_iter, Integer overflow in --hex number, Integer overflow in octal number, Null picture in formline, --Offset outside string, Out of memory!, Out of memory during request for %s, --Possible attempt to put comments in qw() list, Possible attempt to separate --words with commas, untie attempted while %d inner references still exist, --Got an error from DosAllocMem:, Malformed PERLLIB_PREFIX, PERL_SH_DIR too --long, Process terminated by SIG%s ++"my" variable %s masks earlier declaration in same scope, %s argument is ++not a HASH element or slice, Allocation too large: %lx, Allocation too ++large, Attempt to free non-existent shared string, Attempt to use reference ++as lvalue in substr, Unsupported function fork, Ill-formed logical name ++|%s| in prime_env_iter, Can't use bareword ("%s") as %s ref while "strict ++refs" in use, Constant subroutine %s redefined, Died, Integer overflow in ++hex number, Integer overflow in octal number, Name "%s::%s" used only once: ++possible typo, Null picture in formline, Offset outside string, Stub found ++while resolving method `%s' overloading `%s' in package `%s', Cannot ++resolve method `%s' overloading `%s' in package `s', Out of memory!, Out of ++memory during request for %s, Possible attempt to put comments in qw() ++list, Possible attempt to separate words with commas, Scalar value @%s{%s} ++better written as $%s{%s}, untie attempted while %d inner references still ++exist, Value of %s construct can be "0"; test with defined(), Variable "%s" ++may be unavailable, Variable "%s" will not stay shared, Warning: ++something's wrong, Got an error from DosAllocMem, Malformed PERLLIB_PREFIX, ++PERL_SH_DIR too long, Process terminated by SIG%s =item BUGS @@@ -168,6 -168,6 +188,8 @@@ =item PODs: Embedded Documentation ++=item Plain Old Comments (Not!) ++ =back =head2 perlop - Perl operators and precedence @@@ -1007,19 -1007,19 +1029,27 @@@ safe subprocesses, sockets, and semapho =item Debugger Commands --h [command], p expr, x expr, V [pkg [vars]], X [vars], T, s [expr], n, --ECRE, c [line|sub], l, l min+incr, l min-max, l line, l subname, -, --w [line], f filename, /pattern/, ?pattern?, L, S [[!]pattern], t, t expr, b --[line] [condition], b subname [condition], b postpone subname [condition], --b load filename, d [line], D, a [line] command, A, O [opt[=val]] [opt"val"] --[opt?].., recallCommand, ShellBang, pager, tkRunning, signalLevel, --warnLevel, dieLevel, AutoTrace, LineInfo, C, C, --C, arrayDepth, hashDepth, compactDump, veryCompact, globPrint, --DumpDBFiles, DumpPackages, quote, HighBit, undefPrint, C, noTTY, --C, C, C, E [ command ], EE command, --E command, EE command, { [ command ], {{ command, ! number, ! ---number, ! pattern, !! cmd, H -number, q or ^D, R, |dbcmd, ||dbcmd, = --[alias value], command, p expr ++h [command], p expr, x expr, V [pkg [vars]], X [vars], T, s [expr], n ++[expr], ECRE, c [line|sub], l, l min+incr, l min-max, l line, l ++subname, -, w [line], f filename, /pattern/, ?pattern?, L, S [[!]pattern], ++t, t expr, b [line] [condition], b subname [condition], b postpone subname ++[condition], b load filename, b compile subname, d [line], D, a [line] ++command, A, O [opt[=val]] [opt"val"] [opt?].., C, ++C, C, C, C, C, ++C, C, C, C, C, ++C, C, C, C, C, ++C, C, C, C, C, ++C, C, C, C, C, C, ++C, E [ command ], EE command, E command, ++EE command, { [ command ], {{ command, ! number, ! -number, ! ++pattern, !! cmd, H -number, q or ^D, R, |dbcmd, ||dbcmd, = [alias value], ++command, m expr, m package ++ ++=item Debugger input/output ++ ++Prompt, Multi-line commands, Stack backtrace, Listing, Frame listing ++ ++=item Debugging compile-time statements =item Debugger Customization @@@ -1422,7 -1422,7 +1452,7 @@@ av_shift, av_store, av_undef, av_unshif DBsingle, DBsub, DBtrace, dMARK, dORIGMARK, dowarn, dSP, dXSARGS, dXSI32, dXSI32, ENTER, EXTEND, FREETMPS, G_ARRAY, G_DISCARD, G_EVAL, GIMME, G_NOARGS, G_SCALAR, gv_fetchmeth, gv_fetchmethod, gv_stashpv, gv_stashsv, --he_free, he_delayfree, hv_clear, hv_delete, hv_exists, hv_fetch, ++GvSV, he_delayfree, he_free, hv_clear, hv_delete, hv_exists, hv_fetch, hv_iterinit, hv_iterkey, hv_iternext, hv_iternextsv, hv_iterval, hv_magic, HvNAME, hv_store, hv_undef, isALNUM, isALPHA, isDIGIT, isLOWER, isSPACE, isUPPER, items, ix, LEAVE, MARK, mg_clear, mg_copy, mg_find, mg_free, @@@ -1643,13 -1643,13 +1673,18 @@@ I, I, I, I, I ++=item Inheritance and overloading ++ ++Strings as values of C directive, Overloading of an operation ++is inherited by derived classes ++ =back =item SPECIAL SYMBOLS FOR C =over --=item Last Resort ++=item Last Resort =item Fallback @@@ -1818,19 -1818,19 +1853,26 @@@ timeit(COUNT, CODE), timethis, timethes =item Interactive Mode Searching for authors, bundles, distribution files and modules, make, test, --install, clean modules or distributions ++install, clean modules or distributions, readme, look module or ++distribution =item CPAN::Shell ++=item autobundle ++ ++=item recompile ++ =item ProgrammerE<39>s interface =item Cache Manager =item Bundles --=item autobundle ++=item Prerequisites --=item recompile ++=item Debugging ++ ++=item Floppy, Zip, and all that Jazz =back @@@ -1845,13 -1845,13 +1887,7 @@@ ElistE, B<$status = $X-E, a loop exit, or a die(). --The __DIE__ handler is explicitly disabled during the call, so that you --can die from a __DIE__ handler. Similarly for __WARN__. ++The C<__DIE__> handler is explicitly disabled during the call, so that you ++can die from a C<__DIE__> handler. Similarly for C<__WARN__>. See ++L, L and L. =back diff --cc pod/pod2html.PL index 816fb6b,816fb6b..602a866 --- a/pod/pod2html.PL +++ b/pod/pod2html.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; @@@ -502,7 -502,7 +503,7 @@@ sub gensym sub pre_escapes { # twiddle these, and stay up late :-) my($thing) = @_; for ($$thing) { -- s/([\200-\377])/noremap("&".ord($1).";")/ge; ++ s/([\200-\377])/noremap("&#".ord($1).";")/ge; s/"(.*?)"/``$1''/gs; s/&/noremap("&")/ge; s/<$file" or die "Can't create $file: $!"; diff --cc pod/pod2man.PL index 5d1e193,5d1e193..c03e73d --- a/pod/pod2man.PL +++ b/pod/pod2man.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; diff --cc pod/pod2text.PL index 586da04,586da04..da645b5 --- a/pod/pod2text.PL +++ b/pod/pod2text.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; diff --cc pod/roffitall index 7e33326,7e33326..06b3918 --- a/pod/roffitall +++ b/pod/roffitall @@@ -30,7 -30,7 +30,7 @@@ esa toroff=` echo \ $mandir/perl.1 \ -- $mandir/perlnews.1 \ ++ $mandir/perldelta.1 \ $mandir/perldata.1 \ $mandir/perlsyn.1 \ $mandir/perlop.1 \ diff --cc pp.c index f5c2225,f5c2225..5cab7a2 --- a/pp.c +++ b/pp.c @@@ -519,8 -519,8 +519,10 @@@ PP(pp_undef dSP; SV *sv; -- if (!op->op_private) ++ if (!op->op_private) { ++ EXTEND(SP, 1); RETPUSHUNDEF; ++ } sv = POPs; if (!sv) @@@ -1393,15 -1393,15 +1395,28 @@@ PP(pp_sqrt PP(pp_int) { dSP; dTARGET; -- double value; -- value = POPn; -- if (value >= 0.0) -- (void)modf(value, &value); -- else { -- (void)modf(-value, &value); -- value = -value; ++ { ++ double value = TOPn; ++ IV iv; ++ ++ if (SvIOKp(TOPs) && !SvNOKp(TOPs) && !SvPOKp(TOPs)) { ++ iv = SvIVX(TOPs); ++ SETi(iv); ++ } ++ else { ++ if (value >= 0.0) ++ (void)modf(value, &value); ++ else { ++ (void)modf(-value, &value); ++ value = -value; ++ } ++ iv = I_V(value); ++ if (iv == value) ++ SETi(iv); ++ else ++ SETn(value); ++ } } -- XPUSHn(value); RETURN; } @@@ -1409,15 -1409,15 +1424,22 @@@ PP(pp_abs { dSP; dTARGET; tryAMAGICun(abs); { -- double value; -- value = POPn; -- -- if (value < 0.0) -- value = -value; -- -- XPUSHn(value); -- RETURN; ++ double value = TOPn; ++ IV iv; ++ ++ if (SvIOKp(TOPs) && !SvNOKp(TOPs) && !SvPOKp(TOPs) && ++ (iv = SvIVX(TOPs)) != IV_MIN) { ++ if (iv < 0) ++ iv = -iv; ++ SETi(iv); ++ } ++ else { ++ if (value < 0.0) ++ value = -value; ++ SETn(value); ++ } } ++ RETURN; } PP(pp_hex) diff --cc pp_hot.c index cbc2b95,cbc19d5..707239f --- a/pp_hot.c +++ b/pp_hot.c @@@ -1677,12 -1678,12 +1678,6 @@@ PP(pp_leavesub /* in case LEAVE wipes old return values */ } -- if (cx->blk_sub.hasargs) { /* You don't exist; go away. */ -- AV* av = cx->blk_sub.argarray; -- -- av_clear(av); -- AvREAL_off(av); -- } curpm = newpm; /* Don't pop $1 et al till now */ LEAVE; diff --cc proto.h index 1f4ce32,1f4ce32..b86894f --- a/proto.h +++ b/proto.h @@@ -420,7 -420,7 +420,7 @@@ char* sharepvn _((char* sv, I32 len, U3 HEK* share_hek _((char* sv, I32 len, U32 hash)); Signal_t sighandler _((int sig)); SV** stack_grow _((SV** sp, SV**p, int n)); --int start_subparse _((U32 flags)); ++int start_subparse _((I32 is_format, U32 flags)); void sub_crush_depth _((CV* cv)); bool sv_2bool _((SV* sv)); CV* sv_2cv _((SV* sv, HV** st, GV** gvp, I32 lref)); diff --cc regcomp.c index de6104a,de6104a..d736c18 --- a/regcomp.c +++ b/regcomp.c @@@ -228,18 -228,18 +228,23 @@@ PMOP* pm regkind[(U8)OP(first)] == NBOUND) r->regstclass = first; else if (regkind[(U8)OP(first)] == BOL) { -- r->reganch = ROPT_ANCH; ++ r->reganch |= ROPT_ANCH_BOL; first = NEXTOPER(first); -- goto again; ++ goto again; ++ } ++ else if (OP(first) == GPOS) { ++ r->reganch |= ROPT_ANCH_GPOS; ++ first = NEXTOPER(first); ++ goto again; } else if ((OP(first) == STAR && regkind[(U8)OP(NEXTOPER(first))] == ANY) && !(r->reganch & ROPT_ANCH) ) { /* turn .* into ^.* with an implied $*=1 */ -- r->reganch = ROPT_ANCH | ROPT_IMPLICIT; ++ r->reganch |= ROPT_ANCH_BOL | ROPT_IMPLICIT; first = NEXTOPER(first); -- goto again; ++ goto again; } if (sawplus && (!sawopen || !regsawback)) r->reganch |= ROPT_SKIP; /* x+ must match 1st of run */ @@@ -783,7 -783,7 +788,7 @@@ tryagain nextchar(); break; case 'G': -- ret = regnode(GBOL); ++ ret = regnode(GPOS); *flagp |= SIMPLE; nextchar(); break; @@@ -1499,8 -1499,8 +1504,14 @@@ regexp *r PerlIO_printf(Perl_debug_log, "start `%s' ", SvPVX(r->regstart)); if (r->regstclass) PerlIO_printf(Perl_debug_log, "stclass `%s' ", regprop(r->regstclass)); -- if (r->reganch & ROPT_ANCH) -- PerlIO_printf(Perl_debug_log, "anchored "); ++ if (r->reganch & ROPT_ANCH) { ++ PerlIO_printf(Perl_debug_log, "anchored"); ++ if (r->reganch & ROPT_ANCH_BOL) ++ PerlIO_printf(Perl_debug_log, "(BOL)"); ++ if (r->reganch & ROPT_ANCH_GPOS) ++ PerlIO_printf(Perl_debug_log, "(GPOS)"); ++ PerlIO_putc(Perl_debug_log, ' '); ++ } if (r->reganch & ROPT_SKIP) PerlIO_printf(Perl_debug_log, "plus "); if (r->reganch & ROPT_IMPLICIT) @@@ -1613,8 -1613,8 +1624,8 @@@ char *op case MINMOD: p = "MINMOD"; break; -- case GBOL: -- p = "GBOL"; ++ case GPOS: ++ p = "GPOS"; break; case UNLESSM: p = "UNLESSM"; diff --cc regcomp.h index 9d07ff9,9d07ff9..d618066 --- a/regcomp.h +++ b/regcomp.h @@@ -76,7 -76,7 +76,7 @@@ #define OPEN 25 /* num Mark this point in input as start of #n. */ #define CLOSE 26 /* num Analogous to OPEN. */ #define MINMOD 27 /* no Next operator is not greedy. */ --#define GBOL 28 /* no Matches where last m//g left off. */ ++#define GPOS 28 /* no Matches where last m//g left off. */ #define IFMATCH 29 /* no Succeeds if the following matches. */ #define UNLESSM 30 /* no Fails if the following matches. */ #define SUCCEED 31 /* no Return from a subroutine, basically. */ @@@ -158,7 -158,7 +158,7 @@@ EXT char regkind[] = OPEN, CLOSE, MINMOD, -- BOL, ++ GPOS, BRANCH, BRANCH, END, diff --cc regexec.c index bed5a99,bed5a99..c55eb97 --- a/regexec.c +++ b/regexec.c @@@ -207,7 -207,7 +207,8 @@@ I32 safebase; /* no need to remember st /* If there is a "must appear" string, look for it. */ s = startpos; if (prog->regmust != Nullsv && -- (!(prog->reganch & ROPT_ANCH) ++ !(prog->reganch & ROPT_ANCH_GPOS) && ++ (!(prog->reganch & ROPT_ANCH_BOL) || (multiline && prog->regback >= 0)) ) { if (stringarg == strbeg && screamer) { @@@ -250,11 -250,11 +251,13 @@@ regtill = startpos+minend; /* Simplest case: anchored match need be tried only once. */ -- /* [unless multiline is set] */ ++ /* [unless only anchor is BOL and multiline is set] */ if (prog->reganch & ROPT_ANCH) { if (regtry(prog, startpos)) goto got_it; -- else if (multiline || (prog->reganch & ROPT_IMPLICIT)) { ++ else if (!(prog->reganch & ROPT_ANCH_GPOS) && ++ (multiline || (prog->reganch & ROPT_IMPLICIT))) ++ { if (minlen) dontbother = minlen - 1; strend -= dontbother; @@@ -662,7 -662,7 +665,7 @@@ char *prog if (locinput == regbol && regprev == '\n') break; sayNO; -- case GBOL: ++ case GPOS: if (locinput == regbol) break; sayNO; diff --cc regexp.h index ebd30ad,ebd30ad..684851c --- a/regexp.h +++ b/regexp.h @@@ -30,6 -30,6 +30,8 @@@ typedef struct regexp char program[1]; /* Unwarranted chumminess with compiler. */ } regexp; --#define ROPT_ANCH 1 --#define ROPT_SKIP 2 --#define ROPT_IMPLICIT 4 ++#define ROPT_ANCH 3 ++#define ROPT_ANCH_BOL 1 ++#define ROPT_ANCH_GPOS 2 ++#define ROPT_SKIP 4 ++#define ROPT_IMPLICIT 8 diff --cc sv.c index 4139233,4139233..0df2eec --- a/sv.c +++ b/sv.c @@@ -3090,11 -3090,11 +3090,8 @@@ I32 append PerlIO_get_ptr(fp), PerlIO_get_cnt(fp), PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)); /* This used to call 'filbuf' in stdio form, but as that behaves like -- getc when cnt <= 0 we use PerlIO_getc here to avoid another -- abstraction. This may also avoid issues with different named -- 'filbuf' equivalents, though Configure tries to handle them now -- anyway. -- */ ++ getc when cnt <= 0 we use PerlIO_getc here to avoid introducing ++ another abstraction. */ i = PerlIO_getc(fp); /* get more characters */ DEBUG_P(PerlIO_printf(Perl_debug_log, "Screamer: post: FILE * thinks ptr=%d, cnt=%d, base=%d\n", @@@ -3593,7 -3593,7 +3590,7 @@@ I32 lref ENTER; tmpsv = NEWSV(704,0); gv_efullname3(tmpsv, gv, Nullch); -- newSUB(start_subparse(0), ++ newSUB(start_subparse(FALSE, 0), newSVOP(OP_CONST, 0, tmpsv), Nullop, Nullop); @@@ -4029,9 -4029,9 +4026,12 @@@ SV* sv switch (type) { case SVt_PVCV: -- if (CvANON(sv)) strcat(d, "ANON,"); -- if (CvCLONE(sv)) strcat(d, "CLONE,"); -- if (CvCLONED(sv)) strcat(d, "CLONED,"); ++ case SVt_PVFM: ++ if (CvANON(sv)) strcat(d, "ANON,"); ++ if (CvUNIQUE(sv)) strcat(d, "UNIQUE,"); ++ if (CvCLONE(sv)) strcat(d, "CLONE,"); ++ if (CvCLONED(sv)) strcat(d, "CLONED,"); ++ if (CvNODEBUG(sv)) strcat(d, "NODEBUG,"); break; case SVt_PVHV: if (HvSHAREKEYS(sv)) strcat(d, "SHAREKEYS,"); diff --cc t/README index 00bf561,6fb569b..8384349 --- a/t/README +++ b/t/README @@@ -8,4 -8,9 +8,9 @@@ If you put out extra lines with a '#' c have to worry about removing the extra print statements later since TEST ignores lines beginning with '#'. - If you come up with new tests, send them to larry@wall.org. -If you know that "basic" features work and expect that some test are going -to fail, it is adviced to run tests via Test::Harness thusly: ++If you know that Perl is basically working but expect that some tests ++will fail, you may want to use Test::Harness thusly: + ./perl -I../lib harness -This would pinpoint failed tests with better granularity. ++This method pinpoints failed tests automatically. + -If you come up with new tests, send them to larry@wall.org. ++If you come up with new tests, please send them to larry@wall.org. diff --cc t/io/argv.t index 40ed23b,bf592f9..02cdc27 --- a/t/io/argv.t +++ b/t/io/argv.t @@@ -33,4 -33,5 +33,4 @@@ if ($y eq "1a line\n2a line\n3a line\n" else {print "not ok 5\n";} --`/bin/rm -f Io.argv.tmp` if -x '/bin/rm'; + unlink 'Io.argv.tmp'; diff --cc t/io/pipe.t index 95df4dc,95df4dc..d70b2ab --- a/t/io/pipe.t +++ b/t/io/pipe.t @@@ -2,6 -2,6 +2,16 @@@ # $RCSfile: pipe.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:31 $ ++BEGIN { ++ chdir 't' if -d 't'; ++ @INC = '../lib'; ++ require Config; import Config; ++ unless ($Config{'d_fork'}) { ++ print "1..0\n"; ++ exit 0; ++ } ++} ++ $| = 1; print "1..8\n"; diff --cc t/lib/filehand.t index 11836f1,11836f1..14a1770 --- a/t/lib/filehand.t +++ b/t/lib/filehand.t @@@ -64,7 -64,7 +64,7 @@@ print "ok 10\n" ($rd,$wr) = FileHandle::pipe; --if ($^O eq 'VMS' || $^O eq 'os2') { ++if ($^O eq 'VMS' || $^O eq 'os2' || $^O eq 'amigaos') { $wr->autoflush; $wr->printf("ok %d\n",11); print $rd->getline; diff --cc t/lib/io_pipe.t index 1d050ff,1d050ff..eee3741 --- a/t/lib/io_pipe.t +++ b/t/lib/io_pipe.t @@@ -1,6 -1,6 +1,5 @@@ #!./perl -- BEGIN { unless(grep /blib/, @INC) { chdir 't' if -d 't'; @@@ -12,7 -12,7 +11,9 @@@ use Config BEGIN { if(-d "lib" && -f "TEST") { -- if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') { ++ if (! $Config{'d_fork'} || ++ ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS')) ++ { print "1..0\n"; exit 0; } @@@ -21,8 -21,8 +22,24 @@@ use IO::Pipe; ++my $perl = './perl'; ++ $| = 1; --print "1..6\n"; ++print "1..10\n"; ++ ++$pipe = new IO::Pipe->reader($perl, '-e', 'print "not ok 1\n"'); ++while (<$pipe>) { ++ s/^not //; ++ print; ++} ++$pipe->close or print "# \$!=$!\nnot "; ++print "ok 2\n"; ++ ++$cmd = 'BEGIN{$SIG{ALRM} = sub {print "not ok 4\n"; exit}; alarm 10} s/not //'; ++$pipe = new IO::Pipe->writer($perl, '-pe', $cmd); ++print $pipe "not ok 3\n" ; ++$pipe->close or print "# \$!=$!\nnot "; ++print "ok 4\n"; $pipe = new IO::Pipe; @@@ -31,8 -31,8 +48,8 @@@ $pid = fork() if($pid) { $pipe->writer; -- print $pipe "Xk 1\n"; -- print $pipe "oY 2\n"; ++ print $pipe "Xk 5\n"; ++ print $pipe "oY 6\n"; $pipe->close; wait; } @@@ -45,7 -45,7 +62,7 @@@ elsif(defined $pid } else { -- die; ++ die "# error = $!"; } $pipe = new IO::Pipe; @@@ -67,8 -67,8 +84,8 @@@ elsif(defined $pid $stdout = bless \*STDOUT, "IO::Handle"; $stdout->fdopen($pipe,"w"); -- print STDOUT "not ok 3\n"; -- exec 'echo', 'not ok 4'; ++ print STDOUT "not ok 7\n"; ++ exec 'echo', 'not ok 8'; } else { @@@ -81,12 -81,12 +98,12 @@@ $pipe->writer $SIG{'PIPE'} = 'broken_pipe'; sub broken_pipe { -- print "ok 5\n"; ++ print "ok 9\n"; } --print $pipe "not ok 5\n"; ++print $pipe "not ok 9\n"; $pipe->close; --print "ok 6\n"; ++print "ok 10\n"; diff --cc t/lib/io_sock.t index c3701c5,c3701c5..06a973c --- a/t/lib/io_sock.t +++ b/t/lib/io_sock.t @@@ -10,10 -10,10 +10,11 @@@ BEGIN use Config; BEGIN { -- if(-d "lib" && -f "TEST") { -- if ( ($Config{'extensions'} !~ /\bSocket\b/ || -- $Config{'extensions'} !~ /\bIO\b/) && -- !(($^O eq 'VMS') && $Config{d_socket})) { ++ if (-d "lib" && -f "TEST") { ++ if (!$Config{'d_fork'} || ++ (($Config{'extensions'} !~ /\bSocket\b/ || ++ $Config{'extensions'} !~ /\bIO\b/) && ++ !(($^O eq 'VMS') && $Config{d_socket}))) { print "1..0\n"; exit 0; } diff --cc t/lib/open2.t index 1cf325a,1cf325a..a2e6a07 --- a/t/lib/open2.t +++ b/t/lib/open2.t @@@ -3,6 -3,6 +3,11 @@@ BEGIN { chdir 't' if -d 't'; @INC = '../lib'; ++ require Config; import Config; ++ unless ($Config{'d_fork'}) { ++ print "1..0\n"; ++ exit 0; ++ } # make warnings fatal $SIG{__WARN__} = sub { die @_ }; } @@@ -12,6 -12,6 +17,8 @@@ use IO::Handle use IPC::Open2; #require 'open2.pl'; use subs 'open2'; ++my $perl = './perl'; ++ sub ok { my ($n, $result, $info) = @_; if ($result) { @@@ -29,7 -29,7 +36,7 @@@ STDERR->autoflush print "1..7\n"; --ok 1, $pid = open2 'READ', 'WRITE', $^X, '-e', 'print scalar '; ++ok 1, $pid = open2 'READ', 'WRITE', $perl, '-e', 'print scalar '; ok 2, print WRITE "hi kid\n"; ok 3, eq "hi kid\n"; ok 4, close(WRITE), $!; diff --cc t/lib/open3.t index a5d7f2e,a5d7f2e..4258eec --- a/t/lib/open3.t +++ b/t/lib/open3.t @@@ -3,6 -3,6 +3,11 @@@ BEGIN { chdir 't' if -d 't'; @INC = '../lib'; ++ require Config; import Config; ++ unless ($Config{'d_fork'}) { ++ print "1..0\n"; ++ exit 0; ++ } # make warnings fatal $SIG{__WARN__} = sub { die @_ }; } @@@ -12,6 -12,6 +17,8 @@@ use IO::Handle use IPC::Open3; #require 'open3.pl'; use subs 'open3'; ++my $perl = './perl'; ++ sub ok { my ($n, $result, $info) = @_; if ($result) { @@@ -30,7 -30,7 +37,7 @@@ STDERR->autoflush print "1..21\n"; # basic --ok 1, $pid = open3 'WRITE', 'READ', 'ERROR', $^X, '-e', <<'EOF'; ++ok 1, $pid = open3 'WRITE', 'READ', 'ERROR', $perl, '-e', <<'EOF'; $| = 1; print scalar ; print STDERR "hi error\n"; @@@ -46,7 -46,7 +53,7 @@@ ok 8, $reaped_pid == $pid, $reaped_pid ok 9, $? == 0, $?; # read and error together, both named --$pid = open3 'WRITE', 'READ', 'READ', $^X, '-e', <<'EOF'; ++$pid = open3 'WRITE', 'READ', 'READ', $perl, '-e', <<'EOF'; $| = 1; print scalar ; print STDERR scalar ; @@@ -58,7 -58,7 +65,7 @@@ print scalar waitpid $pid, 0; # read and error together, error empty --$pid = open3 'WRITE', 'READ', '', $^X, '-e', <<'EOF'; ++$pid = open3 'WRITE', 'READ', '', $perl, '-e', <<'EOF'; $| = 1; print scalar ; print STDERR scalar ; @@@ -72,7 -72,7 +79,7 @@@ waitpid $pid, 0 # dup writer ok 14, pipe PIPE_READ, PIPE_WRITE; $pid = open3 '<&PIPE_READ', 'READ', '', -- $^X, '-e', 'print scalar '; ++ $perl, '-e', 'print scalar '; close PIPE_READ; print PIPE_WRITE "ok 15\n"; close PIPE_WRITE; @@@ -81,7 -81,7 +88,7 @@@ waitpid $pid, 0 # dup reader $pid = open3 'WRITE', '>&STDOUT', 'ERROR', -- $^X, '-e', 'print scalar '; ++ $perl, '-e', 'print scalar '; print WRITE "ok 16\n"; waitpid $pid, 0; @@@ -89,12 -89,12 +96,12 @@@ # stdout but putting stdout somewhere else, is a good case because it # used not to work. $pid = open3 'WRITE', 'READ', '>&STDOUT', -- $^X, '-e', 'print STDERR scalar '; ++ $perl, '-e', 'print STDERR scalar '; print WRITE "ok 17\n"; waitpid $pid, 0; # dup reader and error together, both named --$pid = open3 'WRITE', '>&STDOUT', '>&STDOUT', $^X, '-e', <<'EOF'; ++$pid = open3 'WRITE', '>&STDOUT', '>&STDOUT', $perl, '-e', <<'EOF'; $| = 1; print STDOUT scalar ; print STDERR scalar ; @@@ -104,7 -104,7 +111,7 @@@ print WRITE "ok 19\n" waitpid $pid, 0; # dup reader and error together, error empty --$pid = open3 'WRITE', '>&STDOUT', '', $^X, '-e', <<'EOF'; ++$pid = open3 'WRITE', '>&STDOUT', '', $perl, '-e', <<'EOF'; $| = 1; print STDOUT scalar ; print STDERR scalar ; diff --cc t/op/fork.t index 598310b,598310b..9790ff0 --- a/t/op/fork.t +++ b/t/op/fork.t @@@ -2,6 -2,6 +2,16 @@@ # $RCSfile: fork.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:53 $ ++BEGIN { ++ chdir 't' if -d 't'; ++ @INC = '../lib'; ++ require Config; import Config; ++ unless ($Config{'d_fork'}) { ++ print "1..0\n"; ++ exit 0; ++ } ++} ++ $| = 1; print "1..2\n"; diff --cc t/op/magic.t index a050510,f12f67b..bb65ae8 --- a/t/op/magic.t +++ b/t/op/magic.t @@@ -7,7 -7,7 +7,7 @@@ BEGIN $| = 1; chdir 't' if -d 't'; @INC = '../lib'; - $SIG{__WARN__} = sub { die @_ }; - $SIG{__WARN__} = sub { die "dying on warning: ", @_ }; ++ $SIG{__WARN__} = sub { die "Dying on warning: ", @_ }; } sub ok { @@@ -97,19 -97,21 +97,33 @@@ ok 17, $@ eq "foo\n", $@ ok 18, $$ > 0, $$; # $^X and $0 --$script = './show-shebang'; ++if ($^O eq 'qnx') { ++ chomp($wd = `pwd`); ++} ++else { ++ $wd = '.'; ++} ++$script = "$wd/show-shebang"; ++if ($^O eq 'os2') { ++ # Started by ksh, which adds suffixes '.exe' and '.' to perl and script ++ $s = "\$^X is $wd/perl.exe, \$0 is $script.\n"; ++} ++else { ++ $s = "\$^X is $wd/perl, \$0 is $script\n"; ++} ok 19, open(SCRIPT, ">$script"), $!; --ok 20, print(SCRIPT <<'EOF'), $!; --#!./perl ++ok 20, print(SCRIPT < $#Locale); $greater = join('', @Locale[$from..$to]); -- if (not ($lesser lt $greater) or -- not ($lesser le $greater) or -- not ($lesser ne $greater) or -- ($lesser eq $greater) or -- ($lesser ge $greater) or -- ($lesser gt $greater) or -- ($greater lt $lesser ) or -- ($greater le $lesser ) or -- not ($greater ne $lesser ) or -- ($greater eq $lesser ) or -- not ($greater ge $lesser ) or -- not ($greater gt $lesser ) or -- # Well, these two are sort of redundant because @Locale -- # was derived using cmp. -- not (($lesser cmp $greater) == -1) or -- not (($greater cmp $lesser ) == 1) -- ) { ++ @test = ++ ( ++ 'not ($lesser lt $greater)', # 0 ++ 'not ($lesser le $greater)', # 1 ++ 'not ($lesser ne $greater)', # 2 ++ ' ($lesser eq $greater)', # 3 ++ ' ($lesser ge $greater)', # 4 ++ ' ($lesser gt $greater)', # 5 ++ ' ($greater lt $lesser )', # 6 ++ ' ($greater le $lesser )', # 7 ++ 'not ($greater ne $lesser )', # 8 ++ ' ($greater eq $lesser )', # 9 ++ 'not ($greater ge $lesser )', # 10 ++ 'not ($greater gt $lesser )', # 11 ++ # Well, these two are sort of redundant ++ # because @Locale was derived using cmp. ++ 'not (($lesser cmp $greater) == -1)', # 12 ++ 'not (($greater cmp $lesser ) == 1)' # 13 ++ ); ++ @test{@test} = 0 x @test; ++ $test = 0; ++ for my $ti (@test) { $test{$ti} = eval $ti ; $test ||= $test{$ti} } ++ if ($test) { ++ print "# failed 104 at:\n"; ++ print "# lesser = '$lesser'\n"; ++ print "# greater = '$greater'\n"; ++ print "# (greater) from = $from, to = $to\n"; ++ for my $ti (@test) { ++ printf("# %-40s %-4s", $ti, ++ $test{$ti} ? 'FAIL' : 'ok'); ++ if ($ti =~ /\(\.*(\$.+ +cmp +\$[^\)]+)\.*\)/) { ++ printf("(%s == %4d)", $1, eval $1); ++ } ++ print "\n"; ++ } ++ print 'not '; last; } diff --cc toke.c index 24805a7,af85355..10f61f1 --- a/toke.c +++ b/toke.c @@@ -1579,35 -1579,35 +1579,31 @@@ yylex( #endif /* ALTERNATE_SHEBANG */ } if (d) { -- /* -- * HP-UX (at least) sets argv[0] to the script name, -- * which makes $^X incorrect. And Digital UNIX and Linux, -- * at least, set argv[0] to the basename of the Perl -- * interpreter. So, having found "#!", we'll set it right. -- */ -- SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV)); char *ipath; -- char *ibase; ++ char *ipathend; -- while (*d == ' ' || *d == '\t') ++ while (isSPACE(*d)) d++; ipath = d; -- ibase = Nullch; -- while (*d && !isSPACE(*d)) { -- if (*d++ == '/') -- ibase = d; ++ while (*d && !isSPACE(*d)) ++ d++; ++ ipathend = d; ++ ++#ifdef ARG_ZERO_IS_SCRIPT ++ if (ipathend > ipath) { ++ /* ++ * HP-UX (at least) sets argv[0] to the script name, ++ * which makes $^X incorrect. And Digital UNIX and Linux, ++ * at least, set argv[0] to the basename of the Perl ++ * interpreter. So, having found "#!", we'll set it right. ++ */ ++ SV *x = GvSV(gv_fetchpv("\030", TRUE, SVt_PV)); ++ assert(SvPOK(x) || SvGMAGICAL(x)); ++ if (sv_eq(x, GvSV(curcop->cop_filegv))) ++ sv_setpvn(x, ipath, ipathend - ipath); ++ TAINT_NOT; /* $^X is always tainted, but that's OK */ } -- assert(SvPOK(x) || SvGMAGICAL(x)); -- if (sv_eq(x, GvSV(curcop->cop_filegv)) -- || (ibase -- && SvCUR(x) == (d - ibase) -- && strnEQ(SvPVX(x), ibase, d - ibase))) -- sv_setpvn(x, ipath, d - ipath); -- /* -- * $^X is always tainted, but taintedness must be off -- * when parsing code, so forget we ever saw it. -- */ -- TAINT_NOT; ++#endif /* ARG_ZERO_IS_SCRIPT */ /* * Look for options. @@@ -1624,10 -1624,10 +1620,9 @@@ * other interpreter. Similarly, if "perl" is there, but * not in the first 'word' of the line, we assume the line * contains the start of the Perl program. -- * This isn't foolproof, but it's generally a good guess. */ if (d && *s != '#') { -- char *c = s; ++ char *c = ipath; while (*c && !strchr("; \t\r\n\f\v#", *c)) c++; if (c < d) @@@ -1635,23 -1635,23 +1630,18 @@@ else *s = '#'; /* Don't try to parse shebang line */ } --#endif ++#endif /* ALTERNATE_SHEBANG */ if (!d && *s == '#' && ++ ipathend > ipath && !minus_c && !instr(s,"indir") && instr(origargv[0],"perl")) { char **newargv; -- char *cmd; -- s += 2; -- if (*s == ' ') -- s++; -- cmd = s; -- while (s < bufend && !isSPACE(*s)) -- s++; -- *s++ = '\0'; ++ *ipathend = '\0'; ++ s = ipathend + 1; while (s < bufend && isSPACE(*s)) s++; if (s < bufend) { @@@ -1664,9 -1664,9 +1654,9 @@@ } else newargv = origargv; -- newargv[0] = cmd; -- execv(cmd,newargv); -- croak("Can't exec %s", cmd); ++ newargv[0] = ipath; ++ execv(ipath, newargv); ++ croak("Can't exec %s", ipath); } if (d) { int oldpdb = perldb; @@@ -4533,9 -4533,9 +4523,10 @@@ register PMOP *pm return; } } -- if (!pm->op_pmshort || /* promote the better string */ -- ((pm->op_pmflags & PMf_SCANFIRST) && -- (SvCUR(pm->op_pmshort) < SvCUR(pm->op_pmregexp->regmust)) )){ ++ /* promote the better string */ ++ if ((!pm->op_pmshort && !(pm->op_pmregexp->reganch & ROPT_ANCH)) || ++ ((pm->op_pmflags & PMf_SCANFIRST) && ++ (SvCUR(pm->op_pmshort) < SvCUR(pm->op_pmregexp->regmust)))) { SvREFCNT_dec(pm->op_pmshort); /* ok if null */ pm->op_pmshort = pm->op_pmregexp->regmust; pm->op_pmslen = SvCUR(pm->op_pmshort); @@@ -5069,7 -5070,7 +5061,8 @@@ set_csh( } int --start_subparse(flags) ++start_subparse(is_format, flags) ++I32 is_format; U32 flags; { int oldsavestack_ix = savestack_ix; @@@ -5092,7 -5093,7 +5085,7 @@@ SAVEI32(pad_reset_pending); compcv = (CV*)NEWSV(1104,0); -- sv_upgrade((SV *)compcv, (flags & CVf_FORMAT) ? SVt_PVFM : SVt_PVCV); ++ sv_upgrade((SV *)compcv, is_format ? SVt_PVFM : SVt_PVCV); CvFLAGS(compcv) |= flags; comppad = newAV(); diff --cc util.c index 95d34e2,95d34e2..6097741 --- a/util.c +++ b/util.c @@@ -1191,15 -1191,15 +1191,19 @@@ die(pat, va_alist LEAVE; if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) { dSP; -- SV *msg = sv_2mortal(newSVpv(message, 0)); ++ SV *msg; ++ ++ ENTER; ++ msg = newSVpv(message, 0); ++ SvREADONLY_on(msg); ++ SAVEFREESV(msg); PUSHMARK(sp); XPUSHs(msg); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); -- /* It's okay for the __DIE__ hook to modify the message. */ -- message = SvPV(msg, na); ++ LEAVE; } } @@@ -1243,15 -1243,15 +1247,19 @@@ croak(pat, va_alist LEAVE; if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) { dSP; -- SV *msg = sv_2mortal(newSVpv(message, 0)); ++ SV *msg; ++ ++ ENTER; ++ msg = newSVpv(message, 0); ++ SvREADONLY_on(msg); ++ SAVEFREESV(msg); PUSHMARK(sp); XPUSHs(msg); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); -- /* It's okay for the __DIE__ hook to modify the message. */ -- message = SvPV(msg, na); ++ LEAVE; } } if (in_eval) { @@@ -1311,10 -1311,10 +1319,19 @@@ warn(pat,va_alist LEAVE; if (cv && !CvDEPTH(cv) && (CvROOT(cv) || CvXSUB(cv))) { dSP; ++ SV *msg; ++ ++ ENTER; ++ msg = newSVpv(message, 0); ++ SvREADONLY_on(msg); ++ SAVEFREESV(msg); ++ PUSHMARK(sp); -- XPUSHs(sv_2mortal(newSVpv(message,0))); ++ XPUSHs(msg); PUTBACK; perl_call_sv((SV*)cv, G_DISCARD); ++ ++ LEAVE; return; } } diff --cc utils/Makefile index 958dc03,958dc03..1f8c5f4 --- a/utils/Makefile +++ b/utils/Makefile @@@ -12,7 -12,7 +12,17 @@@ all: $(plextract $(plextract): $(PERL) -I../lib $@.PL --splain: ../lib/diagnostics.pm ++c2ph: c2ph.PL ++ ++h2ph: h2ph.PL ++ ++perlbug: perlbug.PL ++ ++perldoc: perldoc.PL ++ ++pl2pm: pl2pm.PL ++ ++splain: splain.PL ../lib/diagnostics.pm clean: diff --cc utils/c2ph.PL index 9f80bc0,9f80bc0..bd4da34 --- a/utils/c2ph.PL +++ b/utils/c2ph.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; diff --cc utils/h2ph.PL index bfd606d,bfd606d..2aa57ad --- a/utils/h2ph.PL +++ b/utils/h2ph.PL @@@ -15,6 -15,6 +15,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; diff --cc utils/h2xs.PL index 466fdab,466fdab..6865809 --- a/utils/h2xs.PL +++ b/utils/h2xs.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; diff --cc utils/perlbug.PL index b44502b,b44502b..9645195 --- a/utils/perlbug.PL +++ b/utils/perlbug.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; @@@ -48,7 -48,7 +49,7 @@@ use strict sub paraprint; --my($Version) = "1.15"; ++my($Version) = "1.16"; # Changed in 1.06 to skip Mail::Send and Mail::Util if not available. # Changed in 1.07 to see more sendmail execs, and added pipe output. @@@ -66,6 -66,6 +67,7 @@@ # helpful information. Also let file read fail gracefully. # Changed in 1.15 to add warnings to stop people using perlbug for non-bugs. # Also report selected environment variables. ++# Changed in 1.16 to include @INC, and allow user to re-edit if no changes. # TODO: Allow the user to re-name the file on mail failure, and # make sure failure (transmission-wise) of Mail::Send is @@@ -73,7 -73,7 +75,7 @@@ my( $file, $usefile, $cc, $address, $perlbug, $testaddress, $filename, $subject, $from, $verbose, $ed, -- $fh, $me, $Is_VMS, $msg, $body, $andcc ); ++ $fh, $me, $Is_VMS, $msg, $body, $andcc, %REP); Init(); @@@ -176,7 -176,7 +178,8 @@@ EO paraprint <) { ++ s/\s+//g; ++ $REP{$_}++; ++ } ++ close(REP); ++ } sub Dump { @@@ -415,8 -415,8 +437,7 @@@ print OUT <) { ++ s/\s+//g; ++ $unseen++ if ($_ ne '' and not exists $REP{$_}); ++ } ++ ++ while ($unseen == 0) { ++ paraprint <); ++ if ($action =~ /^[re]/i) { # etry dit ++ goto tryagain; ++ } elsif ($action =~ /^[cq]/i) { # ancel, uit ++ Cancel(); ++ } ++ } ++ ++} ++ ++sub Cancel { ++ 1 while unlink($filename); # remove all versions under VMS ++ print "\nCancelling.\n"; ++ exit(0); } sub NowWhat { @@@ -572,9 -572,9 +638,7 @@@ EO Edit(); #system("$ed $filename"); } elsif( $action =~ /^[qc]/i ) { # ancel, uit -- 1 while unlink($filename); # remove all versions under VMS -- print "\nCancelling.\n"; -- exit(0); ++ Cancel(); } elsif( $action =~ /^s/ ) { paraprint <$file" or die "Can't create $file: $!"; diff --cc utils/pl2pm.PL index 7c187ad,7c187ad..55a8d2e --- a/utils/pl2pm.PL +++ b/utils/pl2pm.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; diff --cc utils/splain.PL index ef7c457,ef7c457..75b5e2f --- a/utils/splain.PL +++ b/utils/splain.PL @@@ -15,6 -15,6 +15,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; # Open input file before creating output file. $IN = '../lib/diagnostics.pm'; diff --cc vms/Makefile index bf6a428,bf6a428..f84139e --- a/vms/Makefile +++ b/vms/Makefile @@@ -32,7 -32,7 +32,7 @@@ ARCH = VMS_VA OBJVAL = $@ # Updated by fndvers.com -- do not edit by hand --PERL_VERSION = 5_00321# ++PERL_VERSION = 5_00323# ARCHDIR = [.lib.$(ARCH).$(PERL_VERSION)] @@@ -159,8 -159,8 +159,10 @@@ CRTLOPTS =,$(CRTL)/Option $(XSUBPP) $< >$(MMS$SOURCE_NAME).c $(CC) $(CFLAGS) $(MMS$SOURCE_NAME).c ++utils1 = [.lib.pod]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com [.utils]h2xs.com [.lib]perlbug.com ++utils2 = [.lib]splain.com [.utils]pl2pm.com --all : base extras libmods utils podxform archcorefiles preplibrary perlpods ++all : base extras x2p archcorefiles preplibrary perlpods @ $(NOOP) base : miniperl perl @ $(NOOP) @@@ -168,9 -168,9 +170,11 @@@ extras : Fcntl IO Opcode $(POSIX) libmo @ $(NOOP) libmods : [.lib]Config.pm $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm @ $(NOOP) --utils : [.lib.pod]perldoc [.lib.ExtUtils]Miniperl.pm [.utils]c2ph [.utils]h2ph [.utils]h2xs [.lib]perlbug ++utils : $(utils1) $(utils2) @ $(NOOP) --podxform : [.lib.pod]pod2text [.lib.pod]pod2html [.lib.pod]pod2latex [.lib.pod]pod2man ++podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com ++ @ $(NOOP) ++x2p : [.x2p]a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com @ $(NOOP) pod1 = [.lib.pod]perl.pod [.lib.pod]perlapio.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod @@@ -377,50 -377,50 +381,59 @@@ IO : [.lib]IO.pm [.lib.IO]File.pm [.lib [.lib.pod]perldoc : [.utils]perldoc.PL $(ARCHDIR)Config.pm @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) [.utils]perldoc.PL -- Copy/Log [.utils]perldoc $@ ++ Copy/Log [.utils]perldoc.com $@ [.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c $(ARCHDIR)Config.pm $(MINIPERL) Minimod.PL >$@ --[.utils]c2ph : [.utils]c2ph.PL $(ARCHDIR)Config.pm ++[.utils]c2ph.com : [.utils]c2ph.PL $(ARCHDIR)Config.pm $(MINIPERL) [.utils]c2ph.PL --[.utils]h2ph : [.utils]h2ph.PL $(ARCHDIR)Config.pm ++[.utils]h2ph.com : [.utils]h2ph.PL $(ARCHDIR)Config.pm $(MINIPERL) [.utils]h2ph.PL --[.utils]h2xs : [.utils]h2xs.PL $(ARCHDIR)Config.pm ++[.utils]h2xs.com : [.utils]h2xs.PL $(ARCHDIR)Config.pm $(MINIPERL) [.utils]h2xs.PL --[.lib]perlbug : [.utils]perlbug.PL $(ARCHDIR)Config.pm ++[.lib]perlbug.com : [.utils]perlbug.PL $(ARCHDIR)Config.pm $(MINIPERL) [.utils]perlbug.PL -- Rename/Log [.utils]perlbug $@ ++ Rename/Log [.utils]perlbug.com $@ --[.utils]pl2pm : [.utils]pl2pm.PL $(ARCHDIR)Config.pm ++[.utils]pl2pm.com : [.utils]pl2pm.PL $(ARCHDIR)Config.pm $(MINIPERL) [.utils]pl2pm.PL --[.lib]splain : [.utils]splain.PL $(ARCHDIR)Config.pm ++[.lib]splain.com : [.utils]splain.PL $(ARCHDIR)Config.pm $(MINIPERL) [.utils]splain.PL -- Rename/Log [.utils]splain $@ ++ Rename/Log [.utils]splain.com $@ ++ ++[.x2p]find2perl.com : [.x2p]find2perl.PL $(ARCHDIR)Config.pm ++ $(MINIPERL) [.x2p]find2perl.PL ++ ++[.x2p]s2p.com : [.x2p]s2p.PL $(ARCHDIR)Config.pm ++ $(MINIPERL) [.x2p]s2p.PL --[.lib.pod]pod2html : [.pod]pod2html.PL $(ARCHDIR)Config.pm ++[.x2p]$(DBG)a2p$(E) : [.x2p]a2p$(O), [.x2p]hash$(O), [.x2p]str$(O), [.x2p]util$(O), [.x2p]walk$(O) ++ Link $(LINKFLAGS) /Exe=$@ $(MMS$SOURCE_LIST) $(CRTLOPTS) ++ ++[.lib.pod]pod2html.com : [.pod]pod2html.PL $(ARCHDIR)Config.pm @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) [.pod]pod2html.PL -- Rename/Log [.pod]pod2html $@ ++ Rename/Log [.pod]pod2html.com $@ --[.lib.pod]pod2latex : [.pod]pod2latex.PL $(ARCHDIR)Config.pm ++[.lib.pod]pod2latex.com : [.pod]pod2latex.PL $(ARCHDIR)Config.pm @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) [.pod]pod2latex.PL -- Rename/Log [.pod]pod2latex $@ ++ Rename/Log [.pod]pod2latex.com $@ --[.lib.pod]pod2man : [.pod]pod2man.PL $(ARCHDIR)Config.pm ++[.lib.pod]pod2man.com : [.pod]pod2man.PL $(ARCHDIR)Config.pm @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) [.pod]pod2man.PL -- Rename/Log [.pod]pod2man $@ ++ Rename/Log [.pod]pod2man.com $@ --[.lib.pod]pod2text : [.pod]pod2text.PL $(ARCHDIR)Config.pm ++[.lib.pod]pod2text.com : [.pod]pod2text.PL $(ARCHDIR)Config.pm @ If f$$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) [.pod]pod2text.PL -- Rename/Log [.pod]pod2text $@ ++ Rename/Log [.pod]pod2text.com $@ preplibrary : $(MINIPERL_EXE) $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm $(SOCKPM) @ Write sys$$Output "Autosplitting Perl library . . ." @@@ -601,6 -601,6 +614,9 @@@ perly.h : [.vms]perly_h.vm perly$(O) : perly.c, perly.h, $(h) $(CC) $(CFLAGS) perly.c ++[.t.lib]vmsfspec.t : [.vms.ext]filespec.t ++ Copy/Log/NoConfirm [.vms.ext]filespec.t $@ ++ test : all - @[.VMS]Test.Com "$(E)" @@@ -1378,6 -1378,6 +1394,42 @@@ globals$(O) : scope. globals$(O) : sv.h globals$(O) : vmsish.h globals$(O) : util.h ++[.x2p]a2p$(O) : [.x2p]a2p.c ++[.x2p]a2p$(O) : [.x2p]a2py.c ++[.x2p]a2p$(O) : [.x2p]INTERN.h ++[.x2p]a2p$(O) : [.x2p]a2p.h ++[.x2p]a2p$(O) : [.x2p]hash.h ++[.x2p]a2p$(O) : [.x2p]str.h ++[.x2p]a2p$(O) : handy.h ++[.x2p]hash$(O) : [.x2p]hash.c ++[.x2p]hash$(O) : [.x2p]EXTERN.h ++[.x2p]hash$(O) : [.x2p]a2p.h ++[.x2p]hash$(O) : [.x2p]hash.h ++[.x2p]hash$(O) : [.x2p]str.h ++[.x2p]hash$(O) : handy.h ++[.x2p]hash$(O) : [.x2p]util.h ++[.x2p]str$(O) : [.x2p]str.c ++[.x2p]str$(O) : [.x2p]EXTERN.h ++[.x2p]str$(O) : [.x2p]a2p.h ++[.x2p]str$(O) : [.x2p]hash.h ++[.x2p]str$(O) : [.x2p]str.h ++[.x2p]str$(O) : handy.h ++[.x2p]str$(O) : [.x2p]util.h ++[.x2p]util$(O) : [.x2p]util.c ++[.x2p]util$(O) : [.x2p]EXTERN.h ++[.x2p]util$(O) : [.x2p]a2p.h ++[.x2p]util$(O) : [.x2p]hash.h ++[.x2p]util$(O) : [.x2p]str.h ++[.x2p]util$(O) : handy.h ++[.x2p]util$(O) : [.x2p]INTERN.h ++[.x2p]util$(O) : [.x2p]util.h ++[.x2p]walk$(O) : [.x2p]walk.c ++[.x2p]walk$(O) : [.x2p]EXTERN.h ++[.x2p]walk$(O) : [.x2p]a2p.h ++[.x2p]walk$(O) : [.x2p]hash.h ++[.x2p]walk$(O) : [.x2p]str.h ++[.x2p]walk$(O) : handy.h ++[.x2p]walk$(O) : [.x2p]util.h config.h : [.vms]config.vms Copy/Log/NoConfirm [.vms]config.vms []config.h @@@ -1442,7 -1442,7 +1494,7 @@@ clean : tid - $(MMS) clean Set Default [--] - If f$$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*/Exclude=PerlShr_*.Opt -- - If f$$Search("*$(O);*") .nes."" Then Delete/NoConfirm/Log *$(O);* ++ - If f$$Search("[...]*$(O);*") .nes."" Then Delete/NoConfirm/Log [...]*$(O);* - If f$$Search("Config.H").nes."" Then Delete/NoConfirm/Log Config.H;* - If f$$Search("Config.SH").nes."" Then Delete/NoConfirm/Log Config.SH;* - If f$$Search(f$$Parse("sys$$Disk:[]","$(SOCKH)")).nes."" Then Delete/NoConfirm/Log $(SOCKH);* @@@ -1484,10 -1484,10 +1536,11 @@@ realclean : clea - If f$$Search("$(ARCHDIR)Config.pm").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config.pm;* - If f$$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;* - If f$$Search("[.utils]*.").nes."" Then Delete/NoConfirm/Log [.utils]*.;*/Exclude=Makefile. ++ - If f$$Search("[.x2p]*.").nes."" Then Delete/NoConfirm/Log [.x2p]*.;*/Exclude=Makefile. - If f$$Search("[.lib.pod]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pod]*.pod;* - If f$$Search("[.lib.pod]perldoc.").nes."" Then Delete/NoConfirm/Log [.lib.pod]perldoc.;* -- - If f$$Search("[.lib.pod]pod2*.").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.;* -- - If f$$Search("*$(E)").nes."" Then Delete/NoConfirm/Log *$(E);* ++ - If f$$Search("[.lib.pod]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.com;* ++ - If f$$Search("[...]*$(E)").nes."" Then Delete/NoConfirm/Log [...]*$(E);* cleansrc : clean - If f$$Search("*.C;-1").nes."" Then Purge/NoConfirm/Log *.C diff --cc vms/config.vms index a7460e5,a7460e5..75bf302 --- a/vms/config.vms +++ b/vms/config.vms @@@ -76,9 -76,9 +76,17 @@@ * when Perl is built. Please do not change it by hand; make * any changes to FndVers.Com instead. */ --#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00321" /**/ ++#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00323" /**/ #define ARCHLIB ARCHLIB_EXP /*config-skip*/ ++/* ARCHNAME: ++ * This symbol holds a string representing the architecture name. ++ * It may be used to construct an architecture-dependant pathname ++ * where library files may be held under a private library, for ++ * instance. ++ */ ++#define ARCHNAME "VMS_VAX" /**/ ++ /* BINCOMPAT3: * This symbol, if defined, indicates that Perl 5.004 should be * binary-compatible with Perl 5.003. @@@ -530,16 -530,16 +538,6 @@@ # define FILE_cnt(fp) ((*fp)->_cnt) #endif --/* FILE_filbuf: -- * This macro is used to access the internal stdio _filbuf function -- * (or equivalent), if STDIO_CNT_LVALUE and STDIO_PTR_LVALUE -- * are defined. It is typically either _filbuf or __filbuf. -- * This macro will only be defined if both STDIO_CNT_LVALUE and -- * STDIO_PTR_LVALUE are defined. -- */ --#define FILE_filbuf(fp) do { register int c; if ((c = fgetc(fp)) != EOF) \ -- ungetc(c,(fp)); } while (0); -- /* FILE_base: * This macro is used to access the _base field (or equivalent) of the * FILE structure pointed to by its argument. This macro will always be diff --cc vms/descrip.mms index 32200a3,32200a3..c66736f --- a/vms/descrip.mms +++ b/vms/descrip.mms @@@ -65,7 -65,7 +65,7 @@@ OBJVAL = $(MMS$TARGET_NAME)$(O .endif # Updated by fndvers.com -- do not edit by hand --PERL_VERSION = 5_00321# ++PERL_VERSION = 5_00323# ARCHDIR = [.lib.$(ARCH).$(PERL_VERSION)] @@@ -265,8 -265,8 +265,10 @@@ CRTLOPTS =,$(CRTL)/Option $(CC) $(CFLAGS) $(MMS$SOURCE_NAME).c .endif ++utils1 = [.lib.pod]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com [.utils]h2xs.com [.lib]perlbug.com ++utils2 = [.lib]splain.com [.utils]pl2pm.com --all : base extras libmods utils podxform archcorefiles preplibrary perlpods ++all : base extras x2p archcorefiles preplibrary perlpods @ $(NOOP) base : miniperl perl @ $(NOOP) @@@ -274,9 -274,9 +276,11 @@@ extras : Fcntl IO Opcode $(POSIX) libmo @ $(NOOP) libmods : [.lib]Config.pm $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm @ $(NOOP) --utils : [.lib.pod]perldoc [.lib.ExtUtils]Miniperl.pm [.utils]c2ph [.utils]h2ph [.utils]h2xs [.lib]perlbug ++utils : $(utils1) $(utils2) @ $(NOOP) --podxform : [.lib.pod]pod2text [.lib.pod]pod2html [.lib.pod]pod2latex [.lib.pod]pod2man ++podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com ++ @ $(NOOP) ++x2p : [.x2p]a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com @ $(NOOP) pod1 = [.lib.pod]perl.pod [.lib.pod]perlapio.pod [.lib.pod]perlbook.pod [.lib.pod]perlbot.pod [.lib.pod]perlcall.pod @@@ -498,50 -498,50 +502,59 @@@ IO : [.lib]IO.pm [.lib.IO]File.pm [.lib [.lib.pod]perldoc : [.utils]perldoc.PL $(ARCHDIR)Config.pm @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) $(MMS$SOURCE) -- Copy/Log [.utils]perldoc $(MMS$TARGET) ++ Copy/Log [.utils]perldoc.com $(MMS$TARGET) [.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c $(ARCHDIR)Config.pm $(MINIPERL) $(MMS$SOURCE) >$(MMS$TARGET) --[.utils]c2ph : [.utils]c2ph.PL $(ARCHDIR)Config.pm ++[.utils]c2ph.com : [.utils]c2ph.PL $(ARCHDIR)Config.pm ++ $(MINIPERL) $(MMS$SOURCE) ++ ++[.utils]h2ph.com : [.utils]h2ph.PL $(ARCHDIR)Config.pm ++ $(MINIPERL) $(MMS$SOURCE) ++ ++[.utils]h2xs.com : [.utils]h2xs.PL $(ARCHDIR)Config.pm $(MINIPERL) $(MMS$SOURCE) --[.utils]h2ph : [.utils]h2ph.PL $(ARCHDIR)Config.pm ++[.lib]perlbug.com : [.utils]perlbug.PL $(ARCHDIR)Config.pm $(MINIPERL) $(MMS$SOURCE) ++ Rename/Log [.utils]perlbug.com $(MMS$TARGET) --[.utils]h2xs : [.utils]h2xs.PL $(ARCHDIR)Config.pm ++[.utils]pl2pm.com : [.utils]pl2pm.PL $(ARCHDIR)Config.pm $(MINIPERL) $(MMS$SOURCE) --[.lib]perlbug : [.utils]perlbug.PL $(ARCHDIR)Config.pm ++[.lib]splain.com : [.utils]splain.PL $(ARCHDIR)Config.pm $(MINIPERL) $(MMS$SOURCE) -- Rename/Log [.utils]perlbug $(MMS$TARGET) ++ Rename/Log [.utils]splain.com $(MMS$TARGET) --[.utils]pl2pm : [.utils]pl2pm.PL $(ARCHDIR)Config.pm ++[.x2p]find2perl.com : [.x2p]find2perl.PL $(ARCHDIR)Config.pm $(MINIPERL) $(MMS$SOURCE) --[.lib]splain : [.utils]splain.PL $(ARCHDIR)Config.pm ++[.x2p]s2p.com : [.x2p]s2p.PL $(ARCHDIR)Config.pm $(MINIPERL) $(MMS$SOURCE) -- Rename/Log [.utils]splain $(MMS$TARGET) --[.lib.pod]pod2html : [.pod]pod2html.PL $(ARCHDIR)Config.pm ++[.x2p]$(DBG)a2p$(E) : [.x2p]a2p$(O), [.x2p]hash$(O), [.x2p]str$(O), [.x2p]util$(O), [.x2p]walk$(O) ++ Link $(LINKFLAGS) /Exe=$(MMS$TARGET) $(MMS$SOURCE_LIST) $(CRTLOPTS) ++ ++[.lib.pod]pod2html.com : [.pod]pod2html.PL $(ARCHDIR)Config.pm @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) $(MMS$SOURCE) -- Rename/Log [.pod]pod2html $(MMS$TARGET) ++ Rename/Log [.pod]pod2html.com $(MMS$TARGET) --[.lib.pod]pod2latex : [.pod]pod2latex.PL $(ARCHDIR)Config.pm ++[.lib.pod]pod2latex.com : [.pod]pod2latex.PL $(ARCHDIR)Config.pm @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) $(MMS$SOURCE) -- Rename/Log [.pod]pod2latex $(MMS$TARGET) ++ Rename/Log [.pod]pod2latex.com $(MMS$TARGET) --[.lib.pod]pod2man : [.pod]pod2man.PL $(ARCHDIR)Config.pm ++[.lib.pod]pod2man.com : [.pod]pod2man.PL $(ARCHDIR)Config.pm @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) $(MMS$SOURCE) -- Rename/Log [.pod]pod2man $(MMS$TARGET) ++ Rename/Log [.pod]pod2man.com $(MMS$TARGET) --[.lib.pod]pod2text : [.pod]pod2text.PL $(ARCHDIR)Config.pm ++[.lib.pod]pod2text.com : [.pod]pod2text.PL $(ARCHDIR)Config.pm @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod] $(MINIPERL) $(MMS$SOURCE) -- Rename/Log [.pod]pod2text $(MMS$TARGET) ++ Rename/Log [.pod]pod2text.com $(MMS$TARGET) preplibrary : $(MINIPERL_EXE) $(ARCHDIR)Config.pm [.lib]DynaLoader.pm [.lib.VMS]Filespec.pm $(SOCKPM) @ Write Sys$Output "Autosplitting Perl library . . ." @@@ -749,6 -749,6 +762,9 @@@ perly$(O) : perly.c, perly.h, $(h $(CC) $(CFLAGS) $(MMS$SOURCE) .endif ++[.t.lib]vmsfspec.t : [.vms.ext]filespec.t ++ Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET) ++ test : all - @[.VMS]Test.Com "$(E)" @@@ -1533,6 -1533,6 +1549,42 @@@ globals$(O) : scope. globals$(O) : sv.h globals$(O) : vmsish.h globals$(O) : util.h ++[.x2p]a2p$(O) : [.x2p]a2p.c ++[.x2p]a2p$(O) : [.x2p]a2py.c ++[.x2p]a2p$(O) : [.x2p]INTERN.h ++[.x2p]a2p$(O) : [.x2p]a2p.h ++[.x2p]a2p$(O) : [.x2p]hash.h ++[.x2p]a2p$(O) : [.x2p]str.h ++[.x2p]a2p$(O) : handy.h ++[.x2p]hash$(O) : [.x2p]hash.c ++[.x2p]hash$(O) : [.x2p]EXTERN.h ++[.x2p]hash$(O) : [.x2p]a2p.h ++[.x2p]hash$(O) : [.x2p]hash.h ++[.x2p]hash$(O) : [.x2p]str.h ++[.x2p]hash$(O) : handy.h ++[.x2p]hash$(O) : [.x2p]util.h ++[.x2p]str$(O) : [.x2p]str.c ++[.x2p]str$(O) : [.x2p]EXTERN.h ++[.x2p]str$(O) : [.x2p]a2p.h ++[.x2p]str$(O) : [.x2p]hash.h ++[.x2p]str$(O) : [.x2p]str.h ++[.x2p]str$(O) : handy.h ++[.x2p]str$(O) : [.x2p]util.h ++[.x2p]util$(O) : [.x2p]util.c ++[.x2p]util$(O) : [.x2p]EXTERN.h ++[.x2p]util$(O) : [.x2p]a2p.h ++[.x2p]util$(O) : [.x2p]hash.h ++[.x2p]util$(O) : [.x2p]str.h ++[.x2p]util$(O) : handy.h ++[.x2p]util$(O) : [.x2p]INTERN.h ++[.x2p]util$(O) : [.x2p]util.h ++[.x2p]walk$(O) : [.x2p]walk.c ++[.x2p]walk$(O) : [.x2p]EXTERN.h ++[.x2p]walk$(O) : [.x2p]a2p.h ++[.x2p]walk$(O) : [.x2p]hash.h ++[.x2p]walk$(O) : [.x2p]str.h ++[.x2p]walk$(O) : handy.h ++[.x2p]walk$(O) : [.x2p]util.h .endif # !LINK_ONLY config.h : [.vms]config.vms @@@ -1603,7 -1603,7 +1655,7 @@@ clean : tid Set Default [--] .endif - If F$Search("*.Opt").nes."" Then Delete/NoConfirm/Log *.Opt;*/Exclude=PerlShr_*.Opt -- - If F$Search("*$(O);*") .nes."" Then Delete/NoConfirm/Log *$(O);* ++ - If F$Search("[...]*$(O);*") .nes."" Then Delete/NoConfirm/Log [...]*$(O);* - If F$Search("Config.H").nes."" Then Delete/NoConfirm/Log Config.H;* - If F$Search("Config.SH").nes."" Then Delete/NoConfirm/Log Config.SH;* - If F$Search(F$Parse("Sys$Disk:[]","$(SOCKH)")).nes."" Then Delete/NoConfirm/Log $(SOCKH);* @@@ -1650,10 -1650,10 +1702,11 @@@ realclean : clea - If F$Search("$(ARCHDIR)Config.pm").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config.pm;* - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;* - If F$Search("[.utils]*.").nes."" Then Delete/NoConfirm/Log [.utils]*.;*/Exclude=Makefile. ++ - If F$Search("[.x2p]*.").nes."" Then Delete/NoConfirm/Log [.x2p]*.;*/Exclude=Makefile. - If F$Search("[.lib.pod]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pod]*.pod;* - If F$Search("[.lib.pod]perldoc.").nes."" Then Delete/NoConfirm/Log [.lib.pod]perldoc.;* -- - If F$Search("[.lib.pod]pod2*.").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.;* -- - If F$Search("*$(E)").nes."" Then Delete/NoConfirm/Log *$(E);* ++ - If F$Search("[.lib.pod]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.com;* ++ - If F$Search("[...]*$(E)").nes."" Then Delete/NoConfirm/Log [...]*$(E);* cleansrc : clean - If F$Search("*.C;-1").nes."" Then Purge/NoConfirm/Log *.C diff --cc vms/fndvers.com index f1ddc03,f1ddc03..2e49ae6 --- a/vms/fndvers.com +++ b/vms/fndvers.com @@@ -58,6 -58,6 +58,11 @@@ $ If .not.teststs Then Exit testst $! $ If teststs.ne.1 ! current values in config.vms are appropriate $ Then ++$ token = """""""""VMS_''arch' /**/""""""""" ++$ Call update_file "''p2'" "#define ARCHNAME" "''token'" ++$ teststs = $Status ++$ If .not.teststs Then Exit teststs ++$! $ token = """""""""/perl_root/lib/VMS_''arch'"""""""" /**/" $ Call update_file "''p2'" "#define OLDARCHLIB_EXP" "''token'" $ If .not.$Status Then Exit $Status diff --cc vms/genconfig.pl index 97679d5,97679d5..3680147 --- a/vms/genconfig.pl +++ b/vms/genconfig.pl @@@ -102,10 -102,10 +102,9 @@@ installprivlib='$installprivlib installarchlib='$installarchlib' installsitelib='$installsitelib' installsitearch='$installsitearch' --startperl='\$ perl 'f\$env("procedure")' - ! q# -- 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' --$ exit !# --' ++path_sep='|' ++startperl='\$ perl 'f\$env("procedure")' 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' ! ++$ exit++ + ++$status != 0 and $exit = $status = undef; EndOfIntro foreach (@ARGV) { diff --cc vms/perly_c.vms index 947d773,947d773..d6d35bb --- a/vms/perly_c.vms +++ b/vms/perly_c.vms @@@ -1240,7 -1240,7 +1240,7 @@@ dEXT int yyerrflag dEXT int yychar; dEXT YYSTYPE yyval; dEXT YYSTYPE yylval; --#line 626 "perly.y" ++#line 624 "perly.y" /* PROGRAM */ #line 1315 "perly.c" #define YYABORT goto yyabort @@@ -1707,317 -1707,317 +1707,315 @@@ case 52 break; case 53: #line 280 "perly.y" --{ yyval.ival = start_subparse(); } ++{ yyval.ival = start_subparse(FALSE, 0); } break; case 54: #line 284 "perly.y" --{ yyval.ival = start_subparse(); -- CvANON_on(compcv); } ++{ yyval.ival = start_subparse(FALSE, CVf_ANON); } break; case 55: --#line 289 "perly.y" --{ yyval.ival = start_subparse(); -- CvFORMAT_on(compcv); } ++#line 288 "perly.y" ++{ yyval.ival = start_subparse(TRUE, 0); } break; case 56: --#line 293 "perly.y" ++#line 291 "perly.y" { char *name = SvPVx(((SVOP*)yyvsp[0].opval)->op_sv, na); if (strEQ(name, "BEGIN") || strEQ(name, "END")) CvUNIQUE_on(compcv); yyval.opval = yyvsp[0].opval; } break; case 57: --#line 300 "perly.y" ++#line 298 "perly.y" { yyval.opval = Nullop; } break; case 59: --#line 304 "perly.y" ++#line 302 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 60: --#line 305 "perly.y" ++#line 303 "perly.y" { yyval.opval = Nullop; expect = XSTATE; } break; case 61: --#line 309 "perly.y" ++#line 307 "perly.y" { package(yyvsp[-1].opval); } break; case 62: --#line 311 "perly.y" ++#line 309 "perly.y" { package(Nullop); } break; case 63: --#line 315 "perly.y" ++#line 313 "perly.y" { CvUNIQUE_on(compcv); /* It's a BEGIN {} */ } break; case 64: --#line 317 "perly.y" ++#line 315 "perly.y" { utilize(yyvsp[-6].ival, yyvsp[-5].ival, yyvsp[-3].opval, yyvsp[-2].opval, yyvsp[-1].opval); } break; case 65: --#line 321 "perly.y" ++#line 319 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 66: --#line 323 "perly.y" ++#line 321 "perly.y" { yyval.opval = newLOGOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 68: --#line 328 "perly.y" ++#line 326 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; case 69: --#line 330 "perly.y" ++#line 328 "perly.y" { yyval.opval = append_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval); } break; case 71: --#line 335 "perly.y" ++#line 333 "perly.y" { yyval.opval = convert(yyvsp[-2].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-2].ival,yyvsp[-1].opval), yyvsp[0].opval) ); } break; case 72: --#line 338 "perly.y" ++#line 336 "perly.y" { yyval.opval = convert(yyvsp[-4].ival, OPf_STACKED, prepend_elem(OP_LIST, newGVREF(yyvsp[-4].ival,yyvsp[-2].opval), yyvsp[-1].opval) ); } break; case 73: --#line 341 "perly.y" ++#line 339 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, scalar(yyvsp[-5].opval), yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-3].opval))); } break; case 74: --#line 346 "perly.y" ++#line 344 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-1].opval, yyvsp[0].opval), newUNOP(OP_METHOD, 0, yyvsp[-2].opval))); } break; case 75: --#line 351 "perly.y" ++#line 349 "perly.y" { yyval.opval = convert(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-3].opval, yyvsp[-1].opval), newUNOP(OP_METHOD, 0, yyvsp[-4].opval))); } break; case 76: --#line 356 "perly.y" ++#line 354 "perly.y" { yyval.opval = convert(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 77: --#line 358 "perly.y" ++#line 356 "perly.y" { yyval.opval = convert(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; case 78: --#line 360 "perly.y" ++#line 358 "perly.y" { yyvsp[0].opval = newANONSUB(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 79: --#line 362 "perly.y" ++#line 360 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, prepend_elem(OP_LIST, yyvsp[-2].opval, yyvsp[0].opval), yyvsp[-4].opval)); } break; case 82: --#line 372 "perly.y" ++#line 370 "perly.y" { yyval.opval = newASSIGNOP(OPf_STACKED, yyvsp[-2].opval, yyvsp[-1].ival, yyvsp[0].opval); } break; case 83: --#line 374 "perly.y" ++#line 372 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 84: --#line 376 "perly.y" ++#line 374 "perly.y" { if (yyvsp[-1].ival != OP_REPEAT) scalar(yyvsp[-2].opval); yyval.opval = newBINOP(yyvsp[-1].ival, 0, yyvsp[-2].opval, scalar(yyvsp[0].opval)); } break; case 85: --#line 380 "perly.y" ++#line 378 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 86: --#line 382 "perly.y" ++#line 380 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 87: --#line 384 "perly.y" ++#line 382 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 88: --#line 386 "perly.y" ++#line 384 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 89: --#line 388 "perly.y" ++#line 386 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 90: --#line 390 "perly.y" ++#line 388 "perly.y" { yyval.opval = newBINOP(yyvsp[-1].ival, 0, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval)); } break; case 91: --#line 392 "perly.y" ++#line 390 "perly.y" { yyval.opval = newRANGE(yyvsp[-1].ival, scalar(yyvsp[-2].opval), scalar(yyvsp[0].opval));} break; case 92: --#line 394 "perly.y" ++#line 392 "perly.y" { yyval.opval = newLOGOP(OP_AND, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 93: --#line 396 "perly.y" ++#line 394 "perly.y" { yyval.opval = newLOGOP(OP_OR, 0, yyvsp[-2].opval, yyvsp[0].opval); } break; case 94: --#line 398 "perly.y" ++#line 396 "perly.y" { yyval.opval = newCONDOP(0, yyvsp[-4].opval, yyvsp[-2].opval, yyvsp[0].opval); } break; case 95: --#line 400 "perly.y" ++#line 398 "perly.y" { yyval.opval = bind_match(yyvsp[-1].ival, yyvsp[-2].opval, yyvsp[0].opval); } break; case 96: --#line 403 "perly.y" ++#line 401 "perly.y" { yyval.opval = newUNOP(OP_NEGATE, 0, scalar(yyvsp[0].opval)); } break; case 97: --#line 405 "perly.y" ++#line 403 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 98: --#line 407 "perly.y" ++#line 405 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 99: --#line 409 "perly.y" ++#line 407 "perly.y" { yyval.opval = newUNOP(OP_COMPLEMENT, 0, scalar(yyvsp[0].opval));} break; case 100: --#line 411 "perly.y" ++#line 409 "perly.y" { yyval.opval = newUNOP(OP_REFGEN, 0, mod(yyvsp[0].opval,OP_REFGEN)); } break; case 101: --#line 413 "perly.y" ++#line 411 "perly.y" { yyval.opval = newUNOP(OP_POSTINC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTINC)); } break; case 102: --#line 416 "perly.y" ++#line 414 "perly.y" { yyval.opval = newUNOP(OP_POSTDEC, 0, mod(scalar(yyvsp[-1].opval), OP_POSTDEC)); } break; case 103: --#line 419 "perly.y" ++#line 417 "perly.y" { yyval.opval = newUNOP(OP_PREINC, 0, mod(scalar(yyvsp[0].opval), OP_PREINC)); } break; case 104: --#line 422 "perly.y" ++#line 420 "perly.y" { yyval.opval = newUNOP(OP_PREDEC, 0, mod(scalar(yyvsp[0].opval), OP_PREDEC)); } break; case 105: --#line 425 "perly.y" ++#line 423 "perly.y" { yyval.opval = localize(yyvsp[0].opval,yyvsp[-1].ival); } break; case 106: --#line 427 "perly.y" ++#line 425 "perly.y" { yyval.opval = sawparens(yyvsp[-1].opval); } break; case 107: --#line 429 "perly.y" ++#line 427 "perly.y" { yyval.opval = sawparens(newNULLLIST()); } break; case 108: --#line 431 "perly.y" ++#line 429 "perly.y" { yyval.opval = newANONLIST(yyvsp[-1].opval); } break; case 109: --#line 433 "perly.y" ++#line 431 "perly.y" { yyval.opval = newANONLIST(Nullop); } break; case 110: --#line 435 "perly.y" ++#line 433 "perly.y" { yyval.opval = newANONHASH(yyvsp[-2].opval); } break; case 111: --#line 437 "perly.y" ++#line 435 "perly.y" { yyval.opval = newANONHASH(Nullop); } break; case 112: --#line 439 "perly.y" ++#line 437 "perly.y" { yyval.opval = newANONSUB(yyvsp[-2].ival, yyvsp[-1].opval, yyvsp[0].opval); } break; case 113: --#line 441 "perly.y" ++#line 439 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 114: --#line 443 "perly.y" ++#line 441 "perly.y" { yyval.opval = newBINOP(OP_GELEM, 0, newGVREF(0,yyvsp[-4].opval), yyvsp[-2].opval); } break; case 115: --#line 445 "perly.y" ++#line 443 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 116: --#line 447 "perly.y" ++#line 445 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, oopsAV(yyvsp[-3].opval), scalar(yyvsp[-1].opval)); } break; case 117: --#line 449 "perly.y" ++#line 447 "perly.y" { yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-4].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; case 118: --#line 453 "perly.y" ++#line 451 "perly.y" { assertref(yyvsp[-3].opval); yyval.opval = newBINOP(OP_AELEM, 0, ref(newAVREF(yyvsp[-3].opval),OP_RV2AV), scalar(yyvsp[-1].opval));} break; case 119: --#line 457 "perly.y" ++#line 455 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 120: --#line 459 "perly.y" ++#line 457 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 121: --#line 461 "perly.y" ++#line 459 "perly.y" { yyval.opval = newUNOP(OP_AV2ARYLEN, 0, ref(yyvsp[0].opval, OP_AV2ARYLEN));} break; case 122: --#line 463 "perly.y" ++#line 461 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, oopsHV(yyvsp[-4].opval), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; case 123: --#line 466 "perly.y" ++#line 464 "perly.y" { yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-5].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; case 124: --#line 471 "perly.y" ++#line 469 "perly.y" { assertref(yyvsp[-4].opval); yyval.opval = newBINOP(OP_HELEM, 0, ref(newHVREF(yyvsp[-4].opval),OP_RV2HV), jmaybe(yyvsp[-2].opval)); expect = XOPERATOR; } break; case 125: --#line 476 "perly.y" ++#line 474 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, yyvsp[-4].opval); } break; case 126: --#line 478 "perly.y" ++#line 476 "perly.y" { yyval.opval = newSLICEOP(0, yyvsp[-1].opval, Nullop); } break; case 127: --#line 480 "perly.y" ++#line 478 "perly.y" { yyval.opval = prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, @@@ -2025,7 -2025,7 +2023,7 @@@ ref(yyvsp[-3].opval, OP_ASLICE))); } break; case 128: --#line 486 "perly.y" ++#line 484 "perly.y" { yyval.opval = prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, @@@ -2034,37 -2034,37 +2032,37 @@@ expect = XOPERATOR; } break; case 129: --#line 493 "perly.y" ++#line 491 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 130: --#line 495 "perly.y" ++#line 493 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, 0, scalar(yyvsp[0].opval)); } break; case 131: --#line 497 "perly.y" ++#line 495 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[-2].opval)); } break; case 132: --#line 499 "perly.y" ++#line 497 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[-1].opval, scalar(yyvsp[-3].opval))); } break; case 133: --#line 502 "perly.y" ++#line 500 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 134: --#line 505 "perly.y" ++#line 503 "perly.y" { yyval.opval = newUNOP(OP_DOFILE, 0, scalar(yyvsp[0].opval)); } break; case 135: --#line 507 "perly.y" ++#line 505 "perly.y" { yyval.opval = newUNOP(OP_NULL, OPf_SPECIAL, scope(yyvsp[0].opval)); } break; case 136: --#line 509 "perly.y" ++#line 507 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, @@@ -2074,7 -2074,7 +2072,7 @@@ )),Nullop)); dep();} break; case 137: --#line 517 "perly.y" ++#line 515 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, append_elem(OP_LIST, @@@ -2085,150 -2085,150 +2083,150 @@@ )))); dep();} break; case 138: --#line 526 "perly.y" ++#line 524 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, scalar(newCVREF(0,scalar(yyvsp[-2].opval))), Nullop)); dep();} break; case 139: --#line 530 "perly.y" ++#line 528 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED, prepend_elem(OP_LIST, yyvsp[-1].opval, scalar(newCVREF(0,scalar(yyvsp[-3].opval))))); dep();} break; case 140: --#line 535 "perly.y" ++#line 533 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, OPf_SPECIAL); hints |= HINT_BLOCK_SCOPE; } break; case 141: --#line 538 "perly.y" ++#line 536 "perly.y" { yyval.opval = newLOOPEX(yyvsp[-1].ival,yyvsp[0].opval); } break; case 142: --#line 540 "perly.y" ++#line 538 "perly.y" { yyval.opval = newUNOP(OP_NOT, 0, scalar(yyvsp[0].opval)); } break; case 143: --#line 542 "perly.y" ++#line 540 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 144: --#line 544 "perly.y" ++#line 542 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 145: --#line 546 "perly.y" ++#line 544 "perly.y" { yyval.opval = newUNOP(yyvsp[-1].ival, 0, yyvsp[0].opval); } break; case 146: --#line 548 "perly.y" ++#line 546 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, append_elem(OP_LIST, yyvsp[0].opval, scalar(yyvsp[-1].opval))); } break; case 147: --#line 551 "perly.y" ++#line 549 "perly.y" { yyval.opval = newOP(yyvsp[0].ival, 0); } break; case 148: --#line 553 "perly.y" ++#line 551 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, 0); } break; case 149: --#line 555 "perly.y" ++#line 553 "perly.y" { yyval.opval = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar(yyvsp[0].opval)); } break; case 150: --#line 558 "perly.y" ++#line 556 "perly.y" { yyval.opval = newOP(yyvsp[-2].ival, OPf_SPECIAL); } break; case 151: --#line 560 "perly.y" ++#line 558 "perly.y" { yyval.opval = newUNOP(yyvsp[-3].ival, 0, yyvsp[-1].opval); } break; case 152: --#line 562 "perly.y" ++#line 560 "perly.y" { yyval.opval = pmruntime(yyvsp[-3].opval, yyvsp[-1].opval, Nullop); } break; case 153: --#line 564 "perly.y" ++#line 562 "perly.y" { yyval.opval = pmruntime(yyvsp[-5].opval, yyvsp[-3].opval, yyvsp[-1].opval); } break; case 156: --#line 570 "perly.y" ++#line 568 "perly.y" { yyval.opval = Nullop; } break; case 157: --#line 572 "perly.y" ++#line 570 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 158: --#line 576 "perly.y" ++#line 574 "perly.y" { yyval.opval = Nullop; } break; case 159: --#line 578 "perly.y" ++#line 576 "perly.y" { yyval.opval = yyvsp[0].opval; } break; case 160: --#line 580 "perly.y" ++#line 578 "perly.y" { yyval.opval = yyvsp[-1].opval; } break; case 161: --#line 583 "perly.y" ++#line 581 "perly.y" { yyval.ival = 0; } break; case 162: --#line 584 "perly.y" ++#line 582 "perly.y" { yyval.ival = 1; } break; case 163: --#line 588 "perly.y" ++#line 586 "perly.y" { in_my = 0; yyval.opval = my(yyvsp[0].opval); } break; case 164: --#line 592 "perly.y" ++#line 590 "perly.y" { yyval.opval = newCVREF(yyvsp[-1].ival,yyvsp[0].opval); } break; case 165: --#line 596 "perly.y" ++#line 594 "perly.y" { yyval.opval = newSVREF(yyvsp[0].opval); } break; case 166: --#line 600 "perly.y" ++#line 598 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; case 167: --#line 604 "perly.y" ++#line 602 "perly.y" { yyval.opval = newHVREF(yyvsp[0].opval); } break; case 168: --#line 608 "perly.y" ++#line 606 "perly.y" { yyval.opval = newAVREF(yyvsp[0].opval); } break; case 169: --#line 612 "perly.y" ++#line 610 "perly.y" { yyval.opval = newGVREF(0,yyvsp[0].opval); } break; case 170: --#line 616 "perly.y" ++#line 614 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; case 171: --#line 618 "perly.y" ++#line 616 "perly.y" { yyval.opval = scalar(yyvsp[0].opval); } break; case 172: --#line 620 "perly.y" ++#line 618 "perly.y" { yyval.opval = scope(yyvsp[0].opval); } break; case 173: --#line 623 "perly.y" ++#line 621 "perly.y" { yyval.opval = yyvsp[0].opval; } break; --#line 2217 "perly.c" ++#line 2215 "perly.c" } yyssp -= yym; yystate = *yyssp; diff --cc vms/vmsish.h index 7fec438,7fec438..fa23571 --- a/vms/vmsish.h +++ b/vms/vmsish.h @@@ -51,7 -51,7 +51,7 @@@ #include #include #include /* it's not , so don't use I_SYS_FILE */ --#ifdef __DECC ++#if defined(__DECC) && defined(__DECC_VER) && __DECC_VER > 20000000 # include /* DECC has this; VAXC and gcc don't */ #endif @@@ -158,6 -158,6 +158,7 @@@ /* Macros to set errno using the VAX thread-safe calls, if present */ #if (defined(__DECC) || defined(__DECCXX)) && !defined(__ALPHA) # define set_errno(v) (cma$tis_errno_set_value(v)) ++ void cma$tis_errno_set_value(int __value); /* missing in some errno.h */ # define set_vaxc_errno(v) (vaxc$errno = (v)) #else # define set_errno(v) (errno = (v)) diff --cc x2p/a2p.h index ffd731e,ffd731e..5109f3f --- a/x2p/a2p.h +++ b/x2p/a2p.h @@@ -9,7 -9,7 +9,11 @@@ */ #define VOIDUSED 1 --#include "../config.h" ++#ifdef VMS ++# include "config.h" ++#else ++# include "../config.h" ++#endif #if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus) # define STANDARD_C 1 @@@ -101,7 -101,7 +105,7 @@@ #else # if defined(VMS) # define NO_PERL_TYPEDEFS --# include "[-]vmsish.h" ++# include "vmsish.h" # endif #endif @@@ -113,7 -113,7 +117,11 @@@ char *strchr(), *strrchr() char *strcpy(), *strcat(); #endif /* ! STANDARD_C */ --#include "../handy.h" ++#ifdef VMS ++# include "handy.h" ++#else ++# include "../handy.h" ++#endif #undef Nullfp #define Nullfp Null(FILE*) diff --cc x2p/find2perl.PL index 2ffc338,2ffc338..c23fc92 --- a/x2p/find2perl.PL +++ b/x2p/find2perl.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!"; diff --cc x2p/s2p.PL index 7564d51,7564d51..73f6787 --- a/x2p/s2p.PL +++ b/x2p/s2p.PL @@@ -14,6 -14,6 +14,7 @@@ use File::Basename qw(&basename &dirnam # This is so that make depend always knows where to find PL derivatives. chdir dirname($0); $file = basename($0, '.PL'); ++$file .= '.com' if $^O eq 'VMS'; open OUT,">$file" or die "Can't create $file: $!";