From: Perl 5 Porters Date: Tue, 25 Mar 1997 19:04:34 +0000 (+1200) Subject: [inseperable changes from patch from perl-5.003_95 to perl-5.003_86] X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=54310121b442974721115f93666234a200f5c7e4;p=p5sagit%2Fp5-mst-13.2.git [inseperable changes from patch from perl-5.003_95 to perl-5.003_86] [editor's note: this commit was prepared manually so may differ in minor ways to other inseperable changes commits] CORE LANGUAGE CHANGES Title: "Support $ENV{PERL5OPT}" From: Chip Salzenberg Files: perl.c pod/perldiag.pod pod/perldelta.pod pod/perlrun.pod Title: "Implement void context, in which C is undef" From: Chip Salzenberg Files: cop.h doop.c dump.c global.sym gv.c op.c op.h perl.c pod/perlcall.pod pod/perldelta.pod pod/perlfunc.pod pod/perlguts.pod pod/perlsub.pod pp.c pp_ctl.c pp_hot.c pp_sys.c proto.h Title: "Don't look up &AUTOLOAD in @ISA when calling plain function" From: Chip Salzenberg Files: global.sym gv.c lib/Text/ParseWords.pm pod/perldelta.pod pp_hot.c proto.h t/op/method.t Title: "Allow closures to be constant subroutines" From: Chip Salzenberg Files: op.c Title: "Make C mean C" From: Chip Salzenberg Files: pp.c Title: "Fix lexical suicide from C in sub" From: Chip Salzenberg Files: op.c Title: "Make "Unrecog. char." fatal, and update its doc" From: Chip Salzenberg Files: pod/perldiag.pod toke.c CORE PORTABILITY Title: "safefree() mismatch" From: Roderick Schertler Msg-ID: <21338.859653381@eeyore.ibcinc.com> Date: Sat, 29 Mar 1997 11:36:21 -0500 Files: util.c (applied based on p5p patch as commit id 9b9b466fb02dc96c81439bafbb3b2da55238cfd2) Title: "Win32 update (seven patches)" From: Gurusamy Sarathy and Nick Ing-Simmons Files: EXTERN.h MANIFEST win32/Makefile win32/perl.mak win32/perl.rc win32/perldll.mak win32/makedef.pl win32/modules.mak win32/win32io.c win32/bin/pl2bat.bat OTHER CORE CHANGES Title: "Report PERL* environment variables in -V and perlbug" From: Chip Salzenberg Files: perl.c utils/perlbug.PL Title: "Typo in perl.c: Printing NO_EMBED for perl -V" From: Gisle Aas Msg-ID: <199703301922.VAA13509@furubotn.sn.no> Date: Sun, 30 Mar 1997 21:22:11 +0200 Files: perl.c (applied based on p5p patch as commit id b6c639e4b1912ad03b9b10ba9518d96bd0a6cfaf) Title: "Don't let C<$var = $var> untaint $var" From: Chip Salzenberg Files: pp_hot.c pp_sys.c sv.h t/op/taint.t Title: "Fix autoviv bug in C{KEY}>" From: Chip Salzenberg Files: pp_hot.c Title: "Re: 5.004's new srand() default seed" From: Hallvard B Furuseth Msg-ID: <199703302219.AAA20998@bombur2.uio.no> Date: Mon, 31 Mar 1997 00:19:13 +0200 (MET DST) Files: pp.c (applied based on p5p patch as commit id d7d933a26349f945f93b2f0dbf85b773d8ca3219) Title: "Re: embedded perl and top_env problem " From: Gurusamy Sarathy Msg-ID: <199703280031.TAA05711@aatma.engin.umich.edu> Date: Thu, 27 Mar 1997 19:31:42 -0500 Files: gv.c interp.sym perl.c perl.h pp_ctl.c pp_sys.c scope.h util.c (applied based on p5p patch as commit id f289f7d2518e7a8a82114282e774adf50fa6ce85) Title: "Define and use new macro: boolSV()" From: Tim Bunce Files: gv.c lib/ExtUtils/typemap os2/os2.c pp.c pp_hot.c pp_sys.c sv.c sv.h universal.c vms/vms.c Title: "Re: strict @F" From: Hallvard B Furuseth Msg-ID: <199703252110.WAA16038@bombur2.uio.no> Date: Tue, 25 Mar 1997 22:10:33 +0100 (MET) Files: toke.c (applied based on p5p patch as commit id dfd44a5c8c8dd4c001c595debfe73d011a96d844) Title: "Try harder to identify errors at EOF" From: Chip Salzenberg Files: toke.c Title: "Minor string change in toke.c: 'bareword'" From: lvirden@cas.org Msg-ID: <1997Mar27.130247.1911552@hmivax.humgen.upenn.edu> Date: Thu, 27 Mar 1997 13:02:46 -0500 (EST) Files: toke.c (applied based on p5p patch as commit id 9b56c8f8085a9e773ad87c6b3c1d0b5e39dbc348) Title: "Improve diagnostic on \r in program text" From: Chip Salzenberg Files: pod/perldiag.pod toke.c Title: "Make Sock_size_t typedef work right" From: Chip Salzenberg Files: perl.h pp_sys.c LIBRARY AND EXTENSIONS Title: "New module constant.pm" From: Tom Phoenix Files: MANIFEST lib/constant.pm op.c pp.c t/pragma/constant.t Title: "Remove chat2" From: Chip Salzenberg Files: MANIFEST lib/chat2.inter lib/chat2.pl Title: "Include CGI.pm 2.32" From: Chip Salzenberg Files: MANIFEST eg/cgi/* lib/CGI.pm lib/CGI/Apache.pm lib/CGI/Carp.pm lib/CGI/Fast.pm lib/CGI/Push.pm lib/CGI/Switch.pm UTILITIES Title: "Tom C's Pod::Html and html tools, as of 30 March 97" From: Chip Salzenberg Files: MANIFEST installhtml lib/Pod/Html.pm pod/pod2html.PL Title: "Fix path bugs in installhtml" From: Robin Barker Msg-ID: <3180.9703270906@tempest.cise.npl.co.uk> Date: Thu, 27 Mar 97 09:06:14 GMT Files: installhtml Title: "Make perlbug say that it's only for core Perl bugs" From: Chip Salzenberg Files: utils/perlbug.PL DOCUMENTATION Title: "Document autouse and constant; update diagnostics" From: Chip Salzenberg Files: pod/perldelta.pod Title: "Suggest to upgraders that they try '-w' again" From: Hallvard B Furuseth Msg-ID: <199703251901.UAA15982@bombur2.uio.no> Date: Tue, 25 Mar 1997 20:01:26 +0100 (MET) Files: pod/perldelta.pod (applied based on p5p patch as commit id 4176c059b9ba6b022e99c44270434a5c3e415b73) Title: "Improve and update documentation of constant subs" From: Tom Phoenix Msg-ID: Date: Mon, 31 Mar 1997 13:05:54 -0800 (PST) Files: pod/perlsub.pod Title: "Improve documentation of C" From: Chip Salzenberg Files: pod/perlfunc.pod pod/perlsub.pod Title: "perlfunc.pod patch" From: Gisle Aas Msg-ID: <199703262159.WAA17531@furubotn.sn.no> Date: Wed, 26 Mar 1997 22:59:23 +0100 Files: pod/perlfunc.pod (applied based on p5p patch as commit id 35a731fcbcd7860eb497d6598f3f77b8746319c4) Title: "Use 'while (defined($x = <>)) {}', per " From: Chip Salzenberg Files: configpm lib/Term/Cap.pm perlsh pod/perlipc.pod pod/perlop.pod pod/perlsub.pod pod/perlsyn.pod pod/perltrap.pod pod/perlvar.pod win32/bin/search.bat Title: "Document and test C<%> behavior with negative operands" From: Chip Salzenberg Files: pod/perlop.pod t/op/arith.t Title: "Update docs on $]" From: Chip Salzenberg Files: pod/perlvar.pod Title: "perlvar.pod patch" From: Gisle Aas Msg-ID: <199703261254.NAA10237@bergen.sn.no> Date: Wed, 26 Mar 1997 13:54:00 +0100 Files: pod/perlvar.pod (applied based on p5p patch as commit id 0aa182cb0caa3829032904b9754807b1b7418509) Title: "Fix example of C vs. C<||>" From: Chip Salzenberg Files: pod/perlsyn.pod Title: "Pod usage and spelling patch" From: Larry W. Virden Files: pod/*.pod Title: "Pod updates" From: "Cary D. Renzema" Msg-ID: <199703262353.PAA01819@macs.mxim.com> Date: Wed, 26 Mar 1997 15:53:22 -0800 (PST) Files: pod/*.pod (applied based on p5p patch as commit id 5695b28edc67a3f45e8a0f25755d07afef3660ac) --- diff --git a/Changes b/Changes index 62c1b45..d27be4a 100644 --- a/Changes +++ b/Changes @@ -8,9 +8,327 @@ or in the .../src/5/0/unsupported directory for sub-version releases.) ----------------- -Version 5.003_95 ----------------- +--------------- + Cast and Crew +--------------- + +To save space, and to give due honor to those who have made Perl 5.004 +what is is today, here are some of the more common names in the Changes +file, and their current addresses (as of March 1997): + + Gisle Aas + Kenneth Albanowski + Charles Bailey + Graham Barr + Spider Boardman + Tim Bunce + Tom Christiansen + Hallvard B Furuseth + Gurusamy Sarathy + Jarkko Hietaniemi + Nick Ing-Simmons + Andreas Koenig + Paul Marquess + Jeff Okamoto + Ulrich Pfeifer + Tom Phoenix + Norbert Pueschel + Roderick Schertler + Ilya Zakharevich + +And the Keepers of the Patch Pumpkin: + + Andy Dougherty + Chip Salzenberg + + +------------------ + Version 5.003_96 +------------------ + + CORE LANGUAGE CHANGES + + Title: "Support $ENV{PERL5OPT}" + From: Chip Salzenberg + Files: perl.c pod/perldiag.pod pod/perldelta.pod pod/perlrun.pod + + Title: "Implement void context, in which C is undef" + From: Chip Salzenberg + Files: cop.h doop.c dump.c global.sym gv.c op.c op.h perl.c + pod/perlcall.pod pod/perldelta.pod pod/perlfunc.pod + pod/perlguts.pod pod/perlsub.pod pp.c pp_ctl.c pp_hot.c + pp_sys.c proto.h + + Title: "Don't look up &AUTOLOAD in @ISA when calling plain function" + From: Chip Salzenberg + Files: global.sym gv.c lib/Text/ParseWords.pm pod/perldelta.pod + pp_hot.c proto.h t/op/method.t + + Title: "Allow closures to be constant subroutines" + From: Chip Salzenberg + Files: op.c + + Title: "Make C mean C" + From: Chip Salzenberg + Files: pp.c + + Title: "Fix lexical suicide from C in sub" + From: Chip Salzenberg + Files: op.c + + Title: "Make "Unrecog. char." fatal, and update its doc" + From: Chip Salzenberg + Files: pod/perldiag.pod toke.c + + Title: "Die on patterns that will match empty string forever" + From: Stephen Potter + Msg-ID: <199703282138.PAA28311@psa.pencom.com> + Date: Fri, 28 Mar 1997 15:38:30 -0600 + Files: regcomp.c + + CORE PORTABILITY + + Title: "safefree() mismatch" + From: Roderick Schertler + Msg-ID: <21338.859653381@eeyore.ibcinc.com> + Date: Sat, 29 Mar 1997 11:36:21 -0500 + Files: util.c + + Title: "FreeBSD update" + From: Slaven Rezic + Msg-ID: <199703311417.QAA04162@cabulja.herceg.de> + Date: Mon, 31 Mar 1997 16:17:42 +0200 (MET DST) + Files: hints/freebsd.sh + + Title: "Win32 update (seven patches)" + From: Gurusamy Sarathy and Nick Ing-Simmons + Files: EXTERN.h MANIFEST win32/Makefile win32/perl.mak + win32/perl.rc win32/perldll.mak win32/makedef.pl + win32/modules.mak win32/win32io.c win32/bin/pl2bat.bat + + OTHER CORE CHANGES + + Title: "Report PERL* environment variables in -V and perlbug" + From: Chip Salzenberg + Files: perl.c utils/perlbug.PL + + Title: "Typo in perl.c: Printing NO_EMBED for perl -V" + From: Gisle Aas + Msg-ID: <199703301922.VAA13509@furubotn.sn.no> + Date: Sun, 30 Mar 1997 21:22:11 +0200 + Files: perl.c + + Title: "Don't let C<$var = $var> untaint $var" + From: Chip Salzenberg + Files: pp_hot.c pp_sys.c sv.h t/op/taint.t + + Title: "Fix autoviv bug in C{KEY}>" + From: Chip Salzenberg + Files: pp_hot.c + + Title: "Re: 5.004's new srand() default seed" + From: Hallvard B Furuseth + Msg-ID: <199703302219.AAA20998@bombur2.uio.no> + Date: Mon, 31 Mar 1997 00:19:13 +0200 (MET DST) + Files: pp.c + + Title: "Re: embedded perl and top_env problem " + From: Gurusamy Sarathy + Msg-ID: <199703280031.TAA05711@aatma.engin.umich.edu> + Date: Thu, 27 Mar 1997 19:31:42 -0500 + Files: gv.c interp.sym perl.c perl.h pp_ctl.c pp_sys.c scope.h util.c + + Title: "Define and use new macro: boolSV()" + From: Tim Bunce + Files: gv.c lib/ExtUtils/typemap os2/os2.c pp.c pp_hot.c pp_sys.c + sv.c sv.h universal.c vms/vms.c + + Title: "Re: strict @F" + From: Hallvard B Furuseth + Msg-ID: <199703252110.WAA16038@bombur2.uio.no> + Date: Tue, 25 Mar 1997 22:10:33 +0100 (MET) + Files: toke.c + + Title: "Try harder to identify errors at EOF" + From: Chip Salzenberg + Files: toke.c + + Title: "Minor string change in toke.c: 'bareword'" + From: lvirden@cas.org + Msg-ID: <1997Mar27.130247.1911552@hmivax.humgen.upenn.edu> + Date: Thu, 27 Mar 1997 13:02:46 -0500 (EST) + Files: toke.c + + Title: "Improve diagnostic on \r in program text" + From: Chip Salzenberg + Files: pod/perldiag.pod toke.c + + Title: "Make Sock_size_t typedef work right" + From: Chip Salzenberg + Files: perl.h pp_sys.c + + Title: "Eliminate unused dummy variable" + From: Doug MacEachern + Msg-ID: <199703270123.UAA25454@postman.osf.org> + Date: Wed, 26 Mar 1997 20:23:14 -0500 + Files: lib/ExtUtils/Embed.pm unixish.h writemain.SH + + BUILD PROCESS + + Title: "Allow for coexistence of various versions of perldiag.pod" + From: Chip Salzenberg + Files: installperl lib/diagnostics.pm + + LIBRARY AND EXTENSIONS + + Title: "New module constant.pm" + From: Tom Phoenix + Files: MANIFEST lib/constant.pm op.c pp.c t/pragma/constant.t + + Title: "Remove chat2" + From: Chip Salzenberg + Files: MANIFEST lib/chat2.inter lib/chat2.pl + + Title: "Include CGI.pm 2.32" + From: Chip Salzenberg + Files: MANIFEST eg/cgi/* lib/CGI.pm lib/CGI/Apache.pm + lib/CGI/Carp.pm lib/CGI/Fast.pm lib/CGI/Push.pm + lib/CGI/Switch.pm + + Title: "Fix C in debugger" + From: Ilya Zakharevich + Msg-ID: <199703312355.SAA01068@monk.mps.ohio-state.edu> + Date: Mon, 31 Mar 1997 18:55:55 -0500 (EST) + Files: lib/perl5db.pl + + Title: "Re: Pod problems & fixes" + From: Hallvard B Furuseth + Msg-ID: <199703261829.TAA17015@bombur2.uio.no> + Date: Wed, 26 Mar 1997 19:29:14 +0100 (MET) + Files: lib/Pod/Text.pm + + Title: "Re: $whoami calculation in Sys::Syslog.pm should not be greedy" + From: Roderick Schertler + Msg-ID: + Date: 29 Mar 1997 11:33:24 -0500 + Files: lib/Sys/Syslog.pm + + Title: "C doesn't always restore" + From: Spider Boardman + Msg-ID: <199703291906.OAA07232@Orb.Nashua.NH.US> + Date: Sat, 29 Mar 1997 14:06:37 -0500 + Files: lib/SelectSaver.pm + + Title: "Patch for Benchmark.pm" + From: Hugo van der Sanden w/Tim Bunce + Msg-ID: <199703291504.PAA01596@crypt.compulink.co.uk> + Date: Sat, 29 Mar 1997 15:04:32 +0000 + Files: lib/Benchmark.pm + + Title: "Tiny doc fix for AutoSplit.pm" + From: "Randy J. Ray" + Msg-ID: + Date: Thu, 27 Mar 1997 14:17:38 -0700 + Files: lib/AutoSplit.pm + + TESTS + + (no changes) + + UTILITIES + + Title: "Tom C's Pod::Html and html tools, as of 30 March 97" + From: Chip Salzenberg + Files: MANIFEST installhtml lib/Pod/Html.pm pod/pod2html.PL + + Title: "Fix path bugs in installhtml" + From: Robin Barker + Msg-ID: <3180.9703270906@tempest.cise.npl.co.uk> + Date: Thu, 27 Mar 97 09:06:14 GMT + Files: installhtml + + Title: "Make perlbug say that it's only for core Perl bugs" + From: Chip Salzenberg + Files: utils/perlbug.PL + + DOCUMENTATION + + Title: "INSTALL-1.11" + From: Andy Dougherty + Msg-ID: + Date: Wed, 26 Mar 1997 15:05:39 -0800 (PST) + Files: pod/perl.pod + + Title: "Document autouse and constant; update diagnostics" + From: Chip Salzenberg + Files: pod/perldelta.pod + + Title: "Suggest to upgraders that they try '-w' again" + From: Hallvard B Furuseth + Msg-ID: <199703251901.UAA15982@bombur2.uio.no> + Date: Tue, 25 Mar 1997 20:01:26 +0100 (MET) + Files: pod/perldelta.pod + + Title: "Improve and update documentation of constant subs" + From: Tom Phoenix + Msg-ID: + Date: Mon, 31 Mar 1997 13:05:54 -0800 (PST) + Files: pod/perlsub.pod + + Title: "Improve documentation of C" + From: Chip Salzenberg + Files: pod/perlfunc.pod pod/perlsub.pod + + Title: "perlfunc.pod patch" + From: Gisle Aas + Msg-ID: <199703262159.WAA17531@furubotn.sn.no> + Date: Wed, 26 Mar 1997 22:59:23 +0100 + Files: pod/perlfunc.pod + + Title: "Use 'while (defined($x = <>)) {}', per " + From: Chip Salzenberg + Files: configpm lib/Term/Cap.pm perlsh pod/perlipc.pod pod/perlop.pod + pod/perlsub.pod pod/perlsyn.pod pod/perltrap.pod + pod/perlvar.pod win32/bin/search.bat + + Title: "Document and test C<%> behavior with negative operands" + From: Chip Salzenberg + Files: pod/perlop.pod t/op/arith.t + + Title: "Update docs on $]" + From: Chip Salzenberg + Files: pod/perlvar.pod + + Title: "perlvar.pod patch" + From: Gisle Aas + Msg-ID: <199703261254.NAA10237@bergen.sn.no> + Date: Wed, 26 Mar 1997 13:54:00 +0100 + Files: pod/perlvar.pod + + Title: "Fix example of C vs. C<||>" + From: Chip Salzenberg + Files: pod/perlsyn.pod + + Title: "Pod usage and spelling patch" + From: Larry W. Virden + Files: pod/*.pod + + Title: "Pod updates" + From: "Cary D. Renzema" + Msg-ID: <199703262353.PAA01819@macs.mxim.com> + Date: Wed, 26 Mar 1997 15:53:22 -0800 (PST) + Files: pod/*.pod + + +------------------ + Version 5.003_95 +------------------ CORE LANGUAGE CHANGES @@ -44,14 +362,13 @@ Version 5.003_95 Files: hints/bsdos.sh Title: "Another MachTen Patch" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: Date: Mon, 24 Mar 1997 15:26:48 -0800 (PST) Files: hints/machten_2.sh Title: "Win32 update (five patches)" - From: Gurusamy Sarathy and - nick@ni-s.u-net.com (Nick Ing-Simmons) + From: Gurusamy Sarathy and Nick Ing-Simmons Files: MANIFEST README.win32 doio.c dosish.h pp_sys.c lib/ExtUtils/Command.pm t/comp/multiline.t t/op/magic.t t/op/mkdir.t t/op/runlevel.t t/op/stat.t t/op/write.t @@ -95,7 +412,7 @@ Version 5.003_95 Files: lib/UNIVERSAL.pm Title: "Term::Readline patch for AmigaOS" - From: "Norbert Pueschel" + From: Norbert Pueschel Msg-ID: <77724797@Armageddon.meb.uni-bonn.de> Date: Sun, 23 Mar 1997 18:57:22 +0100 Files: lib/Term/ReadLine.pm @@ -117,7 +434,7 @@ Version 5.003_95 DOCUMENTATION Title: "INSTALL-1.8 to INSTALL-1.9 updates" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: + From: Hallvard B Furuseth Msg-ID: <199703242031.VAA14997@bombur2.uio.no> Date: Mon, 24 Mar 1997 21:31:51 +0100 (MET) Files: INSTALL lib/Term/Complete.pm lib/subs.pm pod/perlcall.pod @@ -164,7 +481,7 @@ Version 5.003_95 pod/perlpod.pod pod/pod2html.PL Title: "DB_File documentation fix" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9703240854.AA08401@claudius.bfsec.bt.co.uk> Date: Mon, 24 Mar 97 08:54:16 GMT Files: ext/DB_File/DB_File.pm @@ -174,9 +491,9 @@ Version 5.003_95 Files: pod/perlfaq*.pod ----------------- -Version 5.003_94 ----------------- +------------------ + Version 5.003_94 +------------------ CORE LANGUAGE CHANGES @@ -226,7 +543,7 @@ Version 5.003_94 CORE PORTABILITY Title: "Don't say 'static var = 1'" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199703091319.PAA24714@alpha.hut.fi> Date: Sun, 9 Mar 1997 15:19:57 +0200 (EET) Files: malloc.c @@ -238,33 +555,32 @@ Version 5.003_94 Files: hints/bsdos.sh Title: "More MachTen hints" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: + From: Andy Dougherty Msg-ID: Date: Tue, 11 Mar 1997 22:00:55 -0500 (EST) Files: lib/ExtUtils/MM_VMS.pm lib/Test/Harness.pm t/op/taint.t utils/perlbug.PL vms/descrip.mms Title: "vmsish.t and related patches" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IGQW3IP1KK005VFB@hmivax.humgen.upenn.edu> Date: Fri, 21 Mar 1997 01:32:47 -0500 (EST) Files: MANIFEST perl.h vms/descrip.mms vms/ext/vmsish.t vms/vms.c Title: "Win32 update (four patches)" - From: Gurusamy Sarathy and - Nick Ing-Simmons + From: Gurusamy Sarathy and Nick Ing-Simmons Files: MANIFEST README.win32 lib/AutoSplit.pm lib/Cwd.pm lib/ExtUtils/Command.pm lib/ExtUtils/Install.pm lib/ExtUtils/MM_OS2.pm lib/ExtUtils/MM_Unix.pm @@ -310,7 +626,7 @@ Version 5.003_94 Files: ext/POSIX/POSIX.xs mg.c pp_ctl.c toke.c Title: "printf format corrections for -DDEBUGGING" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <26592.858793370@eeyore.ibcinc.com> Date: Wed, 19 Mar 1997 12:42:50 -0500 Files: doop.c malloc.c op.c pp_ctl.c regexec.c sv.c x2p/str.c @@ -343,7 +659,7 @@ Version 5.003_94 Files: installman installperl Title: "3_93 doesn't install pods" - From: Spider Boardman + From: Spider Boardman Msg-ID: <199703160721.CAA08339@Orb.Nashua.NH.US> Date: Sun, 16 Mar 1997 02:21:35 -0500 Files: installperl @@ -353,7 +669,7 @@ Version 5.003_94 Files: installperl Title: "Make hint files' warnings more visible" - From: Hallvard B Furuseth + From: Hallvard B Furuseth Msg-ID: <199703202218.XAA09041@bombur2.uio.no> Date: Thu, 20 Mar 1997 23:18:03 +0100 (MET) Files: hints/3b1.sh hints/apollo.sh hints/cxux.sh hints/dcosx.sh @@ -365,7 +681,7 @@ Version 5.003_94 LIBRARY AND EXTENSIONS Title: "New module: autouse.pm" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199703210034.TAA13469@monk.mps.ohio-state.edu> Date: Thu, 20 Mar 1997 19:34:30 -0500 (EST) Files: MANIFEST lib/autouse.pm @@ -375,13 +691,13 @@ Version 5.003_94 Files: lib/Math/Complex.pm t/lib/complex.t Title: "Refresh DB_File to 1.12" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9703121551.AA07435@claudius.bfsec.bt.co.uk> Date: Wed, 12 Mar 97 15:51:14 GMT Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs Title: "New subroutine Symbol::qualify_to_ref()" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 11 Mar 1997 19:39:36 -0500 Files: lib/Symbol.pm @@ -406,7 +722,7 @@ Version 5.003_94 lib/Getopt/Long.pm Title: "Problems with SKIP in makemaker" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199703210413.XAA21601@monk.mps.ohio-state.edu> Date: Thu, 20 Mar 1997 23:13:31 -0500 (EST) Files: lib/ExtUtils/MM_Unix.pm @@ -416,7 +732,7 @@ Version 5.003_94 Files: lib/Exporter.pm Title: "fix for Exporter's $SIG{__WARN__} handler" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <2282.858296451@eeyore.ibcinc.com> Date: Thu, 13 Mar 1997 18:40:51 -0500 Files: lib/Exporter.pm @@ -448,7 +764,7 @@ Version 5.003_94 UTILITIES Title: "Re: bug in pod2man (5.00326): section=3 for .pm modules" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 11 Mar 1997 19:09:31 -0500 Files: pod/pod2man.PL @@ -456,7 +772,7 @@ Version 5.003_94 DOCUMENTATION Title: "perlfaq.pod" - From: Tom Christiansen + From: Tom Christiansen Msg-ID: <199703172301.QAA12566@jhereg.perl.com> Date: Mon, 17 Mar 1997 16:01:40 -0700 Files: MANIFEST pod/Makefile pod/buildtoc pod/perl.pod @@ -471,7 +787,7 @@ Version 5.003_94 pod/perlsec.pod pod/perlvar.pod Title: "INSTALL: How to enable debugging" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: + From: Tom Phoenix Msg-ID: Date: Fri, 14 Mar 1997 09:08:10 -0800 (PST) Files: pod/perldiag.pod pod/perltrap.pod Title: "Document trap with //o and closures" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IGCHWRNSEU00661G@hmivax.humgen.upenn.edu> Date: Mon, 10 Mar 1997 18:08:08 -0500 (EST) Files: pod/perltrap.pod Title: "Re: Inline PI function" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: + From: Tom Phoenix Msg-ID: + From: Tom Phoenix Msg-ID: Date: Wed, 19 Mar 1997 07:28:57 -0800 (PST) Files: pod/perlop.pod Title: "XSUB's doc fix" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <28804.858012126@eeyore.ibcinc.com> Date: Mon, 10 Mar 1997 11:42:06 -0500 Files: pod/perlcall.pod pod/perlguts.pod pod/perlxstut.pod @@ -554,7 +870,7 @@ Version 5.003_94 Files: pod/*.pod Title: "clarify example in perlfunc" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199703201746.TAA25195@alpha.hut.fi> Date: Thu, 20 Mar 1997 19:46:01 +0200 (EET) Files: pod/perlfunc.pod @@ -564,9 +880,9 @@ Version 5.003_94 Files: ext/DB_File/DB_File.pm ----------------- -Version 5.003_93 ----------------- +------------------ + Version 5.003_93 +------------------ Me, last time: "This release will be the public beta of 5.004, @@ -577,7 +893,7 @@ Me, now: CORE LANGUAGE CHANGES Title: "Don't autovivify array and hash elements in sub parameters" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199703061912.OAA20606@aatma.engin.umich.edu> Date: Thu, 06 Mar 1997 14:12:09 -0500 Files: op.c pod/perldelta.pod pod/perlsub.pod pod/perltrap.pod @@ -599,14 +915,14 @@ Me, now: CORE PORTABILITY Title: "VMS update" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IG8KN5R28M00661G@hmivax.humgen.upenn.edu> Date: Fri, 07 Mar 1997 22:49:46 -0500 (EST) Files: lib/ExtUtils/MM_VMS.pm vms/descrip.mms vms/gen_shrfls.pl vms/sockadapt.h Title: "AmigaOS hint patch" - From: "Norbert Pueschel" + From: Norbert Pueschel Msg-ID: <77724767@Armageddon.meb.uni-bonn.de> Date: Sat, 08 Mar 1997 12:50:15 +0100 Files: hints/amigaos.sh @@ -622,7 +938,7 @@ Me, now: Files: op.c perl.c proto.h Title: "perl -P path patch" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: + From: Andy Dougherty Msg-ID: + From: Spider Boardman Msg-ID: <199703080053.TAA13943@web.zk3.dec.com> Date: Fri, 7 Mar 1997 19:53:00 -0500 Files: Configure @@ -663,13 +979,13 @@ Me, now: Files: lib/Carp.pm Title: "@EXPORT_FAIL fix for Exporter.pm" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <24884.857841724@eeyore.ibcinc.com> Date: Sat, 08 Mar 1997 12:22:04 -0500 Files: lib/Exporter.pm Title: "Open[23] autoflush docs" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <7939.857693947@eeyore.ibcinc.com> Date: Thu, 06 Mar 1997 19:19:07 -0500 Files: lib/IPC/Open2.pm lib/IPC/Open3.pm @@ -695,7 +1011,7 @@ Me, now: DOCUMENTATION Title: "Consolidated INSTALL updates since _92" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: + From: Ilya Zakharevich Msg-ID: <199703080537.AAA25157@monk.mps.ohio-state.edu> Date: Sat, 8 Mar 1997 00:37:30 -0500 (EST) Files: README.os2 Title: "PODs corrections" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199703080253.VAA24975@monk.mps.ohio-state.edu> Date: Fri, 7 Mar 1997 21:53:04 -0500 (EST) Files: ext/DB_File/DB_File.pm ext/Socket/Socket.pm @@ -728,9 +1044,9 @@ Me, now: pod/perlop.pod pod/perlsub.pod ----------------- -Version 5.003_92 ----------------- +------------------ + Version 5.003_92 +------------------ This release will be the public beta of 5.004, or my name isn't Larson T. Pettifogger. @@ -754,19 +1070,19 @@ Larson T. Pettifogger. Files: hints/hpux.sh Title: "Re: The continuing MachTen saga" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: Date: Wed, 5 Mar 1997 09:47:22 -0800 (PST) Files: hints/machten_2.sh Title: "OS/2 patches" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199703060308.WAA22211@monk.mps.ohio-state.edu> Date: Wed, 5 Mar 1997 22:08:43 -0500 (EST) Files: hints/os2.sh lib/ExtUtils/MakeMaker.pm t/op/taint.t Title: "VMS patches" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IG5SQE4A6U00661G@hmivax.humgen.upenn.edu> Date: Wed, 05 Mar 1997 23:10:24 -0500 (EST) Files: lib/ExtUtils/MM_VMS.pm lib/ExtUtils/Manifest.pm perlsdio.h @@ -808,7 +1124,7 @@ Larson T. Pettifogger. Files: op.c Title: "Eliminate format-string type warnings" - From: Hallvard B Furuseth + From: Hallvard B Furuseth Msg-ID: <199703030915.KAA11634@bombur2.uio.no> Date: Mon, 3 Mar 1997 10:15:11 +0100 (MET) Files: doio.c ext/POSIX/POSIX.xs gv.c hints/dec_osf.sh pp.c pp_ctl.c @@ -821,7 +1137,7 @@ Larson T. Pettifogger. BUILD PROCESS Title: "near-harmless bug in _91's Configure" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 01 Mar 1997 21:26:49 -0500 Files: Configure @@ -833,7 +1149,7 @@ Larson T. Pettifogger. LIBRARY AND EXTENSIONS Title: "Newer ReadLine" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199703040634.BAA19919@monk.mps.ohio-state.edu> Date: Tue, 4 Mar 1997 01:34:28 -0500 (EST) Files: lib/Term/ReadLine.pm lib/perl5db.pl @@ -871,7 +1187,7 @@ Larson T. Pettifogger. Files: t/TEST Title: "Smarter t/op/taint.t" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: + From: Tom Phoenix Msg-ID: , - Graham Barr + From: Tom Christiansen and Graham Barr Msg-ID: <199703011732.KAA14693@jhereg.perl.com> Date: Sat, 01 Mar 1997 10:32:31 -0700 Files: pod/perlmod.pod Title: "Clarify C documentation" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: + From: Jarkko Hietaniemi Msg-ID: <199703021454.QAA07446@alpha.hut.fi> Date: Sun, 2 Mar 1997 16:54:22 +0200 (EET) Files: pod/perlmod.pod Title: "Enhance description of 'server error'" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199702041903.VAA16070@alpha.hut.fi> Date: Tue, 4 Feb 1997 21:03:23 +0200 (EET) Files: pod/perldiag.pod @@ -938,16 +1253,16 @@ Larson T. Pettifogger. Files: pod/*.pod ----------------- -Version 5.003_91 ----------------- +------------------ + Version 5.003_91 +------------------ This is (should be? must be!) the public beta of 5.004. CORE LANGUAGE CHANGES Title: "Fix perl_call_*() when !G_EVAL" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199702250725.CAA09192@aatma.engin.umich.edu>, <199702251925.OAA15498@aatma.engin.umich.edu>, <199702252200.RAA16853@aatma.engin.umich.edu> @@ -964,7 +1279,7 @@ This is (should be? must be!) the public beta of 5.004. Files: pp_sys.c Title: "Don't taint magic hash keys unnecessarily" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IFXL9TY74Y00661G@hmivax.humgen.upenn.edu> Date: Fri, 28 Feb 1997 02:11:26 -0500 (EST) Files: hv.c @@ -972,7 +1287,7 @@ This is (should be? must be!) the public beta of 5.004. CORE PORTABILITY Title: "VMS patches post _90" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IFYDE5ZT7O005A53@hmivax.humgen.upenn.edu> Date: Fri, 28 Feb 1997 15:26:33 -0500 (EST) Files: doio.c mg.c perl.h pp_hot.c t/op/rand.t t/op/taint.t taint.c @@ -1001,19 +1316,19 @@ This is (should be? must be!) the public beta of 5.004. Files: perl.c pp.c pp_sys.c toke.c util.c Title: "Clean up and document API for hashes" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199702251824.NAA14859@aatma.engin.umich.edu> Date: Tue, 25 Feb 1997 13:24:02 -0500 Files: hv.c hv.h pod/perldelta.pod pod/perlguts.pod Title: "pp_undef was not always freeing memory" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702270653.BAA13949@monk.mps.ohio-state.edu> Date: Thu, 27 Feb 1997 01:53:51 -0500 (EST) Files: pp.c Title: "Fix SEGV when debugging with foreach() lvalue patch" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702271924.OAA14557@monk.mps.ohio-state.edu> Date: Thu, 27 Feb 1997 14:24:36 -0500 (EST) Files: sv.c @@ -1023,7 +1338,7 @@ This is (should be? must be!) the public beta of 5.004. Files: pp_hot.c Title: "Silence bogus typo warning on $DB::postponed" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199702271802.NAA12505@aatma.engin.umich.edu> Date: Thu, 27 Feb 1997 13:02:30 -0500 Files: op.c @@ -1031,7 +1346,7 @@ This is (should be? must be!) the public beta of 5.004. BUILD PROCESS Title: "Sanity check linking with $libs" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: Date: Tue, 25 Feb 1997 14:13:45 -0500 (EST) Files: Configure @@ -1045,7 +1360,7 @@ This is (should be? must be!) the public beta of 5.004. Files: Configure Title: "Update OS/2 Configure diff" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702251906.OAA10608@monk.mps.ohio-state.edu> Date: Tue, 25 Feb 1997 14:06:23 -0500 (EST) Files: os2/diff.configure @@ -1057,7 +1372,7 @@ This is (should be? must be!) the public beta of 5.004. Files: lib/perl5db.pl Title: "Make IPC::Open3 work without fork()" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702251937.OAA10718@monk.mps.ohio-state.edu> Date: Tue, 25 Feb 1997 14:37:07 -0500 (EST) Files: lib/IPC/Open3.pm @@ -1069,7 +1384,7 @@ This is (should be? must be!) the public beta of 5.004. Files: lib/Getopt/Long.pm lib/diagnostics.pm Title: "Don't warn on use of CCFLAGS" - From: Andreas Koenig + From: Andreas Koenig Msg-ID: <199702251038.LAA13123@anna.in-berlin.de> Date: Tue, 25 Feb 1997 11:38:43 +0100 Files: lib/ExtUtils/MakeMaker.pm @@ -1083,13 +1398,13 @@ This is (should be? must be!) the public beta of 5.004. TESTS Title: "New test op/taint.t" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: + From: Tom Phoenix Msg-ID: + From: Andy Dougherty Msg-ID: + From: Spider Boardman Msg-ID: <199702220951.EAA08156@Orb.Nashua.NH.US> Date: Sat, 22 Feb 1997 04:51:48 -0500 Files: hints/ultrix_4.sh Title: "Digital UNIX and 3_28" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199702231427.QAA13807@alpha.hut.fi> Date: Sun, 23 Feb 1997 16:27:19 +0200 (EET) Files: Configure MANIFEST ext/NDBM_File/hints/dec_osf.pl ext/ODBM_File/hints/dec_osf.pl hints/dec_osf.sh Title: "AmigaOS patches to 5.003_28" - From: "Norbert Pueschel" + From: Norbert Pueschel Msg-ID: <77724759@Armageddon.meb.uni-bonn.de> Date: Sat, 22 Feb 1997 18:08:02 +0100 Files: README.amiga hints/amigaos.sh t/io/fs.t t/lib/anydbm.t @@ -1185,7 +1500,7 @@ At last, a mil[le]stone: The first beta of Perl 5.004. BUILD PROCESS Title: "Re: ccdlflags don't quite work" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: + From: Spider Boardman Msg-ID: <199702241342.IAA25945@Orb.Nashua.NH.US> Date: Mon, 24 Feb 1997 08:42:59 -0500 Files: installperl Title: "installperl breaks running system (for a while)" - From: Spider Boardman + From: Spider Boardman Msg-ID: <199702241412.JAA11829@Orb.Nashua.NH.US> Date: Mon, 24 Feb 1997 09:12:11 -0500 Files: installperl @@ -1209,23 +1524,23 @@ At last, a mil[le]stone: The first beta of Perl 5.004. LIBRARY AND EXTENSIONS Title: "Don't clobber $1 et al in debugger's DB::sub()" - From: Ilya Zakharevich + From: Ilya Zakharevich Files: lib/perl5db.pl Title: "Fix fd leak in IO::Pipe" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 23 Feb 1997 14:29:57 -0500 Files: ext/IO/lib/IO/Pipe.pm Title: "Pod::Text fixes" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <350.856634588@eeyore.ibcinc.com> Date: Sat, 22 Feb 1997 13:03:08 -0500 Files: lib/Pod/Text.pm Title: "Trivial patch to make ExtUtils::Install more -w clean" - From: Tim Bunce + From: Tim Bunce Msg-ID: <9702241605.AA17436@toad.ig.co.uk> Date: Mon, 24 Feb 1997 16:05:17 +0000 Files: lib/ExtUtils/Install.pm @@ -1237,7 +1552,7 @@ At last, a mil[le]stone: The first beta of Perl 5.004. TESTS Title: "More thoroughly test rand() and srand()" - From: Tom Phoenix + From: Tom Phoenix Files: t/op/rand.t Title: "Don't use <*> where readdir() will do" @@ -1253,19 +1568,19 @@ At last, a mil[le]stone: The first beta of Perl 5.004. UTILITIES Title: "Post-28 INSTALL updates" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: + From: Gurusamy Sarathy Msg-ID: <199702242229.RAA04395@aatma.engin.umich.edu> Date: Mon, 24 Feb 1997 17:29:30 -0500 Files: pod/perlsub.pod pod/perltrap.pod Title: "Add documentation and '-h' option to perlbug" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199702240854.DAA27128@aatma.engin.umich.edu> and <199702242009.PAA02849@aatma.engin.umich.edu> Date: Mon, 24 Feb 1997 @@ -1273,7 +1588,7 @@ At last, a mil[le]stone: The first beta of Perl 5.004. utils/perlbug.PL Title: "pumpkin-1.9.pod" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: + From: Jarkko Hietaniemi Files: Changes Title: "Document one-argument limitation with #! line" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: + From: Ilya Zakharevich Files: gv.c Title: "Optimize keys() and values() in void context" @@ -1327,7 +1642,7 @@ I'll eat a floppy disk. (Okay, it's a chocolate floppy, but still....) CORE PORTABILITY Title: "New hints for Digital UNIX" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Files: hints/dec_osf.sh Title: "No version of AIX has working setre[ug]id()" @@ -1335,7 +1650,7 @@ I'll eat a floppy disk. (Okay, it's a chocolate floppy, but still....) Files: hints/aix.sh Title: "VMS patches post _27" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IFMEMPN1IU0057E2@hmivax.humgen.upenn.edu> Date: Thu, 20 Feb 1997 01:58:46 -0500 (EST) Files: MANIFEST dosish.h hv.c lib/ExtUtils/MM_VMS.pm @@ -1345,7 +1660,7 @@ I'll eat a floppy disk. (Okay, it's a chocolate floppy, but still....) vms/vms.c vms/vmsish.h Title: "Re: OS/2 patch for _27" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702210024.TAA03174@monk.mps.ohio-state.edu> Date: Thu, 20 Feb 1997 19:24:16 -0500 (EST) Files: INSTALL README.os2 lib/Test/Harness.pm os2/Changes @@ -1372,7 +1687,7 @@ I'll eat a floppy disk. (Okay, it's a chocolate floppy, but still....) Files: op.c Title: "Minor update to malloc.c" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702210244.VAA03676@monk.mps.ohio-state.edu> Date: Thu, 20 Feb 1997 21:44:13 -0500 (EST) Files: malloc.c @@ -1388,13 +1703,13 @@ I'll eat a floppy disk. (Okay, it's a chocolate floppy, but still....) LIBRARY AND EXTENSIONS Title: "Debugger patch" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702210737.CAA03951@monk.mps.ohio-state.edu> Date: Fri, 21 Feb 1997 02:37:59 -0500 (EST) Files: lib/perl5db.pl Title: "Avoid $` $& $' in libraries" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702210207.VAA03560@monk.mps.ohio-state.edu> Date: Thu, 20 Feb 1997 21:07:30 -0500 (EST) Files: lib/Getopt/Long.pm lib/Pod/Text.pm lib/diagnostics.pm @@ -1437,7 +1752,7 @@ I'll eat a floppy disk. (Okay, it's a chocolate floppy, but still....) DOCUMENTATION Title: "INSTALL updates since _26" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: vs. $SIG{CHLD}" - From: Ulrich Pfeifer + From: Ulrich Pfeifer Files: pod/perlvar.pod Title: "Add pumpkin.pod" @@ -1470,28 +1785,28 @@ I'll eat a floppy disk. (Okay, it's a chocolate floppy, but still....) pod/perltie.pod pod/perltoc.pod pod/perltrap.pod x2p/a2p.pod ----------------- -Version 5.003_27 ----------------- +------------------ + Version 5.003_27 +------------------ This release is beta candidate #5: Our last, best hope for a beta. CORE LANGUAGE CHANGES Title: "Better looks_like_number() function [sv.c]" - From: Gisle Aas + From: Gisle Aas Msg-ID: <199702141708.SAA17546@bergen.sn.no> Date: Fri, 14 Feb 1997 18:08:52 +0100 Files: sv.c Title: "Remove redundant functions UNIVERSAL::{class,is_instance}" - From: Gisle Aas + From: Gisle Aas Msg-ID: Date: 14 Feb 1997 15:52:21 +0000 Files: pod/perldelta.pod pod/perlobj.pod t/op/universal.t universal.c Title: "Allow C" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 16 Feb 1997 23:19:12 -0500 Files: pp_sys.c @@ -1511,7 +1826,7 @@ This release is beta candidate #5: Our last, best hope for a beta. CORE PORTABILITY Title: "Eliminate $^S; add C" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IFI9CFKL0S004R2V@hmivax.humgen.upenn.edu> Date: Mon, 17 Feb 1997 02:45:26 -0500 (EST) Files: MANIFEST gv.c lib/English.pm lib/ExtUtils/MM_VMS.pm @@ -1528,7 +1843,7 @@ This release is beta candidate #5: Our last, best hope for a beta. Files: hints/sco.sh unixish.h Title: "Digital UNIX hints" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199702151906.VAA22999@alpha.hut.fi> Date: Sat, 15 Feb 1997 21:06:33 +0200 (EET) Files: hints/dec_osf.sh @@ -1551,13 +1866,13 @@ This release is beta candidate #5: Our last, best hope for a beta. Files: perl.c Title: "Re: Fragile signals" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702130644.BAA07572@monk.mps.ohio-state.edu> Date: Thu, 13 Feb 1997 01:44:39 -0500 (EST) Files: mg.c Title: "Make format strings correspond exactly to parameters" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 13 Feb 1997 17:24:31 -0500 Files: doio.c ext/DB_File/DB_File.xs ext/Opcode/Opcode.xs gv.c op.c @@ -1614,11 +1929,11 @@ This release is beta candidate #5: Our last, best hope for a beta. lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm Title: "Refresh CPAN.pm to 1.21" - From: Andreas Koenig + From: Andreas Koenig Files: lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm Title: "Refresh Test::Harness to 1.15" - From: Andreas Koenig + From: Andreas Koenig Files: lib/Test/Harness.pm TESTS @@ -1630,7 +1945,7 @@ This release is beta candidate #5: Our last, best hope for a beta. UTILITIES Title: "pod2man: missing '-' in name section shouldn't be fatal" - From: Ulrich Pfeifer + From: Ulrich Pfeifer Msg-ID: Date: 10 Feb 1997 18:38:45 +0100 Files: pod/pod2man.PL @@ -1638,7 +1953,7 @@ This release is beta candidate #5: Our last, best hope for a beta. DOCUMENTATION Title: "Update To-Do list" - From: Tim Bunce + From: Tim Bunce Msg-ID: <9702101900.AA25293@toad.ig.co.uk> Date: Mon, 10 Feb 1997 19:00:59 +0000 Files: Todo @@ -1648,9 +1963,9 @@ This release is beta candidate #5: Our last, best hope for a beta. Files: pod/perldiag.pod ----------------- -Version 5.003_26 ----------------- +------------------ + Version 5.003_26 +------------------ This release is beta candidate #4. "Once more, dear friends...." @@ -1671,7 +1986,7 @@ This release is beta candidate #4. "Once more, dear friends...." Files: mg.c perl.h pp_sys.c Title: "VMS patches post _25" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IF48W3P39W0050BD@hmivax.humgen.upenn.edu> Date: Fri, 07 Feb 1997 01:56:12 -0500 (EST) Files: Porting/Glossary lib/ExtUtils/Liblist.pm @@ -1700,13 +2015,13 @@ This release is beta candidate #4. "Once more, dear friends...." Files: cop.h pp_ctl.c Title: "Regexp optimizations" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702041102.GAA24805@monk.mps.ohio-state.edu> Date: Tue, 4 Feb 1997 06:02:10 -0500 (EST) Files: regcomp.c regexec.c Title: "Re: static buffer in not_a_number() [sv.c] might overflow" - From: Gisle Aas + From: Gisle Aas Msg-ID: Date: 09 Feb 1997 11:55:41 +0100 Files: sv.c @@ -1726,19 +2041,19 @@ This release is beta candidate #4. "Once more, dear friends...." BUILD PROCESS Title: "Fix usage message in configure.gnu" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Files: configure.gnu LIBRARY AND EXTENSIONS Title: "DB_File 1.11 patch" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9702061553.AA18147@claudius.bfsec.bt.co.uk> Date: Thu, 6 Feb 97 15:53:34 GMT Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs Title: "Faster File::Compare" - From: Gisle Aas + From: Gisle Aas Msg-ID: <199702051342.OAA02753@bergen.sn.no> Date: Wed, 5 Feb 1997 14:42:49 +0100 Files: lib/File/Compare.pm @@ -1754,7 +2069,7 @@ This release is beta candidate #4. "Once more, dear friends...." TESTS Title: "Fix closure.t for AmigaOS (again)" - From: "Norbert Pueschel" + From: Norbert Pueschel Msg-ID: <77724742@Armageddon.meb.uni-bonn.de> Date: Wed, 05 Feb 1997 18:56:45 +0100 Files: t/op/closure.t @@ -1762,13 +2077,13 @@ This release is beta candidate #4. "Once more, dear friends...." UTILITIES Title: "perldoc -f " - From: Gisle Aas + From: Gisle Aas Msg-ID: <199702051127.MAA02090@bergen.sn.no> Date: Wed, 5 Feb 1997 12:27:36 +0100 Files: utils/perldoc.PL Title: "Fix pod2man's handling of quotes in =items" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199702042023.WAA13143@alpha.hut.fi> Date: Tue, 4 Feb 1997 22:23:34 +0200 (EET) Files: pod/pod2man.PL @@ -1786,9 +2101,9 @@ This release is beta candidate #4. "Once more, dear friends...." Files: pod/perltie.pod ----------------- -Version 5.003_25 ----------------- +------------------ + Version 5.003_25 +------------------ This release is beta candidate #3. Here's hoping... @@ -1811,7 +2126,7 @@ This release is beta candidate #3. Here's hoping... CORE PORTABILITY Title: "VMS patches for _24" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IEUIFP5038004GQP@hmivax.humgen.upenn.edu> Date: Fri, 31 Jan 1997 02:34:37 -0500 (EST) Files: ext/DynaLoader/DynaLoader.pm ext/DynaLoader/dl_vms.xs @@ -1821,13 +2136,13 @@ This release is beta candidate #3. Here's hoping... vms/ext/filespec.t vms/vms.c vms/vmsish.h Title: "hints/dec_osf.sh: polishing the comments" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199701301958.VAA08992@alpha.hut.fi> Date: Thu, 30 Jan 1997 21:58:10 +0200 (EET) Files: hints/dec_osf.sh Title: "amigaos.sh" - From: "Norbert Pueschel" + From: Norbert Pueschel Msg-ID: <77724724@Armageddon.meb.uni-bonn.de> Date: Wed, 29 Jan 1997 11:39:49 +0100 Files: hints/amigaos.sh @@ -1847,7 +2162,7 @@ This release is beta candidate #3. Here's hoping... Files: pp_sys.c Title: "Fix /\G/g with patterns that match empty string" - From: Ilya Zakharevich + From: Ilya Zakharevich Files: pp_hot.c Title: "Fix scalar leak in av_unshift" @@ -1875,11 +2190,11 @@ This release is beta candidate #3. Here's hoping... LIBRARY AND EXTENSIONS Title: "Refresh CPAN to 1.19" - From: Andreas Koenig + From: Andreas Koenig Files: lib/Bundle/CPAN.pm lib/CPAN.pm lib/CPAN/FirstTime.pm Title: "Debugger update" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199702030406.XAA23029@monk.mps.ohio-state.edu> Date: Sun, 2 Feb 1997 23:06:34 -0500 (EST) Files: lib/perl5db.pl @@ -1893,7 +2208,7 @@ This release is beta candidate #3. Here's hoping... Files: ext/POSIX/POSIX.xs Title: "Make IO::Handle::gets() an alias of getline" - From: Gisle Aas + From: Gisle Aas Msg-ID: <199701301103.MAA11291@bergen.sn.no> Date: Thu, 30 Jan 1997 12:03:15 +0100 Files: ext/IO/lib/IO/Handle.pm lib/IO/Handle.pm @@ -1901,7 +2216,7 @@ This release is beta candidate #3. Here's hoping... TESTS Title: "More Amiga test patches" - From: "Norbert Pueschel" + From: Norbert Pueschel Msg-ID: <77724725@Armageddon.meb.uni-bonn.de> Date: Wed, 29 Jan 1997 16:07:33 +0100 Files: README.amiga t/lib/safe2.t t/op/closure.t @@ -1937,7 +2252,7 @@ This release is beta candidate #3. Here's hoping... Files: pod/perldelta.pod Title: "perlfunc.pod tweaks" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <20526.854659255@eeyore.ibcinc.com> Date: Thu, 30 Jan 1997 16:20:55 -0500 Files: pod/perlfunc.pod @@ -1953,9 +2268,9 @@ This release is beta candidate #3. Here's hoping... Files: pod/perldiag.pod ----------------- -Version 5.003_24 ----------------- +------------------ + Version 5.003_24 +------------------ This release is the second candidate for a public beta test. It's, well, bunches better than _23. @@ -1963,19 +2278,19 @@ It's, well, bunches better than _23. CORE LANGUAGE CHANGES Title: "glob defaults to $_" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199701270809.DAA00934@aatma.engin.umich.edu> Date: Mon, 27 Jan 1997 03:09:13 -0500 Files: op.c opcode.pl pod/perlfunc.pod t/op/glob.t Title: "Re: an overloading bug " - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199701270007.TAA26525@aatma.engin.umich.edu> Date: Sun, 26 Jan 1997 19:07:45 -0500 Files: pod/perldiag.pod pod/perlfunc.pod pp_ctl.c Title: "Don't warn on C<$\ = undef>" - From: Chip Salzenberg + From: Chip Salzenberg Files: mg.c CORE PORTABILITY @@ -1985,7 +2300,7 @@ It's, well, bunches better than _23. Files: MANIFEST win32/* Title: "Amiga files" - From: Norbert Pueschel + From: Norbert Pueschel Msg-ID: <77724712@Armageddon.meb.uni-bonn.de> Date: Sun, 26 Jan 1997 17:42:15 +0100 Files: MANIFEST README.amiga hints/amigaos.sh @@ -1999,27 +2314,27 @@ It's, well, bunches better than _23. OTHER CORE CHANGES Title: "Prevent premature death of @_ during leavesub" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_hot.c t/op/misc.t Title: "Deref old stash when re-blessing" - From: Chip Salzenberg + From: Chip Salzenberg Files: sv.c Title: "Don't abort when RCHECK and DEBUGGING" - From: Tim Bunce + From: Tim Bunce Msg-ID: <9701272339.AA16537@toad.ig.co.uk> Date: Mon, 27 Jan 1997 23:39:48 +0000 Files: malloc.c Title: "Fix overloading macro conflict with Digital 'cc -fast'" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199701272216.AAA04557@alpha.hut.fi> Date: Tue, 28 Jan 1997 00:16:49 +0200 (EET) Files: perl.h Title: "global.sym: typo?" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199701261937.VAA07556@alpha.hut.fi> Date: Sun, 26 Jan 1997 21:37:59 +0200 (EET) Files: global.sym @@ -2027,39 +2342,39 @@ It's, well, bunches better than _23. BUILD PROCESS Title: "Put all extensions' modules in $archlib" - From: Chip Salzenberg + From: Chip Salzenberg Files: installperl Title: "Configure fixes: set $archlib, omit _NO_PROTO" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure Title: "Make configure{,.gnu} ignore --cache-file option" - From: Norbert Pueschel + From: Norbert Pueschel Files: configure configure.gnu LIBRARY AND EXTENSIONS Title: "Version checking in XS bootstrap is optional" - From: Chip Salzenberg + From: Chip Salzenberg Files: XSUB.h Title: "Update $VERSION of DynaLoader and POSIX" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/DynaLoader/DynaLoader.pm ext/POSIX/POSIX.pm Title: "Refresh Text::Wrap to 97.011701" - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/Text/Wrap.pm Title: "Fcntl.xs: F_[GS]ETOWN were in wrong case branch" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199701251510.RAA05142@alpha.hut.fi> Date: Sat, 25 Jan 1997 17:10:20 +0200 (EET) Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs Title: "Fix $Is_VMS typo in Test::Harness" - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/Test/Harness.pm Title: "Allow for really big keys in Tie::SubstrHash" @@ -2069,19 +2384,19 @@ It's, well, bunches better than _23. Files: lib/Tie/SubstrHash.pm Title: "Avoid newRV_noinc() in IO, for compiling with old Perls" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/IO/IO.xs TESTS Title: "New test op/closure.t" - From: Tom Phoenix , Ulrich Pfeifer + From: Tom Phoenix, Ulrich Pfeifer Files: MANIFEST t/op/closure.t UTILITIES Title: "xsubpp handing of void funcs breaks extensions using XST_m*()" - From: Tim Bunce + From: Tim Bunce Msg-ID: <9701271659.AA15137@toad.ig.co.uk> Date: Mon, 27 Jan 1997 16:59:06 +0000 Files: lib/ExtUtils/xsubpp @@ -2089,17 +2404,17 @@ It's, well, bunches better than _23. DOCUMENTATION Title: "perldelta Fcntl enhancement" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199701251505.RAA22159@alpha.hut.fi> Date: Sat, 25 Jan 1997 17:05:34 +0200 (EET) Files: pod/perldelta.pod Title: "Updates to perldelta re: Fcntl, DB_File, Net::Ping" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Files: pod/perldelta.pod Title: "Document restrictions on gv_fetchmethod() and perl_call_sv()" - From: Chip Salzenberg + From: Chip Salzenberg Files: pod/perldelta.pod pod/perlguts.pod Title: "perldiag.pod: No comma allowed after %s" @@ -2109,7 +2424,7 @@ It's, well, bunches better than _23. Files: pod/perldiag.pod Title: "perlfunc.pod: localtime" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199701251629.SAA08114@alpha.hut.fi> Date: Sat, 25 Jan 1997 18:29:37 +0200 (EET) Files: pod/perlfunc.pod @@ -2121,38 +2436,38 @@ It's, well, bunches better than _23. Files: pod/perlfunc.pod Title: "Updates to guts" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199701270034.TAA13177@monk.mps.ohio-state.edu> Date: Sun, 26 Jan 1997 19:34:18 -0500 (EST) Files: pod/perlguts.pod Title: "perltoot fixes" - From: Tom Christiansen + From: Tom Christiansen Msg-ID: <6807.854214205@jinete> Date: Sat, 25 Jan 1997 09:43:25 -0800 Files: pod/perltoot.pod Title: "5.003_23: small typo in perlsyn.pod" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199701270824.DAA01169@aatma.engin.umich.edu> Date: Mon, 27 Jan 1997 03:24:25 -0500 Files: pod/perlsyn.pod ----------------- -Version 5.003_23 ----------------- +------------------ + 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 + From: Chip Salzenberg Files: pod/perlfunc.pod util.c Title: "Fix overloading with inheritance and AUTOLOAD" - From: Ilya Zakharevich + 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 @@ -2166,21 +2481,21 @@ This release is our first candidate for a public beta test. Files: toke.c Title: "Revert $^X to old behavior (plus HP-UX bug fix)" - From: Chip Salzenberg + From: Chip Salzenberg Files: hints/hpux.sh toke.c Title: "Protect against '0' in 'stmt while '" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c Title: "Don't warn when closure uses var at file scope" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c CORE PORTABILITY Title: "VMS patches for _22" - From: Charles Bailey + 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 @@ -2189,7 +2504,7 @@ This release is our first candidate for a public beta test. vms/Makefile vms/config.vms vms/descrip.mms vms/perly_c.vms Title: "Re: Perl 5.003_21: OS/2 patches" - From: Ilya Zakharevich + 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 @@ -2199,7 +2514,7 @@ This release is our first candidate for a public beta test. Files: plan9/config.plan9 plan9/mkfile Title: "Bugfixes for AmigaOS" - From: "Norbert Pueschel" + 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 @@ -2211,7 +2526,7 @@ This release is our first candidate for a public beta test. Files: hints/dec_osf.sh Title: "on NeXT: gdbm problem fixed" - From: Andreas Koenig + 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 @@ -2237,49 +2552,49 @@ This release is our first candidate for a public beta test. OTHER CORE CHANGES Title: "Make PERL5LIB and -I work like C" - From: Tim Bunce + 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 + From: Chip Salzenberg Files: regcomp.c regcomp.h regexec.c regexp.h toke.c Title: "Extend stack in pp_undef (!)" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c Title: "Allow for sub to be redefined while executing" - From: Chip Salzenberg + From: Chip Salzenberg Files: cop.h pp_hot.c t/op/misc.t Title: "Eliminate redundant flag CVf_FORMAT" - From: Chip Salzenberg + 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 + From: Chip Salzenberg Files: pp.c Title: "Efficiency patchlet for pp_aassign()" - From: Ilya Zakharevich + 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 + From: Chip Salzenberg Files: pp_ctl.c Title: "Remove "suidperl security patch" message" - From: Chip Salzenberg + From: Chip Salzenberg Files: perl.c BUILD PROCESS Title: "Make configure.gnu a copy of configure; make configure writea - From: Chip Salzenberg + From: Chip Salzenberg Files: MANIFEST configure.gnu Title: "Regen Configure with metaconfig: +ARCHNAME, -FILE_filbuf" @@ -2289,23 +2604,23 @@ This release is our first candidate for a public beta test. utils/perlbug.PL vms/config.vms vms/fndvers.com Title: "Compile with optimization when testing memory functions" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure Title: "Minor patch for Debian installation" - From: Chip Salzenberg + From: Chip Salzenberg Files: installperl LIBRARY AND EXTENSIONS Title: "Debugger update" - From: Ilya Zakharevich + 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 + 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 @@ -2320,21 +2635,21 @@ This release is our first candidate for a public beta test. Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs Title: "Refresh IO to 1.15 (plus DESTROY and new_tmpfile fixes)" - From: Chip Salzenberg + 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 + 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 + From: Andreas Koenig Files: lib/CPAN.pm lib/CPAN/FirstTime.pm Title: "Add E* and SA_* constants" - From: Roderick Schertler + 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 @@ -2348,18 +2663,18 @@ This release is our first candidate for a public beta test. Files: t/base/lex.t Title: "Fix tests of $^X and $0 to work with QNX" - From: Chip Salzenberg + 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" + 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 + 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 @@ -2375,11 +2690,11 @@ This release is our first candidate for a public beta test. UTILITIES Title: "Translate \200 to È in pod2html" - From: Chip Salzenberg + From: Chip Salzenberg Files: pod/pod2html.PL Title: "VMS patches: '.com' extension on scripts" - From: Charles Bailey + 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 @@ -2397,56 +2712,56 @@ This release is our first candidate for a public beta test. DOCUMENTATION Title: "First cut at INSTALL edit" - From: Chip Salzenberg + From: Chip Salzenberg Files: INSTALL Title: "Additional docs for __DIE__ and __WARN__" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Files: pod/perlfunc.pod pod/perlrun.pod pod/perlvar.pod Title: "Document #line directive" - From: Gurusamy Sarathy + 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 + 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 + 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 + 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 + 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 + 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 + From: Chip Salzenberg Files: pod/perllocale.pod ----------------- -Version 5.003_22 ----------------- +------------------ + Version 5.003_22 +------------------ This release is primarily made up of bug fixes, the foremost among which repairs a showstopper memory corruption bug in formats. @@ -2454,43 +2769,43 @@ which repairs a showstopper memory corruption bug in formats. CORE LANGUAGE CHANGES Title: "Fix parsing of C< ${ xyz } >" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c Title: "Don't parse method calls in strings" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c Title: "Fix overly picky carping about leading '{' in regex" - From: Chip Salzenberg + From: Chip Salzenberg Files: regcomp.c OTHER CORE CHANGES Title: "Fix memory corruption from formats" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c perl.c perly.c perly.c.diff perly.y proto.h sv.c toke.c BUILD PROCESS Title: "Fix '_mopop' typo" - From: Chip Salzenberg + From: Chip Salzenberg Files: Makefile.SH LIBRARY AND EXTENSIONS Title: "Gut IO::Handle::DESTROY" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/IO/lib/IO/Handle.pm Title: "RiscOS is case-insensitive" - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/File/Basename.pm TESTS Title: "Fix thinko in db-recno.t" - From: Chip Salzenberg + From: Chip Salzenberg Files: t/lib/db-recno.t UTILITIES @@ -2508,7 +2823,7 @@ which repairs a showstopper memory corruption bug in formats. Files: INSTALL pod/roffitall Title: "srand() doc update" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <24195.853379065@eeyore.ibcinc.com> Date: Wed, 15 Jan 1997 20:44:25 -0500 Files: pod/perlfunc.pod @@ -2520,9 +2835,9 @@ which repairs a showstopper memory corruption bug in formats. Files: configpm ----------------- -Version 5.003_21 ----------------- +------------------ + Version 5.003_21 +------------------ This release includes several important bug fixes, and a couple of minor but valuable language tweaks. Please read on for a list of the @@ -2531,27 +2846,27 @@ significant changes: CORE LANGUAGE CHANGES Title: "Fix overloading via inherited autoloaded functions" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199701131022.FAA22830@monk.mps.ohio-state.edu> Date: Mon, 13 Jan 1997 05:22:47 -0500 (EST) Files: gv.c lib/overload.pm pod/perldiag.pod t/pragma/overload.t Title: "Method call fixes: Don't cache in alias, don't skip undef" - From: Chip Salzenberg + From: Chip Salzenberg Files: global.sym gv.c gv.h hv.c op.c pod/perlguts.pod pod/perltoc.pod pp.c pp_ctl.c pp_hot.c proto.h scope.c sv.c t/op/method.t Title: "Formats can be closures" - From: Chip Salzenberg + From: Chip Salzenberg Files: cv.h op.c perly.c perly.c.diff perly.y pp_sys.c sv.h Title: "Quote 'foo' in C<$x{-foo}>" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c Title: "Forbid C< x->{y} > and C< x->[0] > under C" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c pod/perldiag.pod t/pragma/strict-refs Title: "Allow <=> to return undef when operands are not ordered" @@ -2559,19 +2874,19 @@ significant changes: Files: MANIFEST pp.c t/op/cmp.t Title: "Fail regex that starts with '{'" - From: Chip Salzenberg + From: Chip Salzenberg Files: regcomp.c CORE PORTABILITY Title: "Re: Perl 5.003_20: OS/2 patches" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199701101102.GAA19051@monk.mps.ohio-state.edu> Date: Fri, 10 Jan 1997 06:02:16 -0500 (EST) Files: hints/os2.sh os2/Changes os2/os2.c os2/os2ish.h pp_sys.c Title: "VMS patches for _20" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IE7MGK7ULQ003K5M@hmivax.humgen.upenn.edu> Date: Tue, 14 Jan 1997 17:34:43 -0500 (EST) Files: configpm dosish.h os2/os2ish.h plan9/plan9ish.h proto.h @@ -2593,21 +2908,21 @@ significant changes: Files: Configure hints/machten.sh Title: "Rename aux.sh to aux_3.sh for MS-LOSS" - From: Chip Salzenberg + From: Chip Salzenberg Files: MANIFEST hints/aux_3.sh OTHER CORE CHANGES Title: "Fix C< eval { my $x; eval '$x' } >" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c t/op/misc.t Title: "Don't warn if eval '' uses outer func's lexicals" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c Title: "Avoid memory wastage in wait(); make pidstatus global" - From: Chip Salzenberg + From: Chip Salzenberg Files: global.sym interp.sym perl.c perl.h pp_sys.c Title: "Forbid ++ and -- on readonly values" @@ -2617,39 +2932,39 @@ significant changes: Files: pp.c pp_hot.c Title: "Keep array from dying during foreach(@array)" - From: Chip Salzenberg + From: Chip Salzenberg Files: cop.h pp_ctl.c Title: "Fix C< $a="simple"; split /($a)/o >" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c t/op/misc.t Title: "Fix infinite loop for undef function in @SIG{__WARN__,__DIE__}" - From: Chip Salzenberg + From: Chip Salzenberg Files: util.c Title: "Fix for anon-lists with tied entries coredump" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199701100745.CAA13057@aatma.engin.umich.edu> Date: Fri, 10 Jan 1997 02:45:11 -0500 Files: pp.c Title: "Don't set SVf_PADBUSY on immortal SVs" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c Title: "Patch for Object subroutines" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199701080156.UAA15366@monk.mps.ohio-state.edu> Date: Tue, 7 Jan 1997 20:56:02 -0500 (EST) Files: cop.h Title: "Use an SVt_PVLV to hold stacked OP pointers when debugging" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c pp_hot.c Title: "Undo change that freed large pad vars" - From: Chip Salzenberg + From: Chip Salzenberg Files: scope.c BUILD PROCESS @@ -2667,7 +2982,7 @@ significant changes: Files: Configure Title: "Make installperl quieter; only shared libraries need 0555" - From: Chip Salzenberg + From: Chip Salzenberg Files: installperl TESTS @@ -2679,15 +2994,15 @@ significant changes: Files: t/TEST Title: "UNIVERSAL tests" - From: Roderick Schertler + From: Roderick Schertler Files: MANIFEST t/op/universal.t Title: "Test deletion of array during foreach" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Files: t/op/misc.t Title: "patch for db-recno.t" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9701121509.AA11147@claudius.bfsec.bt.co.uk> Date: Sun, 12 Jan 1997 15:09:33 +0000 (GMT) Files: t/lib/db-recno.t @@ -2695,7 +3010,7 @@ significant changes: LIBRARY AND EXTENSIONS Title: "Localize info about filesystems being case-forgiving" - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/File/Basename.pm 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 @@ -2711,39 +3026,39 @@ significant changes: Files: lib/Getopt/Long.pm Title: "Refresh DB_File to 1.10" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9701141247.AA21242@claudius.bfsec.bt.co.uk> Date: Tue, 14 Jan 97 12:47:40 GMT Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs Title: "Re: FileCache::cacheout clobbers $_" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 08 Jan 1997 23:45:58 -0500 Files: lib/FileCache.pm lib/cacheout.pl Title: "PATCH: AutoSplit" - From: Graham Barr + From: Graham Barr Msg-ID: <9603111010.AA29935@tiuk.ti.com> Date: 11 Mar 1996 06:01:58 -0500 Files: lib/AutoSplit.pm Title: "Re: Uninitialized value in Carp.pm ? " - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199701141815.NAA07960@aatma.engin.umich.edu> Date: Tue, 14 Jan 1997 13:15:25 -0500 Files: lib/Carp.pm Title: "Avoid "uninitialized" warnings from POSIX::constant()" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/POSIX/POSIX.pm Title: "Eliminate warning from C" - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/overload.pm Title: "low priority patches" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9701081655.AA27349@claudius.bfsec.bt.co.uk> Date: Wed, 8 Jan 97 16:55:02 GMT Files: lib/Cwd.pm t/comp/redef.t t/lib/db-btree.t @@ -2751,13 +3066,13 @@ significant changes: UTILITIES Title: "Re: xsubpp and Tk ==> segfault" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199701080825.DAA15813@monk.mps.ohio-state.edu> Date: Wed, 8 Jan 1997 03:25:47 -0500 (EST) Files: lib/ExtUtils/xsubpp Title: "Re: MakeMaker and 'make uninstall'" - From: Andreas Koenig + From: Andreas Koenig Msg-ID: <199701101243.NAA26400@anna.in-berlin.de> Date: Fri, 10 Jan 1997 13:43:39 +0100 Files: lib/ExtUtils/MM_Unix.pm @@ -2769,13 +3084,13 @@ significant changes: Files: utils/perldoc.PL Title: "Yet another perldoc option" - From: Gisle Aas + From: Gisle Aas Msg-ID: <199610022200.AAA15334@furubotn.sn.no> Date: Thu, 3 Oct 1996 00:00:35 +0200 Files: utils/perldoc.PL Title: "Re: perldoc, temp files, async pagers" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 07 Jan 1997 22:54:14 -0500 Files: utils/perldoc.PL @@ -2795,32 +3110,32 @@ significant changes: Files: pod/perlsyn.pod Title: "Document use of pos() and /\G/" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199701132013.PAA26606@aatma.engin.umich.edu> Date: Mon, 13 Jan 1997 15:13:12 -0500 Files: pod/perlfunc.pod pod/perlnews.pod pod/perlop.pod pod/perlre.pod pod/perltoc.pod pod/perltrap.pod Title: "Fix example #4 in perlXStut" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199701050739.CAA11112@monk.mps.ohio-state.edu> Date: Sun, 5 Jan 1997 02:39:45 -0500 (EST) Files: pod/perlxstut.pod Title: "Document new closure warnings" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c pod/perldiag.pod Title: "Misc. doc patches missing in _20" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <102.852695733@eeyore.ibcinc.com> Date: Tue, 07 Jan 1997 22:55:33 -0500 Files: pod/perlsub.pod pod/perltoc.pod pod/perlvar.pod ----------------- -Version 5.003_20 ----------------- +------------------ + Version 5.003_20 +------------------ The only language change in this release is the recension of support for named closures: Now, no subroutine declared "sub foo {}" can be @@ -2834,11 +3149,11 @@ updates, and expanded tests. This is good stuff. "I love you, man!" CORE LANGUAGE CHANGES Title: "Rescind named closures" - From: Chip Salzenberg + From: Chip Salzenberg Files: Makefile.SH op.c perly.c perly.c.diff perly.y pp_hot.c Title: "Fix: empty @_ when calling empty-proto subs without parens" - From: Graham Barr + From: Graham Barr Msg-ID: <32CE30F0.7E8425A5@tiuk.ti.com> Date: Sat, 04 Jan 1997 10:29:04 +0000 Files: perly.c perly.y @@ -2846,23 +3161,23 @@ updates, and expanded tests. This is good stuff. "I love you, man!" CORE PORTABILITY Title: "Fix $^X on systems that set it to Perl's basename" - From: Chip Salzenberg + From: Chip Salzenberg Files: hints/hpux.sh toke.c Title: "Configure/perl5/Compartmented Mode Workstation (fwd)" - From: Andy Dougherty + From: Andy Dougherty Msg-ID: + From: Ilya Zakharevich Files: MANIFEST OTHER CORE CHANGES Title: "Fix C< sub foo (&@); sub bar (&); foo {}, bar {}, bar {} >" - From: Chip Salzenberg + From: Chip Salzenberg Files: perly.c perly.c.diff perly.y Title: "plug for safe/opcode leaks" @@ -2872,11 +3187,11 @@ updates, and expanded tests. This is good stuff. "I love you, man!" Files: op.c Title: "Finish OP= warnings: none on ^=" - From: Chip Salzenberg + From: Chip Salzenberg Files: doop.c pp.c t/op/assignwarn.t Title: "Fix Dynaloader failures with DProf" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199701061718.MAA26909@aatma.engin.umich.edu> Date: Mon, 06 Jan 1997 12:18:46 -0500 Files: pp_hot.c @@ -2884,11 +3199,11 @@ updates, and expanded tests. This is good stuff. "I love you, man!" BUILD PROCESS Title: "Make Configure default to the first domain in /etc/resolv.conf" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure Title: "Start all helper scripts with $startsh" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure Title: "Support libperl.so under FreeBSD" @@ -2900,13 +3215,13 @@ updates, and expanded tests. This is good stuff. "I love you, man!" TESTS Title: "New test: comp/proto.t" - From: Graham Barr + From: Graham Barr Msg-ID: <32D0C21F.3FB28D51@tiuk.ti.com> Date: Mon, 06 Jan 1997 09:13:03 +0000 Files: MANIFEST t/comp/proto.t Title: "More magic variable tests" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <7043.852565192@eeyore.ibcinc.com> Date: Mon, 06 Jan 1997 10:39:52 -0500 Files: t/harness t/op/magic.t @@ -2920,13 +3235,13 @@ updates, and expanded tests. This is good stuff. "I love you, man!" Files: lib/File/Basename.pm t/lib/basename.t Title: "sigaction() problems" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <12808.852583324@eeyore.ibcinc.com> Date: Mon, 06 Jan 1997 15:42:04 -0500 Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod Title: "Fix importation of FileHandle methods; fix POSIX docs" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/POSIX/POSIX.pm ext/POSIX/POSIX.pod lib/FileHandle.pm Title: "Patch: make hints files warn about db-recno failures" @@ -2946,31 +3261,31 @@ updates, and expanded tests. This is good stuff. "I love you, man!" DOCUMENTATION Title: "tiny doc patches" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <23338.852394333@eeyore.ibcinc.com> Date: Sat, 04 Jan 1997 11:12:13 -0500 Files: pod/perlapio.pod pod/perlnews.pod pod/perltoc.pod Title: "doc patch for defined on perlfunc.pod" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 04 Jan 1997 21:28:30 -0500 Files: pod/perlfunc.pod Title: "doc patch: perldsc" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 04 Jan 1997 21:25:58 -0500 Files: pod/perldsc.pod pod/perltoc.pod Title: "Re: constant function inlining" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 07 Jan 1997 15:27:50 -0500 Files: pod/perldiag.pod pod/perlsub.pod Title: "scalar caller doc fix" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <18245.852608060@eeyore.ibcinc.com> Date: Mon, 06 Jan 1997 22:34:20 -0500 Files: pod/perlfunc.pod @@ -2982,13 +3297,13 @@ updates, and expanded tests. This is good stuff. "I love you, man!" Files: pod/perlpod.pod Title: "Misc perlfunc updates" - From: Tom Christiansen + From: Tom Christiansen Files: pod/perlfunc.pod pod/perltoc.pod ----------------- -Version 5.003_19 ----------------- +------------------ + Version 5.003_19 +------------------ Lots of internal cleanup in this patch, especially plugged memory leaks when embedded Perl interpreters shut down and restart. The @@ -3002,22 +3317,22 @@ Here's a list of the more significant changes... CORE LANGUAGE CHANGES Title: "Make method cache invisible to user code" - From: Chip Salzenberg + From: Chip Salzenberg Files: dump.c gv.c gv.h hv.c op.c perl.c pp_hot.c pp_sys.c sv.c toke.c Title: "Never parse "{m,s,y,tr,q{,q,w,x}}:{,:}" as package or label" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c CORE PORTABILITY Title: "Fix $^X under HP-UX" - From: Chip Salzenberg + From: Chip Salzenberg Files: hints/hpux.sh toke.c Title: "New hints/hpux.sh" - From: Jeff Okamoto + From: Jeff Okamoto Msg-ID: <199612312309.AA283393772@hpcc123.corp.hp.com> Date: Tue, 31 Dec 1996 15:09:32 -0800 Files: hints/hpux.sh @@ -3025,25 +3340,25 @@ Here's a list of the more significant changes... OTHER CORE CHANGES Title: "Fix segv when calling named closures" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_hot.c Title: "Finish rationalizing "undef value" warnings" - From: Chip Salzenberg + From: Chip Salzenberg Files: doop.c pp.c sv.c t/op/assignwarn.t Title: "Arrange for all "_ + From: Chip Salzenberg Files: gv.c lib/perl5db.pl Title: "Introduce CVf_NODEBUG flag" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199701012042.PAA25994@aatma.engin.umich.edu> Date: Wed, 01 Jan 1997 15:42:05 -0500 Files: cv.h pp_hot.c Title: "Reword 'may be "0"' warning per Larry; fix its line number" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c pod/perldiag.pod Title: "5.003_18: perl_{con,des}truct fixes" @@ -3053,17 +3368,17 @@ Here's a list of the more significant changes... Files: perl.c perl.h pod/perlembed.pod pod/perltoc.pod t/op/sysio.t Title: "Fix lost value from READLINE after TIEHANDLE" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Files: pp_hot.c sv.h Title: "Free memory of large lexical variables when leaving scope" - From: Chip Salzenberg + From: Chip Salzenberg Files: scope.c TESTS Title: "Create t/pragma directory; populate with new and old" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Files: MANIFEST Makefile.SH t/TEST t/comp/use.t t/lib/locale.t t/op/overload.t t/op/use.t t/pragma/locale.t t/pragma/overload.t t/pragma/strict-refs t/pragma/strict-subs t/pragma/strict-vars @@ -3077,7 +3392,7 @@ Here's a list of the more significant changes... LIBRARY AND EXTENSIONS Title: "Make libs clean under '-w'" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Files: lib/AutoSplit.pm lib/Devel/SelfStubber.pm lib/Env.pm lib/Math/Complex.pm lib/Pod/Functions.pm lib/Search/Dict.pm lib/SelfLoader.pm lib/Term/Complete.pm lib/chat2.pl @@ -3087,13 +3402,13 @@ Here's a list of the more significant changes... DOCUMENTATION Title: "Perlguts, version 28" - From: Jeff Okamoto + From: Jeff Okamoto Msg-ID: <199701032110.AA102535846@hpcc123.corp.hp.com> Date: Fri, 3 Jan 1997 13:10:46 -0800 Files: pod/perlguts.pod Title: "Re: perldelta, take 3" - From: Tim Bunce + From: Tim Bunce Msg-ID: <9701031748.AA15335@toad.ig.co.uk> Date: Fri, 3 Jan 1997 17:48:46 +0000 Files: pod/perlnews.pod @@ -3104,93 +3419,93 @@ Here's a list of the more significant changes... pod/perlguts.pod Title: "expanded flock() docs" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <4481.852337871@eeyore.ibcinc.com> Date: Fri, 03 Jan 1997 19:31:11 -0500 Files: pod/perlfunc.pod Title: "Use Text::Wrap in buildtoc; run buildtoc" - From: Ulrich Pfeifer + From: Ulrich Pfeifer Files: pod/buildtoc pod/perltoc.pod Title: "Remove obsolete perlovl.pod" - From: Chip Salzenberg + From: Chip Salzenberg Files: MANIFEST plan9/mkfile pod/perlovl.pod vms/Makefile vms/descrip.mms ----------------- -Version 5.003_18 ----------------- +------------------ + Version 5.003_18 +------------------ Yet further down the road to 5.004.... CORE LANGUAGE CHANGES Title: "Inherited overloading" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612291312.IAA02134@monk.mps.ohio-state.edu> Date: Sun, 29 Dec 1996 08:12:54 -0500 (EST) Files: gv.c lib/overload.pm perl.h sv.c sv.h t/op/overload.t Title: "Hide lexicals from Cd or Cd module (!)" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_ctl.c Title: "Closures at file scope must be anonymous" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c Title: "Warn on '{if,while} ($x = X)' where X is glob, readdir, or " - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c pod/perldiag.pod Title: "Warn on 'undef $x; $x OP 1' where OP is *=, /=, %=, or **=" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c CORE PORTABILITY Title: "Ultrix setlocale() workaround" - From: Chip Salzenberg + From: Chip Salzenberg Files: hints/ultrix_4.sh util.c OTHER CORE CHANGES Title: "Get rid of 'Leaked scalars'" - From: Chip Salzenberg + From: Chip Salzenberg Files: cop.h gv.c op.c Title: "Don't forget $c in C<(($a,$b,$c)=(1,2))=(3,4,5)>" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_hot.c Title: "Fix core dump on perl_construct()/perl_destruct() loop" - From: Chip Salzenberg + From: Chip Salzenberg Files: perl.c Title: "Add missing syms to global.sym; update magic doc" - From: Chip Salzenberg + From: Chip Salzenberg Files: global.sym pod/perlguts.pod TESTS Title: "Expanded locale.t and misc.t" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Files: t/lib/locale.t t/lib/misc.t Title: "Expanded my.t" - From: Chip Salzenberg + From: Chip Salzenberg Files: t/lib/my.t Title: "test harness for C" - From: Graham Barr + From: Graham Barr Msg-ID: <32C76882.3F3C7999@tiuk.ti.com> Date: Mon, 30 Dec 1996 07:00:18 +0000 Files: MANIFEST t/op/use.t Title: "More tests" - From: Tom Phoenix + From: Tom Phoenix Msg-ID: + From: Tom Phoenix Msg-ID: + From: Ilya Zakharevich Msg-ID: <199612280347.WAA00293@monk.mps.ohio-state.edu> Date: Fri, 27 Dec 1996 22:47:24 -0500 (EST) Files: lib/File/Copy.pm t/lib/filecopy.t @@ -3223,15 +3538,15 @@ Yet further down the road to 5.004.... pod/perlre.pod pod/perlsec.pod Title: "Re: perldiag.pod entry for "Scalar value @%s{%s} ..."" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <2043.852051019@eeyore.ibcinc.com> Date: Tue, 31 Dec 1996 11:50:19 -0500 Files: pod/perldiag.pod ----------------- -Version 5.003_17 ----------------- +------------------ + Version 5.003_17 +------------------ The rate of patches is slowing down.... I see 5.004 at the end of the tunnel! (Hey, what's that whistle?) @@ -3239,7 +3554,7 @@ tunnel! (Hey, what's that whistle?) CORE LANGUAGE CHANGES Title: "Support named closures" - From: Chip Salzenberg + From: Chip Salzenberg Files: cv.h op.c perl.c pp.c pp_ctl.c pp_hot.c CORE PORTABILITY @@ -3255,7 +3570,7 @@ tunnel! (Hey, what's that whistle?) Files: hints/freebsd.sh Title: "Minor OS/2 fixes" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612252105.QAA11890@monk.mps.ohio-state.edu> Date: Wed, 25 Dec 1996 16:05:42 -0500 (EST) Files: os2/os2ish.h pod/perlxstut.pod @@ -3263,11 +3578,11 @@ tunnel! (Hey, what's that whistle?) OTHER CORE CHANGES Title: "Fix {,un}tainting of $1 etc. when C" - From: Chip Salzenberg + From: Chip Salzenberg Files: mg.c sv.c Title: "Limit effects of "=pod" to a single file" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c TESTS @@ -3277,19 +3592,19 @@ tunnel! (Hey, what's that whistle?) Files: MANIFEST t/lib/locale.t t/op/method.t Title: "Test C< ()=() >" - From: Chip Salzenberg + From: Chip Salzenberg Files: t/op/misc.t LIBRARY AND EXTENSIONS Title: "Refresh MakeMaker to 5.39" - From: Andreas Koenig + From: Andreas Koenig Files: lib/ExtUtils/Install.pm lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Mksymlists.pm Title: "Newer debugger" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612261954.OAA12999@monk.mps.ohio-state.edu> Date: Thu, 26 Dec 1996 14:54:34 -0500 (EST) Files: lib/perl5db.pl @@ -3297,27 +3612,27 @@ tunnel! (Hey, what's that whistle?) DOCUMENTATION Title: "Perlguts, version 27" - From: Jeff Okamoto + From: Jeff Okamoto Msg-ID: <199612250144.AA059528263@hpcc123.corp.hp.com> Date: Tue, 24 Dec 1996 17:44:23 -0800 Files: pod/perlguts.pod Title: "perlpod.pod patch for _16" - From: Kenneth Albanowski + From: Kenneth Albanowski Msg-ID: Date: Tue, 24 Dec 1996 23:00:10 -0500 (EST) Files: pod/perlpod.pod Title: "tiny perllocale.pod diff for _16" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199612261306.PAA21161@alpha.hut.fi> Date: Thu, 26 Dec 1996 15:06:04 +0200 (EET) Files: pod/perllocale.pod ----------------- -Version 5.003_16 ----------------- +------------------ + Version 5.003_16 +------------------ This patch is all bug fixes, library updates, and documentation updates. We'll get to 5.004 RSN, I promise. :-) @@ -3325,7 +3640,7 @@ updates. We'll get to 5.004 RSN, I promise. :-) CORE LANGUAGE CHANGES Title: "Fix closures that are not in subroutines" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c CORE PORTABILITY @@ -3339,25 +3654,25 @@ updates. We'll get to 5.004 RSN, I promise. :-) OTHER CORE CHANGES Title: "Fix 'foreach(@ARGV) { while (<>) { push @p,$_ } }'" - From: Chip Salzenberg + From: Chip Salzenberg Files: cop.h pp_hot.c scope.c Title: "Eliminate warnings from C< undef $x; $x OP= "foo" >" - From: Chip Salzenberg + From: Chip Salzenberg Files: doop.c pp.c pp.h pp_hot.c Title: "Try again to improve method caching" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612240113.UAA09487@monk.mps.ohio-state.edu> Date: Mon, 23 Dec 1996 20:13:56 -0500 (EST) Files: gv.c sv.c Title: "Be more careful about 'o' magic memory management" - From: Chip Salzenberg + From: Chip Salzenberg Files: mg.c sv.c Title: "Fix bad pointer refs when localized object loses magic" - From: Chip Salzenberg + From: Chip Salzenberg Files: scope.c LIBRARY AND EXTENSIONS @@ -3382,7 +3697,7 @@ updates. We'll get to 5.004 RSN, I promise. :-) BUILD PROCESS AND UTILITIES Title: "Don't recurse into subdirs twice on 'make realclean'" - From: Chip Salzenberg + From: Chip Salzenberg Files: Makefile.SH Title: "Use root EXTERN.h when compiling x2p/malloc.c." @@ -3396,17 +3711,17 @@ updates. We'll get to 5.004 RSN, I promise. :-) DOCUMENTATION Title: "Edit INSTALL to describe new binary compat setup" - From: Chip Salzenberg + From: Chip Salzenberg Files: INSTALL Title: "Update to perllocale.pod" - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Files: pod/perllocale.pod ----------------- -Version 5.003_15 ----------------- +------------------ + Version 5.003_15 +------------------ As soon as I posted 5.003_14, I found a fatal error in it. :-( @@ -3414,72 +3729,72 @@ This release is strictly a bug fix -- it removes some function caching changes that were supposed to be improvements, but weren't. ----------------- -Version 5.003_14 ----------------- +------------------ + Version 5.003_14 +------------------ We seem to have achieved "release candidate" status. CORE LANGUAGE CHANGES Title: "Eliminate support for {if,unless,while,until} BLOCK BLOCK" - From: Chip Salzenberg + From: Chip Salzenberg Files: perly.c perly.c.diff perly.y toke.c Title: "Taint $x after $x =~ s/pat/xyz/ if pat or xyz is tainted by locale" - From: Chip Salzenberg + From: Chip Salzenberg Files: cop.h mg.c pp_ctl.c pp_hot.c Title: "Complete support for modifying undefined array members in foreach" - From: Chip Salzenberg + From: Chip Salzenberg Files: global.sym mg.c perl.h pp.c pp_hot.c proto.h sv.c OTHER CORE CHANGES Title: "patch for regex bug: (x|x){n}" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199612210259.VAA10170@aatma.engin.umich.edu> Date: Fri, 20 Dec 1996 21:59:22 -0500 Files: regexec.c Title: "Bug in debugger with import manipulations" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612231037.FAA08617@monk.mps.ohio-state.edu> Date: Mon, 23 Dec 1996 05:37:48 -0500 (EST) Files: pp_hot.c Title: "Import and dynamic methods" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612230645.BAA08378@monk.mps.ohio-state.edu> Date: Mon, 23 Dec 1996 01:45:37 -0500 (EST) Files: gv.c hv.c sv.c Title: "malloc.c patch" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612220748.CAA07164@monk.mps.ohio-state.edu> Date: Sun, 22 Dec 1996 02:48:58 -0500 (EST) Files: malloc.c Title: "sv_gets patch" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612220824.DAA07235@monk.mps.ohio-state.edu> Date: Sun, 22 Dec 1996 03:24:04 -0500 (EST) Files: pp_hot.c Title: "pos $str patch" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612220831.DAA07247@monk.mps.ohio-state.edu> Date: Sun, 22 Dec 1996 03:31:21 -0500 (EST) Files: mg.c pp_hot.c t/op/pat.t Title: "Prevent warnings when STDCHAR is unsigned" - From: Chip Salzenberg + From: Chip Salzenberg Files: perlio.c perlio.h PORTABILITY Title: "Fix bugs in bincompat3 usage" - From: Chip Salzenberg + From: Chip Salzenberg Files: perl.h perl_exp.SH Title: "Support shared libperl on SunOS" @@ -3487,7 +3802,7 @@ We seem to have achieved "release candidate" status. Files: Makefile.SH Title: "Configure on OS/2" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612202325.SAA05505@monk.mps.ohio-state.edu> Date: Fri, 20 Dec 1996 18:25:30 -0500 (EST) Files: Configure @@ -3499,11 +3814,11 @@ We seem to have achieved "release candidate" status. Files: hints/isc.sh op.c pp_sys.c universal.c Title: "Use "proto" instead of "_" in sdbm.h" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/SDBM_File/sdbm/sdbm.h Title: "VMS patches to 5.003_13" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01IDBYYFYPIS002ASE@hmivax.humgen.upenn.edu> Date: Mon, 23 Dec 1996 01:26:47 -0500 (EST) Files: deb.c ext/POSIX/POSIX.xs gv.c lib/File/Copy.pm mg.c perl.c @@ -3516,11 +3831,11 @@ We seem to have achieved "release candidate" status. UTILITIES, LIBRARY, AND EXTENSIONS Title: "Remove libnet" - From: Chip Salzenberg + From: Chip Salzenberg Files: MANIFEST pod/perlmod.pod Title: "Refresh CPAN module to 1.08" - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/CPAN.pm lib/CPAN/FirstTime.pm Title: "Refresh ExtUtils::Manifest to version 1.28" @@ -3528,15 +3843,15 @@ We seem to have achieved "release candidate" status. Files: lib/ExtUtils/Manifest.pm Title: "Update IO->VERSION() to 1.1201 for CPAN's sake" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/IO/lib/IO/Handle.pm lib/IO/Handle.pm Title: "Remodel File::Copy." - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/File/Copy.pm Title: "dumb bug in User::pwent.pm" - From: Tom Christiansen + From: Tom Christiansen Msg-ID: <199612201145.EAA27860@mox.perl.com> Date: Fri, 20 Dec 1996 04:45:37 -0700 Files: lib/User/pwent.pm @@ -3544,7 +3859,7 @@ We seem to have achieved "release candidate" status. DOCUMENTATION Title: "Better support for =for" - From: Kenneth Albanowski + From: Kenneth Albanowski Msg-ID: Date: Fri, 20 Dec 1996 16:43:35 -0500 (EST) Files: lib/Pod/Text.pm pod/pod2latex.PL pod/pod2man.PL @@ -3556,26 +3871,26 @@ We seem to have achieved "release candidate" status. Files: pod/perllocale.pod Title: "Perlguts, version 26" - From: Jeff Okamoto + From: Jeff Okamoto Msg-ID: <199612201943.AA048111018@hpcc123.corp.hp.com> Date: Fri, 20 Dec 1996 11:43:38 -0800 Files: pod/perlguts.pod Title: "Update pod/Makefile; s/perli18n/perllocale/" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/POSIX/POSIX.pod lib/I18N/Collate.pm pod/Makefile pod/perl.pod pod/perlmod.pod pod/perlnews.pod pod/roffitall Title: "obstruct pod2man doc tweaks" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <3923.851106237@eeyore.ibcinc.com> Date: Fri, 20 Dec 1996 13:23:57 -0500 Files: lib/Class/Template.pm lib/Time/tm.pm ----------------- -Version 5.003_13 ----------------- +------------------ + Version 5.003_13 +------------------ The watchword here is "synchronization." There were a couple of show-stopper bugs in 5.003_12, so I'm issuing this patch to bring @@ -3584,33 +3899,33 @@ everyone up to a common working base. CORE LANGUAGE CHANGES Title: "Disallow labels named q, qq, qw, qx, s, y, and tr" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c Title: "Make evals' lexicals visible to nested evals" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_ctl.c OTHER CORE CHANGES Title: "Fix core dump bug with anoncode" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c Title: "Allow DESTROY to make refs to dying objects" - From: Chip Salzenberg + From: Chip Salzenberg Files: sv.c PORTABILITY Title: "Add missing backslash in Configure" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure UTILITIES, LIBRARY, AND EXTENSIONS Title: "Include libnet-1.01 instead of old Net::FTP" - From: Graham Barr + From: Graham Barr Files: MANIFEST lib/Net/Cmd.pm lib/Net/Domain.pm lib/Net/DummyInetd.pm lib/Net/FTP.pm lib/Net/NNTP.pm lib/Net/Netrc.pm lib/Net/POP3.pm lib/Net/SMTP.pm @@ -3622,7 +3937,7 @@ everyone up to a common working base. Files: lib/Net/FTP.pm Title: "Re: Open3.pm tries to close unopened file handle" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 18 Dec 1996 22:19:54 -0500 Files: MANIFEST lib/IPC/Open2.pm lib/IPC/Open3.pm lib/open2.pl @@ -3630,20 +3945,20 @@ everyone up to a common working base. t/lib/open3.t Title: "Long-standing problem in Socket module" - From: Spider Boardman + From: Spider Boardman Msg-ID: <199612190418.XAA07291@Orb.Nashua.NH.US> Date: Wed, 18 Dec 1996 23:18:14 -0500 Files: Configure Porting/Glossary config_H config_h.SH ext/Socket/Socket.pm ext/Socket/Socket.xs Title: "flock() constants" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <26669.850977437@eeyore.ibcinc.com> Date: Thu, 19 Dec 1996 01:37:17 -0500 Files: ext/Fcntl/Fcntl.pm ext/Fcntl/Fcntl.xs pod/perlfunc.pod Title: "Re: find2perl . -xdev BROKEN still" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 19 Dec 1996 12:44:34 -0500 Files: lib/File/Find.pm lib/find.pl lib/finddepth.pl @@ -3651,21 +3966,21 @@ everyone up to a common working base. DOCUMENTATION Title: "small doc tweaks for _12" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <1826.851011557@eeyore.ibcinc.com> Date: Thu, 19 Dec 1996 11:05:57 -0500 Files: lib/UNIVERSAL.pm pod/perldiag.pod pod/perltie.pod Title: "Re: missing E<> POD directive in perlpod.pod" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 19 Dec 1996 10:30:43 -0500 Files: pod/perlpod.pod pod/pod2html.PL ----------------- -Version 5.003_12 ----------------- +------------------ + Version 5.003_12 +------------------ This patch is huge. A multitude of bug fixes, new modules (especially CPAN and Net::FTP), a couple of new Configure variables, updated @@ -3675,109 +3990,109 @@ the more significant changes in 5.003_12: CORE LANGUAGE CHANGES Title: "Support C" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c op.h opcode.pl pod/perldiag.pod pod/perlfunc.pod pp.c t/op/delete.t Title: "Autovivify scalars" - From: Chip Salzenberg + From: Chip Salzenberg Files: dump.c op.c op.h pp.c pp_hot.c Title: "Allow any word, including keyword, as label" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c OTHER CORE CHANGES Title: "Allow assignment to empty array values during foreach()" - From: Chip Salzenberg + From: Chip Salzenberg Files: cop.h global.sym mg.c op.c perl.h pp_hot.c proto.h sv.c Title: "Fix nested closures" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c opcode.pl pp.c pp_ctl.c pp_hot.c Title: "Fix core dump on auto-vivification" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_hot.c Title: "Fix core dump on C" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_sys.c Title: "Fix -T/-B on globs and globrefs" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_sys.c Title: "Fix memory management of $`, $&, and $'" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_hot.c regexec.c Title: "Fix paren matching during backtracking" - From: Chip Salzenberg + From: Chip Salzenberg Files: regexec.c Title: "Fix memory leak and std{in,out,err} death in perl_{con,de}str - From: Chip Salzenberg + From: Chip Salzenberg Files: miniperlmain.c perl.c perl.h sv.c Title: "Discard garbage bytes at end of prototype()" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c Title: "Fix local($pack::{foo})" - From: Chip Salzenberg + From: Chip Salzenberg Files: global.sym pp.c pp_hot.c proto.h scope.c Title: "Fix for AmigaOS - inplace operation" - From: "Norbert Pueschel" + From: Norbert Pueschel Msg-ID: <77724601@Armageddon.meb.uni-bonn.de> Date: Sun, 08 Dec 1996 15:33:00 +0100 Files: doio.c Title: "Disable warn, die, and parse hooks _before_ global destruction - From: Chip Salzenberg + From: Chip Salzenberg Files: perl.c Title: "Re: Bug in formline " - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199612081958.OAA26025@aatma.engin.umich.edu> Date: Sun, 08 Dec 1996 14:58:32 -0500 Files: pp_ctl.c Title: "Fix C<@a = ($a,$b,$c,$d) = (1,2)>" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_hot.c Title: "Fix %ENV assignment when environment starts out empty" - From: Chip Salzenberg + From: Chip Salzenberg Files: hv.c Title: "Properly support and document newRV{,_inc,_noinc}" - From: Chip Salzenberg + From: Chip Salzenberg Files: global.sym pod/perlguts.pod sv.c sv.h Title: "Support SvREADONLY on arrays" - From: Chip Salzenberg + From: Chip Salzenberg Files: av.c Title: "Allow lvalue pos inside recursive function" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c pp.c pp_ctl.c pp_hot.c PORTABILITY Title: "Eliminate PerlIO warnings when setting cnt to -1" - From: Chip Salzenberg + From: Chip Salzenberg Files: perlio.c Title: "Make $privlib contents compatible with 5.003" - From: Chip Salzenberg + From: Chip Salzenberg Files: INSTALL ext/Opcode/Safe.pm installperl lib/FileHandle.pm lib/Test/Harness.pm Title: "Support $bincompat3 config variable; update metaconfig units" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure MANIFEST compat3.sym config_h.SH embed.pl global.sym old_embed.pl old_global.sym old_perl_exp.SH perl_exp.SH @@ -3788,11 +4103,11 @@ the more significant changes in 5.003_12: Files: Configure config_H config_h.SH pp.c Title: "Make $startperl a relative path if people want portable scrip - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure Title: "Homogenize use of "eval exec" hack" - From: Chip Salzenberg + From: Chip Salzenberg Files: Porting/Glossary eg/README eg/nih eg/sysvipc/ipcmsg eg/sysvipc/ipcsem eg/sysvipc/ipcshm lib/diagnostics.pm makeaperl.SH pod/checkpods.PL pod/perlrun.pod @@ -3808,7 +4123,7 @@ the more significant changes in 5.003_12: Files: Configure MANIFEST hints/lynxos.sh t/op/stat.t Title: "In Linux hints, set suidsafe=no and dosuid=yes" - From: Chip Salzenberg + From: Chip Salzenberg Files: hints/linux.sh Title: "5.003_11 on UnixWare 2.1.1 - Only one small UnixWare buglet" @@ -3818,17 +4133,17 @@ the more significant changes in 5.003_12: Files: hints/svr4.sh Title: "Re: db-recno.t failures with _11 on Freebsd 2.1-stable" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: Date: 11 Dec 1996 18:58:56 -0500 Files: INSTALL hints/freebsd.sh Title: "OS/2 updates from Ilya" - From: Ilya Zakharevich + From: Ilya Zakharevich Files: README.os2 os2/Changes os2/Makefile.SHs os2/os2.c os2/os2ish.h Title: "VMS patches to 5.003_11" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01ICTR32LCZG001A1D@hmivax.humgen.upenn.edu> Date: Mon, 09 Dec 1996 23:16:10 -0500 (EST) Files: MANIFEST regexec.c t/lib/filehand.t util.c vms/* @@ -3836,7 +4151,7 @@ the more significant changes in 5.003_12: TESTING Title: "recurse recurse recurse ..." - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199612092144.XAA29025@alpha.hut.fi> Date: Mon, 9 Dec 1996 23:44:27 +0200 (EET) Files: MANIFEST t/op/recurse.t @@ -3844,7 +4159,7 @@ the more significant changes in 5.003_12: UTILITIES, LIBRARY, AND EXTENSIONS Title: "Add CPAN and Net::FTP" - From: Chip Salzenberg + From: Chip Salzenberg Files: MANIFEST lib/CPAN.pm lib/CPAN/FirstTime.pm lib/CPAN/Nox.pm lib/Net/FTP.pm lib/Net/Netrc.pm lib/Net/Socket.pm pod/perlmod.pod @@ -3856,47 +4171,47 @@ the more significant changes in 5.003_12: Files: lib/Text/Tabs.pm lib/Text/Wrap.pm Title: "Add File::Compare" - From: Nick Ing-Simmons + From: Nick Ing-Simmons Msg-ID: <199612161844.SAA02152@pluto> Date: Mon, 16 Dec 1996 18:44:59 GMT Files: MANIFEST lib/File/Compare.pm pod/perlmod.pod Title: "Add Tie::RefHash" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199612152358.SAA28665@aatma.engin.umich.edu> Date: Sun, 15 Dec 1996 18:58:08 -0500 Files: MANIFEST lib/Tie/RefHash.pm pod/perlmod.pod Title: "Put "splain" in utils." - From: Chip Salzenberg + From: Chip Salzenberg Files: Makefile.SH installperl utils/Makefile utils/splain.PL Title: "Some h2ph fixes" - From: Jeff Okamoto + From: Jeff Okamoto Msg-ID: <199612131934.AA289845652@hpcc123.corp.hp.com> Date: Fri, 13 Dec 1996 11:34:12 -0800 Files: utils/h2ph.PL Title: "xsubpp patch to add #line" - From: nick@ni-s.u-net.com (Nick Ing-Simmons) + From: Nick Ing-Simmons Msg-ID: <199612162153.VAA03590@ni-s.u-net.com> Date: Mon, 16 Dec 1996 21:53:56 GMT Files: lib/ExtUtils/xsubpp Title: "Re: Proposed addition to File::Copy: move" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01ICZBN0LRC8001A1D@hmivax.humgen.upenn.edu> Date: Sat, 14 Dec 1996 00:27:29 -0500 (EST) Files: lib/File/Copy.pm t/lib/filecopy.t Title: "DB_File 1.09 patch" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9612181037.AA10123@claudius.bfsec.bt.co.uk> Date: Wed, 18 Dec 96 10:37:58 GMT Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs Title: "Debugger update" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612111038.FAA24363@monk.mps.ohio-state.edu> Date: Wed, 11 Dec 1996 05:38:28 -0500 (EST) Files: lib/perl5db.pl @@ -3909,13 +4224,13 @@ the more significant changes in 5.003_12: pod/perlnews.pod Title: "perltoot.pod" - From: Tom Christiansen + From: Tom Christiansen Msg-ID: <199612091444.HAA09947@toy.perl.com> Date: Mon, 09 Dec 1996 07:44:10 -0700 Files: MANIFEST pod/perltoot.pod Title: "Perlguts, version 25" - From: Jeff Okamoto + From: Jeff Okamoto Msg-ID: <199612061940.AA055461228@hpcc123.corp.hp.com> Date: Fri, 6 Dec 96 11:40:27 PST Files: pod/perlguts.pod @@ -3933,14 +4248,14 @@ the more significant changes in 5.003_12: Files: pod/*.pod Title: "Misc doc updates" - From: Tom Christiansen + From: Tom Christiansen Msg-ID: <199612150156.SAA12506@mox.perl.com> Date: Sat, 14 Dec 1996 18:56:33 -0700 Files: pod/* ----------------- -Version 5.003_11 ----------------- +------------------ + Version 5.003_11 +------------------ This patch is (still) closing in on 5.004. Nothing dramatic, lots of value. @@ -3948,91 +4263,91 @@ value. CORE LANGUAGE CHANGES Title: "Fix precedence problems with subs as uniops or listops" - From: Chip Salzenberg + From: Chip Salzenberg Files: perly.c perly.c.diff perly.h perly.y Title: "Don't reset $. on open()" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_sys.c Title: "Support *glob{IO} (eventually deprecate *glob{FILEHANDLE})" - From: Chip Salzenberg + From: Chip Salzenberg Files: pod/perlref.pod pp_hot.c sv.c Title: "Don't let expression context force return context" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c Title: "Properly convert "1E2" et al to IV/UV" - From: Chip Salzenberg + From: Chip Salzenberg Files: doio.c sv.c Title: "Fix modulo operator in UV realm" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c Title: "Fix stat(_) after stat(HANDLE)" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_sys.c Title: "Fix: s/// and "$x =~ $y" under 'use locale'" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c toke.c OTHER CORE CHANGES Title: "Eliminate spurious warning when splicing undefs" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c sv.h Title: "Eliminate spurious warning from "x=" operator" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c Title: "Fix line numbers near control structures" - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c perly.c perly.c.diff perly.y proto.h Title: "Don't let scalar unpack() underflow stack" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c Title: "Fix core dump from precedence bug in "@foo" warning" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c Title: "Move die() to utils.c; add varargs hack to croak()" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_ctl.c util.c Title: "Avoid memcmp() for magnitude test if it thinks char is signed" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure config_H config_h.SH doop.c ext/SDBM_File/sdbm/pair.c ext/SDBM_File/sdbm/sdbm.h handy.h hv.c perl.h pp_hot.c proto.h regexec.c sv.c toke.c util.c Title: "Less malloc in magic" - From: Chip Salzenberg + From: Chip Salzenberg Files: mg.c Title: "Re: 5.003_09: PADTMP fix" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199611281150.GAA06884@monk.mps.ohio-state.edu> Date: Thu, 28 Nov 1996 06:50:58 -0500 (EST) Files: pod/perlguts.pod Title: "Fully paramaterize locales; disable all if NO_LOCALE" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/POSIX/POSIX.xs op.c perl.h pp.c pp_sys.c sv.c util.c PORTABILITY AND TESTING Title: "Bitwise op fix for Alpha" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c Title: "hints/dgux.sh update" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <24178.849309616@eeyore.ibcinc.com> Date: Fri, 29 Nov 1996 18:20:16 -0500 Files: hints/dgux.sh @@ -4044,7 +4359,7 @@ value. Files: hints/hpux.sh Title: "VMS patches for 5.003_10" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01ICMALO8NMS001A1D@hmivax.humgen.upenn.edu> Date: Wed, 04 Dec 1996 16:40:12 -0500 (EST) Files: EXTERN.h INTERN.h old_perl_exp.SH perl.c perl.h perl_exp.SH @@ -4053,7 +4368,7 @@ value. vms/gen_shrfls.pl vms/genconfig.pl vms/vmsish.h Title: "_10+ under OS/2" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612011107.GAA10805@monk.mps.ohio-state.edu> Date: Sun, 1 Dec 1996 06:07:19 -0500 (EST) Files: malloc.c os2/diff.configure @@ -4061,7 +4376,7 @@ value. LIBRARY AND EXTENSIONS Title: "{in,ob}structive pods" - From: Tom Christiansen + From: Tom Christiansen Msg-ID: <199611301652.JAA24201@toy.perl.com> Date: Sat, 30 Nov 1996 09:52:57 -0700 Files: MANIFEST lib/Class/Template.pm lib/File/stat.pm @@ -4070,44 +4385,44 @@ value. lib/Time/tm.pm lib/User/grent.pm lib/User/pwent.pm Title: "FileHandle that 'ISA' IO::File" - From: Nick Ing-Simmons + From: Nick Ing-Simmons Msg-ID: <199612021718.RAA04416@pluto> Date: Mon, 2 Dec 1996 17:18:02 GMT Files: MANIFEST lib/FileHandle.pm Title: "Make IO::File::import use its parameters" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/IO/lib/IO/File.pm Title: "10+ debugger patch" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199612011137.GAA10864@monk.mps.ohio-state.edu> Date: Sun, 1 Dec 1996 06:37:31 -0500 (EST) Files: lib/perl5db.pl perl.c pod/perldebug.pod Title: "Don't call CORE::close in file handle DESTROY method" - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/IO/lib/IO/Handle.pm Title: "Re: Namespace cleanup: Does SDBM need binary compatibility?" - From: Hallvard B Furuseth + From: Hallvard B Furuseth Msg-ID: <199612031445.PAA19056@bombur2.uio.no> Date: Tue, 3 Dec 1996 15:45:27 +0100 (MET) Files: ext/SDBM_File/sdbm/pair.h ext/SDBM_File/sdbm/sdbm.3 Title: "DB_File 1.07" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs t/lib/db-btree.t t/lib/db-recno.t Title: "DB_File 1.08" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs ----------------- -Version 5.003_10 ----------------- +------------------ + Version 5.003_10 +------------------ This patch is closing in on 5.004. It contains lots of small and valuable changes, but nothing dramatic. @@ -4115,7 +4430,7 @@ valuable changes, but nothing dramatic. CORE LANGUAGE CHANGES Title: "Allow &{sub {...}} without warning" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c Title: "Make parens optional on [gs]ethost and [gs]et{pw,gr} functions @@ -4123,25 +4438,25 @@ valuable changes, but nothing dramatic. Files: toke.c Title: "Fix syntax error with "$x [0]" and "$x {y}" and "@x {y}"" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c OTHER CORE CHANGES Title: "Fix regex matching of chars with high bit set" - From: Chip Salzenberg + From: Chip Salzenberg Files: regexec.c Title: "Hash key memory corruption fix and naming cleanup" - From: Chip Salzenberg + From: Chip Salzenberg Files: hv.c hv.h perl.h Title: "Undo broken perf. patch (PADTMP stealing)" - From: Chip Salzenberg + From: Chip Salzenberg Files: sv.c Title: "Make SV unstudied in sv_gets()" - From: Chip Salzenberg + From: Chip Salzenberg Files: sv.c Title: "Better support for UVs" @@ -4151,51 +4466,51 @@ valuable changes, but nothing dramatic. Title: "Minor locale cleanups" (Accept "POSIX" locale as standard like "C". Reset locale to 'C' when testing strtod() in t/lib/posix.t.) - From: Chip Salzenberg + From: Chip Salzenberg Files: t/lib/posix.t util.c Title: "Always taint result of sprintf() on float" - From: Chip Salzenberg + From: Chip Salzenberg Files: doop.c Title: "Fix spurious warning from bitwise string ops" - From: Chip Salzenberg + From: Chip Salzenberg Files: doop.c Title: "Eliminate warning on {,sys}read(,$newvar,)" - From: Chip Salzenberg + From: Chip Salzenberg Files: doop.c pp_sys.c Title: "Don't call fcntl(fileno(rsfp)) if !rsfp" - From: Chip Salzenberg + From: Chip Salzenberg Files: perl.c Title: "Save message when calling __DIE__ hook" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_ctl.c Title: "Namespace cleanup" - From: Chip Salzenberg + From: Chip Salzenberg Files: global.sym old_global.sym perl.h Title: "Modify perl_exp.SH; create old_perl_exp.SH; document old_*" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure INSTALL MANIFEST old_perl_exp.SH perl_exp.SH PORTABILITY Title: "Reliable signal patch" - From: Kenneth Albanowski + From: Kenneth Albanowski Msg-ID: Date: Tue, 26 Nov 1996 05:40:50 -0500 (EST) Files: global.sym mg.c old_global.sym perl.h pp_sys.c proto.h util.c Title: "Emulate missing flock() with either fcntl() or lockf()" - From: Chip Salzenberg + From: Chip Salzenberg Files: pp_sys.c Title: "3_09: minor patches for OS/2" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199611270830.DAA04985@monk.mps.ohio-state.edu> Date: Wed, 27 Nov 1996 03:30:05 -0500 (EST) Files: doio.c global.sym malloc.c old_global.sym os2/Makefile.SHs @@ -4211,7 +4526,7 @@ valuable changes, but nothing dramatic. t/TEST toke.c util.c x2p/proto.h Title: "Re: updated patch on the sysread, syswrite for VMS" - From: Charles Bailey + From: Charles Bailey Msg-ID: <01ICB648K2XG001A1D@hmivax.humgen.upenn.edu> Date: Tue, 26 Nov 1996 17:28:23 -0500 (EST) Files: t/op/sysio.t @@ -4219,37 +4534,37 @@ valuable changes, but nothing dramatic. LIBRARY AND EXTENSIONS Title: "Minor patch to debugger" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199611290533.AAA08053@monk.mps.ohio-state.edu> Date: Fri, 29 Nov 1996 00:33:49 -0500 (EST) Files: lib/perl5db.pl Title: "AutoLoader::AUTOLOAD optimization" - From: nick@ni-s.u-net.com (Nick Ing-Simmons) + From: Nick Ing-Simmons Msg-ID: <199611231954.TAA09921@ni-s.u-net.com> Date: Sat, 23 Nov 1996 19:54:52 GMT Files: lib/AutoLoader.pm Title: "Diagnostic cleanup" - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/diagnostics.pm pod/perldiag.pod DOCUMENTATION Title: "Improve documentation for sysread() and syswrite()" - From: Chip Salzenberg + From: Chip Salzenberg Files: pod/perlfunc.pod Title: "Document how to use $SIG{ALRM} and alarm()" - From: Roderick Schertler + From: Roderick Schertler Msg-ID: <5898.849026569@eeyore.ibcinc.com> Date: Tue, 26 Nov 1996 11:42:49 -0500 Files: pod/perlfunc.pod ----------------- -Version 5.003_09 ----------------- +------------------ + Version 5.003_09 +------------------ This patch was a compendium of various fixes and enhancements from many people, including some serious improvement in lexical variable @@ -4259,17 +4574,17 @@ scoping and locale handling. Title: "Lexical locales" (make effectiveness of locales depend on C) - From: Chip Salzenberg + From: Chip Salzenberg Files: too many to list Title: "Lexical scoping cleanup" (tighten scoping of lexical variables, somewhat on the new constructs and somewhat on the old) - From: Chip Salzenberg + From: Chip Salzenberg Files: many... but mostly perly.y and toke.c Title: "Re: memory corruption / security bug in sysread,syswrite + pa - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Msg-ID: <199611251946.VAA30459@alpha.hut.fi> Date: Mon, 25 Nov 1996 21:46:31 +0200 (EET) Files: MANIFEST pod/perldiag.pod pod/perlfunc.pod pp_sys.c @@ -4278,11 +4593,11 @@ scoping and locale handling. OTHER CORE CHANGES Title: "Configure fix for handling DynaLoader" - From: Chip Salzenberg + From: Chip Salzenberg Files: Configure Title: "Properly prototype safe{malloc,calloc,realloc,free}." - From: Chip Salzenberg + From: Chip Salzenberg Files: proto.h Title: "UnixWare 2.1 fix for perl5.003_08 - cope with fp->_cnt < -1, @@ -4292,55 +4607,55 @@ scoping and locale handling. Files: sv.c Title: ""static" call to UNIVERSAL::can" - From: Nick.Ing-Simmons@tiuk.ti.com + From: Nick Ing-Simmons Msg-ID: <199611211547.PAA15878@pluto> Date: Thu, 21 Nov 1996 15:47:46 GMT Files: universal.c Title: "die -> croak" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199611212111.QAA17070@aatma.engin.umich.edu> Date: Thu, 21 Nov 1996 16:11:21 -0500 Files: pp_ctl.c Title: "Patch for embed.pl when !EMBED && !MULTIPLICITY" - From: Chip Salzenberg + From: Chip Salzenberg Files: embed.pl Title: "Add new symbols to old_global.sym, too." - From: Chip Salzenberg + From: Chip Salzenberg Files: global.sym old_global.sym Title: "Cleanup of {,un}pack('w')." - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c Title: "Cleanups from Ilya." - From: Chip Salzenberg + From: Chip Salzenberg Files: gv.c malloc.c pod/perlguts.pod pp_ctl.c Title: "Fix for unpack('w') on 64-bit systems." - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c Title: "Re: LC_NUMERIC support is ready + performance" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199611260308.WAA02677@monk.mps.ohio-state.edu> Date: Mon, 25 Nov 1996 22:08:27 -0500 (EST) Files: sv.c Title: "Hash key sharing improvements from Ilya." - From: Chip Salzenberg + From: Chip Salzenberg Files: hv.c hv.h proto.h Title: "Mortal stack pre-allocation from Ilya." - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c pp.h pp_ctl.c pp_hot.c pp_sys.c PORTABILITY Title: "VMS patches post-5.003_08" - From: bailey@hmivax.humgen.upenn.edu (Charles Bailey) + From: Charles Bailey Msg-ID: <1996Nov22.181631.1603238@hmivax.humgen.upenn.edu> Date: Fri, 22 Nov 1996 18:16:31 -0500 (EST) Files: lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm @@ -4350,20 +4665,20 @@ scoping and locale handling. vms/vmsish.h Title: "5.003_08: OS/2-specific bugs/enhancements" - From: Ilya Zakharevich + From: Ilya Zakharevich Msg-ID: <199611241147.GAA00490@monk.mps.ohio-state.edu> Date: Sun, 24 Nov 1996 06:47:25 -0500 (EST) Files: README.os2 hints/os2.sh os2/Changes os2/Makefile.SHs os2/OS2/PrfDB/PrfDB.pm os2/os2.c Title: "HP patches didn't make it into _08 (fwd)" - From: Jeff Okamoto + From: Jeff Okamoto Msg-ID: <199611260215.AA100414526@hpcc123.corp.hp.com> Date: Mon, 25 Nov 96 18:15:26 PST Files: ext/DynaLoader/dl_hpux.xs Title: "Another HP "patch" that didn't make it (new hints file)" - From: Jeff Okamoto + From: Jeff Okamoto Msg-ID: <199611252116.AA245766577@hpcc123.corp.hp.com> Date: Mon, 25 Nov 1996 13:16:17 -0800 Files: hints/hpux.sh @@ -4371,15 +4686,15 @@ scoping and locale handling. LIBRARY AND EXTENSIONS Title: "Elide spurious space in db-hash.t" - From: Chip Salzenberg + From: Chip Salzenberg Files: t/lib/db-hash.t Title: "Update documentation and warning in I18N::Collate." - From: Chip Salzenberg + From: Chip Salzenberg Files: lib/I18N/Collate.pm Title: "Fix bitwise op test; clean up a couple of others" - From: Chip Salzenberg + From: Chip Salzenberg Files: t/lib/bigintpm.t t/op/bop.t t/op/overload.t Title: "minimal timelocal.pl for _09" @@ -4389,11 +4704,11 @@ scoping and locale handling. Files: lib/Time/Local.pm Title: "Socket test improvement from Ilya." - From: Chip Salzenberg + From: Chip Salzenberg Files: t/lib/io_sock.t Title: "Re: blib" - From: nick@ni-s.u-net.com (Nick Ing-Simmons) + From: Nick Ing-Simmons Msg-ID: <199611230917.JAA00471@ni-s.u-net.com> Date: Sat, 23 Nov 1996 09:17:40 GMT Files: lib/blib.pm @@ -4401,19 +4716,19 @@ scoping and locale handling. DOCUMENTATION Title: "perldiag documentation patch." - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9611201607.AA12729@claudius.bfsec.bt.co.uk> Date: Wed, 20 Nov 96 16:07:28 GMT Files: pod/perldiag.pod Title: "a missing perldiag entry" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Msg-ID: <199611212024.PAA15758@aatma.engin.umich.edu> Date: Thu, 21 Nov 1996 15:24:02 -0500 Files: pod/perldiag.pod Title: "perlfunc patch" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Msg-ID: <9611201404.AA12477@claudius.bfsec.bt.co.uk> Date: Wed, 20 Nov 96 14:04:08 GMT Files: pod/perlfunc.pod @@ -4425,19 +4740,19 @@ scoping and locale handling. Files: pod/perlpod.pod Title: "Update locale documentation." - From: Chip Salzenberg + From: Chip Salzenberg Files: pod/perli18n.pod BUNDLED UTILITIES Title: "Fix type mismatches in x2p's safe{alloc,realloc,free}." - From: Chip Salzenberg + From: Chip Salzenberg Files: x2p/util.c ----------------- -Version 5.003_08 ----------------- +------------------ + Version 5.003_08 +------------------ This patch was a compendium of various fixes and enhancements from many people. Here are some of the more significant changes. @@ -4446,13 +4761,13 @@ many people. Here are some of the more significant changes. CORE LANGUAGE CHANGES Title: "Make C fail if C fails" - From: Tim Bunce + From: Tim Bunce Files: gv.c Title: "Bitwise op sign rationalization" (Make bitwise ops result in unsigned values, unless C is in effect. Includes initial support for UVs.) - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c opcode.pl pod/perlop.pod pod/perltoc.pod pp.c pp.h pp_hot.c proto.h sv.c t/op/bop.t @@ -4463,78 +4778,78 @@ many people. Here are some of the more significant changes. structure. Also adds new construct "for my", which automatically declares the control variable "my" and limits its scope to the loop.) - From: Chip Salzenberg + From: Chip Salzenberg Files: op.c perly.c perly.c.diff perly.h perly.y proto.h toke.c Title: "Fix ++/-- after int conversion (e.g. 'printf "%d"')" (This patch makes Perl correctly ignore SvIVX() if either NOK or POK is true, since SvIVX() may be a truncated or overflowed version of the real value.) - From: Chip Salzenberg + From: Chip Salzenberg Files: pp.c pp_hot.c sv.c Title: "Make code match Camel II re: functions that use $_" - From: pmarquess@bfsec.bt.co.uk (Paul Marquess) + From: Paul Marquess Files: opcode.pl Title: "Provide scalar context on left side of "->"" - From: Chip Salzenberg + From: Chip Salzenberg Files: perly.c perly.y Title: "Quote bearword package/handle FOO in "funcname FOO => 'bar'"" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c OTHER CORE CHANGES Title: "Warn on overflow of octal and hex integers" - From: Chip Salzenberg + From: Chip Salzenberg Files: proto.h toke.c util.c Title: "If -w active, warn for commas and hashes ('#') in qw()" - From: Chip Salzenberg + From: Chip Salzenberg Files: toke.c Title: "Fixes for pack('w')" - From: Ulrich Pfeifer + From: Ulrich Pfeifer Files: pp.c t/op/pack.t Title: "More complete output from sv_dump()" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Files: sv.c Title: "Major '..' and debugger patches" - From: Ilya Zakharevich + From: Ilya Zakharevich Files: lib/perl5db.pl op.c pp_ctl.c scope.c scope.h Title: "Fix for formline()" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Files: global.sym mg.c perl.h pod/perldiag.pod pp_ctl.c proto.h sv.c t/op/write.t Title: "Fix stack botch in untie and binmode" - From: Gurusamy Sarathy + From: Gurusamy Sarathy Files: pp_sys.c Title: "Complete EMBED, including symbols from interp.sym" (New define EMBEDMYMALLOC makes embedding total by avoiding "Mymalloc" etc.) - From: Chip Salzenberg + From: Chip Salzenberg Files: MANIFEST embed.pl ext/DynaLoader/dlutils.c ext/SDBM_File/sdbm/sdbm.h global.sym handy.h malloc.c perl.h pp_sys.c proto.h regexec.c toke.c util.c x2p/Makefile.SH x2p/a2p.h x2p/handy.h x2p/util.h Title: "Support old embedding for people who want it" - From: Chip Salzenberg + From: Chip Salzenberg Files: MANIFEST Makefile.SH old_embed.pl old_global.sym PORTABILITY Title: "Miscellaneous VMS fixes" - From: Charles Bailey + From: Charles Bailey Files: lib/ExtUtils/Liblist.pm lib/ExtUtils/MM_VMS.pm lib/Math/Complex.pm lib/Time/Local.pm lib/timelocal.pl perl.h perl_exp.SH proto.h t/TEST t/io/read.t @@ -4555,14 +4870,14 @@ many people. Here are some of the more significant changes. plan9/genconfig.pl plan9/mkfile plan9/setup.rc Title: "Patch to make Perl work under AmigaOS" - From: "Norbert Pueschel" + From: Norbert Pueschel Files: MANIFEST hints/amigaos.sh installman lib/File/Basename.pm lib/File/Find.pm pod/pod2man.PL pp_sys.c util.c LIBRARY AND EXTENSIONS Title: "DB_File 1.05" - From: Paul Marquess (pmarquess@bfsec.bt.co.uk) + From: Paul Marquess Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs t/lib/db-hash.t Title: "Getopts::Std patch for hash support" @@ -4571,7 +4886,7 @@ many people. Here are some of the more significant changes. Title: "Kludge for bareword handles" (Add 'require IO::Handle' at beginning of FileHandle.pm) - From: Chip Salzenberg + From: Chip Salzenberg Files: ext/FileHandle/FileHandle.pm Title: "Re: strtod / strtol patch for POSIX module" @@ -4582,13 +4897,13 @@ many people. Here are some of the more significant changes. BUNDLED UTILITIES Title: "Fix a2p translation of '{print "a" "b" "c"}'" - From: Chip Salzenberg + From: Chip Salzenberg Files: x2p/a2p.c x2p/a2p.y ----------------- -Version 5.003_07 ----------------- +------------------ + Version 5.003_07 +------------------ This patch was primarily to fix bugs or include little things I missed in 5.003_06. 5.003_07 is intended to be stable enough to merit serious @@ -4682,14 +4997,14 @@ Index: MANIFEST Add mention of t/lib/io_taint.t Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich os2/Changes added. Index: Makefile.SH Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich All the executable targets are moved into the same chunk with shared library target, which is delegated to @@ -4755,14 +5070,14 @@ Index: ext/SDBM_File/sdbm/sdbm.h Index: gv.c Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Better error message for overload. Index: hints/os2.sh Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Some optimization (speedup in loading GNU utilities with some memory present - 32M should be quite enough). @@ -4777,14 +5092,14 @@ Index: hints/sco.sh Index: installperl Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Restore timestamps under OS/2 (needed for binary install). Index: lib/Cwd.pm Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Use builtin methods if present under OS/2 (maybe should be done outside of OS/2 too?). @@ -4792,28 +5107,28 @@ Index: lib/Cwd.pm Index: lib/ExtUtils/MM_Unix.pm Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Made `use strict'-clean even in parts shadowed by Autoloading. Index: lib/ExtUtils/typemap Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich `bool' entry added. Index: lib/ExtUtils/xsubpp Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Logic for processing RETVAL documented (at last!). Index: lib/File/Copy.pm Date: Thu, 10 Oct 1996 00:42:29 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Subject: Cleanup after new test Below are patches for File::Copy (copying to filehandles was just @@ -4822,7 +5137,7 @@ Index: lib/File/Copy.pm Index: lib/FindBin.pm Date: Fri, 20 Sep 1996 15:04:04 +0200 - From: Gisle Aas + From: Gisle Aas Subject: Documentation patch to the FindBin module Index: lib/Getopt/Long.pm @@ -4844,7 +5159,7 @@ Index: lib/newgetopt.pl Index: makedepend.SH Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich weed out perl_exp.SH, config_h.SH (They have these funny names to avoid names like perl.exp.SH @@ -4853,7 +5168,7 @@ Index: makedepend.SH Index: mg.c Date: Thu, 10 Oct 1996 14:33:08 +0000 () - From: Chip Salzenberg + From: Chip Salzenberg Subject: Re: Group fix for 5.003_06 The group problems recently experienced are due to a small error @@ -4862,20 +5177,20 @@ Index: mg.c Index: os2/Changes Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich sys/un.h is not very useful without Merlin toolkit. updates for fork()ing. Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich added. Index: os2/Makefile.SHs Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Convoluted process to create chimera executables added. aout_clean is done automatically on clean. @@ -4883,7 +5198,7 @@ Index: os2/Makefile.SHs Index: os2/OS2/ExtAttr/t/os2_ea.t Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Use `unlink' where appropriate. @@ -4894,7 +5209,7 @@ Index: os2/diff.configure Index: os2/os2.c Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich /bin/sh is translated to the configured value of location of sh.exe. popen() used even if we can fork (as we do now). @@ -4903,7 +5218,7 @@ Index: os2/os2.c Index: os2/os2ish.h Date: Wed, 9 Oct 1996 22:29:44 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich sys/un.h is not very useful without Merlin toolkit. updates for fork()ing. @@ -4915,7 +5230,7 @@ Index: patchlevel.h Index: perl.c Date: Wed, 9 Oct 1996 19:03:41 +0000 - From: Tim Bunce + From: Tim Bunce Subject: Infinte loop with perl_destruct_level and $SIG{__WARN__} I've just started using purify on a perl with DBD::Oracle linked in @@ -4926,7 +5241,7 @@ Index: perl.c of problems typified by this example and folowed by a core dump: Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Copywrite of OS/2 port now has \n\n. Now deletes -e file (again!) if compilation is interrupted. @@ -5000,7 +5315,7 @@ Index: plan9/versnum Index: pod/perldiag.pod Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich mention that malloc in berkeley DB is broken, and PERL_BADFREE. OS/2-specific messages added. @@ -5008,7 +5323,7 @@ Index: pod/perldiag.pod Index: pod/perlfunc.pod Date: 20 Sep 1996 13:17:14 +0200 - From: Ulrich Pfeifer + From: Ulrich Pfeifer Subject: Re: Patch for ASN.1 compressed integer in pack/unpack Index: pod/perli18n.pod @@ -5018,7 +5333,7 @@ Index: pod/perli18n.pod Index: pod/perlop.pod Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Crossrefs corrected. @@ -5030,14 +5345,14 @@ Index: pod/perltrap.pod Index: pod/perlvar.pod Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich $^E under OS/2. Index: pp.c Date: 20 Sep 1996 13:17:14 +0200 - From: Ulrich Pfeifer + From: Ulrich Pfeifer Subject: Re: Patch for ASN.1 compressed integer in pack/unpack Index: pp_sys.c @@ -5051,7 +5366,7 @@ Index: pp_sys.c Index: sv.c Date: Tue, 08 Oct 1996 23:54:47 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: Re: Sorting lists of integers doesn't always work >> > print sort (4,1,2,3); @@ -5070,7 +5385,7 @@ Index: sv.c Index: t/lib/anydbm.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich File mode under OS/2 is not what you expect. However, this has nothing to do with databases, _and_ there is a test @@ -5082,7 +5397,7 @@ Index: t/lib/anydbm.t Index: t/lib/db-btree.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich File mode under OS/2 is not what you expect. However, this has nothing to do with databases, _and_ there is a test @@ -5094,7 +5409,7 @@ Index: t/lib/db-btree.t Index: t/lib/db-hash.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich File mode under OS/2 is not what you expect. However, this has nothing to do with databases, _and_ there is a test @@ -5106,7 +5421,7 @@ Index: t/lib/db-hash.t Index: t/lib/db-recno.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich File mode under OS/2 is not what you expect. However, this has nothing to do with databases, _and_ there is a test @@ -5118,7 +5433,7 @@ Index: t/lib/db-recno.t Index: t/lib/gdbm.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich File mode under OS/2 is not what you expect. However, this has nothing to do with databases, _and_ there is a test @@ -5130,7 +5445,7 @@ Index: t/lib/gdbm.t Index: t/lib/io_pipe.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Better error message on dying. @@ -5154,7 +5469,7 @@ Index: t/lib/io_taint.t Index: t/lib/ndbm.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich File mode under OS/2 is not what you expect. However, this has nothing to do with databases, _and_ there is a test @@ -5166,7 +5481,7 @@ Index: t/lib/ndbm.t Index: t/lib/odbm.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich File mode under OS/2 is not what you expect. However, this has nothing to do with databases, _and_ there is a test @@ -5178,7 +5493,7 @@ Index: t/lib/odbm.t Index: t/lib/sdbm.t Date: Wed, 9 Oct 1996 22:30:38 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich File mode under OS/2 is not what you expect. However, this has nothing to do with databases, _and_ there is a test @@ -5190,7 +5505,7 @@ Index: t/lib/sdbm.t Index: t/lib/socket.t Date: Thu, 10 Oct 1996 01:09:59 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: 5.003_06 is available (results on ULTRIX) fix t/lib/socket.t to treat TCP like the stream protocol it is @@ -5199,19 +5514,19 @@ Index: t/lib/socket.t Index: t/op/pack.t Date: 20 Sep 1996 13:17:14 +0200 - From: Ulrich Pfeifer + From: Ulrich Pfeifer Subject: Re: Patch for ASN.1 compressed integer in pack/unpack Index: t/op/sort.t Date: Wed, 09 Oct 1996 00:41:27 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: more t/op/sort.t tests Index: util.c Date: Wed, 9 Oct 1996 22:32:22 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich uses my_syspopen, my_syspclose ifdef OS2. my_pclose is defined as my_syspclose ifdef OS2 and can FORK (as OS2 does). @@ -5237,9 +5552,10 @@ Index: x2p/cflags.SH pathname of the file being extracted. ----------------- -Version 5.003_06 ----------------- +------------------ + Version 5.003_06 +------------------ + This patch was primarily to fix bugs, improve the documentation, and work towards restoring binary compatibility with 5.003. The details are described below. A very brief summary is: @@ -5291,7 +5607,7 @@ Here are the specific file-by-file changes. # The full description is below. # Please execute the following commands before applying this patch. # (You can feed this patch to 'sh' to do so.) -# Andy Dougherty +# -- Andy Dougherty # We'll create some new tests, but patch won't automatically make them # executable. @@ -5327,12 +5643,6 @@ designed so you can examine each change with a command such as csplit may complain, since many csplit's have an arbitrary limit of 100 files. Still, you can manually split the file or roll your own.) -Patch and enjoy, - - Andy Dougherty doughera@lafcol.lafayette.edu - Dept. of Physics - Lafayette College, Easton PA 18042 - Index: Changes Updated for 5.003_06. @@ -5353,7 +5663,7 @@ Index: Configure Index: INSTALL Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -5363,7 +5673,7 @@ Index: INSTALL Index: MANIFEST Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -5371,13 +5681,13 @@ Index: MANIFEST out are applied. Date: Sat, 28 Sep 1996 15:11:06 +0200 - From: Andreas Koenig + From: Andreas Koenig Subject: Dale's posting as patch (Was: Perl 5.003_5 make fails on NS3.2 - CURED) Handle NeXT, POSIX, and setpgid in pp_sys.c and POSIX. Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -5408,13 +5718,13 @@ Index: configure Index: doio.c Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: doop.c Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -5536,7 +5846,7 @@ Index: ext/NDBM_File/hints/dynixptx.pl Index: ext/Opcode/Opcode.pm Date: Fri, 20 Sep 1996 12:59:21 +0200 - From: Gisle Aas + From: Gisle Aas Subject: Re: Symbol.pm clobbers $_ at startup The same kind of problem seem to be present in Opcode.pm: @@ -5560,7 +5870,7 @@ Index: ext/Opcode/Safe.pm Index: ext/POSIX/POSIX.pod Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -5570,7 +5880,7 @@ Index: ext/POSIX/POSIX.pod Index: ext/POSIX/POSIX.xs Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -5581,7 +5891,7 @@ Index: ext/POSIX/POSIX.xs Index: ext/POSIX/hints/next_3.pl Date: Sat, 28 Sep 1996 15:11:06 +0200 - From: Andreas Koenig + From: Andreas Koenig Subject: Dale's posting as patch (Was: Perl 5.003_5 make fails on NS3.2 - CURED) Handle NeXT, POSIX, and setpgid in pp_sys.c and POSIX. @@ -5606,7 +5916,7 @@ Index: global.sym Provide new 3-arg forms gv_fullname3() and gv_efullname3(). Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -5616,7 +5926,7 @@ Index: global.sym improved. Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -5631,7 +5941,7 @@ Index: gv.c Index: handy.h Date: Sat, 21 Sep 1996 21:33:15 -0400 (EDT) - From: Kenneth Albanowski + From: Kenneth Albanowski Subject: Full LONG_MAX & co. patch over 5.003_05 This patch contains the changes I've collected for the various _MAX issues @@ -5651,7 +5961,7 @@ Index: hints/next_3.sh the optimizier. Date: Sat, 28 Sep 1996 15:11:06 +0200 - From: Andreas Koenig + From: Andreas Koenig Subject: Dale's posting as patch (Was: Perl 5.003_5 make fails on NS3.2 - CURED) Handle NeXT, POSIX, and setpgid in pp_sys.c and POSIX. @@ -5659,7 +5969,7 @@ Index: hints/next_3.sh Index: hv.c Date: Fri, 20 Sep 1996 15:38:57 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: Re: "Attempt to free non-existent shared string"? (with patch) I found a subtle problem with the lazydelete mechanism (which is used @@ -5673,7 +5983,7 @@ Index: hv.c flag. Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -5685,7 +5995,7 @@ Index: hv.c Index: hv.h Date: Fri, 20 Sep 1996 15:38:57 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: Re: "Attempt to free non-existent shared string"? (with patch) I found a subtle problem with the lazydelete mechanism (which is used @@ -5719,21 +6029,21 @@ Index: installperl Index: lib/AutoLoader.pm Date: Mon Sep 9 09:29:44 1996 - From: Gisle Aas + From: Gisle Aas Subject: Re: problem with 'die' and UserAgent > This is a patch to the AutoLoader.pm (from 5.003) that fixes the problem: This is a better patch (no need to test for /::DESTROY$/ twice): Date: Mon, 30 Sep 1996 00:54:37 -0400 - From: Spider Boardman + From: Spider Boardman The test and patches for AutoLoader were also non-functional, since the regexp context (curpm) was still being clobbered by the filename manipulations: Date: Sun, 06 Oct 1996 16:15:07 +0200 - From: Gisle Aas + From: Gisle Aas Subject: Re: Can't locate auto/U/autosplit.ix It would IMHO be much better if the AutoLoader exported the AUTOLOAD() @@ -5746,7 +6056,7 @@ Index: lib/AutoLoader.pm Index: lib/Benchmark.pm Date: Sat, 28 Sep 1996 17:01:22 +0300 (EET DST) - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: a really really tiny typo Date: Fri, 20 Sep 1996 15:08:33 +0100 (BST) @@ -5831,7 +6141,7 @@ Index: lib/ExtUtils/MM_VMS.pm 5.003_05 pods, including the pods embedded in library modules. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: lib/ExtUtils/MakeMaker.pm @@ -5853,7 +6163,7 @@ Index: lib/ExtUtils/Manifest.pm 5.003_05 pods, including the pods embedded in library modules. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: lib/ExtUtils/Mksymlists.pm @@ -5872,24 +6182,24 @@ Index: lib/ExtUtils/xsubpp Index: lib/File/Basename.pm Date: Fri, 20 Sep 1996 14:11:05 +0200 - From: Gisle Aas + From: Gisle Aas Subject: File::BaseName: "/" is legal path separator for MSDOS The File::BaseName module should allow "/" as path separator when fileparse_set_fstype("MSDOS") is in effect: Date: Fri, 20 Sep 1996 13:58:52 +0200 - From: Gisle Aas + From: Gisle Aas Subject: File::Basename documentation patch Date: Mon, 30 Sep 1996 00:54:37 -0400 - From: Spider Boardman + From: Spider Boardman For t/lib/basename.t, though, the associated patch for File::Basename was also wrong: Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: lib/File/Copy.pm @@ -5943,7 +6253,7 @@ Index: lib/Getopt/Long.pm Index: lib/I18N/Collate.pm Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -5971,7 +6281,7 @@ Index: lib/IPC/Open3.pm Index: lib/Math/BigInt.pm Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -5999,7 +6309,7 @@ Index: lib/Pod/Text.pm Index: lib/Search/Dict.pm Date: Sat, 21 Sep 1996 23:02:42 +0200 - From: Gisle Aas + From: Gisle Aas Subject: look() in Search::Dict should use lc() istead of tr/A-Z/a-z/ The Search::Dict look() function should use the lc() function instead @@ -6018,7 +6328,7 @@ Index: lib/SelfLoader.pm Index: lib/Symbol.pm Date: Fri, 20 Sep 1996 12:38:14 +0200 - From: Gisle Aas + From: Gisle Aas Subject: Symbol.pm clobbers $_ at startup perl -le 'BEGIN {$_="foo";} use Symbol; print qualify($_)' @@ -6046,7 +6356,7 @@ Index: lib/Sys/Hostname.pm Index: lib/Term/Cap.pm Date: 23 Sep 1996 14:11:38 +0200 - From: Ulrich Pfeifer + From: Ulrich Pfeifer Subject: Patch for Term::Cap 'use Term::Cap' produces a warning when diagnosics are active. The @@ -6083,13 +6393,13 @@ Index: lib/Test/Harness.pm 5.003_05 pods, including the pods embedded in library modules. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: lib/Text/Abbrev.pm Date: 23 Sep 1996 11:33:01 +0200 - From: Ulrich Pfeifer + From: Ulrich Pfeifer Subject: Text::Abbrev (Re: More standard library test scripts) This patch merges the Text::Abbrev related patches/tests from Gisle @@ -6129,7 +6439,7 @@ Index: lib/UNIVERSAL.pm Index: lib/bigint.pl Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6157,7 +6467,7 @@ Index: lib/overload.pm Index: lib/perl5db.pl Date: Mon, 30 Sep 1996 00:34:58 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Subject: Re: dereferencing a hash from the debugger won't work Index: lib/splain @@ -6195,14 +6505,14 @@ Index: mg.c Provide new 3-arg forms gv_fullname3() and gv_efullname3(). Date: Sun, 29 Sep 1996 22:18:19 -0400 (EDT) - From: Chip Salzenberg + From: Chip Salzenberg Subject: 5.003_05: Fix numeric value of $! This patch undoes a bit of over-zealous integerization in mg.c, related to the numeric value of $!. Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -6212,11 +6522,11 @@ Index: mg.c improved. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Date: Fri, 4 Oct 1996 12:38:31 -0400 (EDT) - From: Chip Salzenberg + From: Chip Salzenberg Subject: 5.003_05: Fix numeric $! and $^E This patch undoes a bit of over-zealous integerization in mg.c, @@ -6231,7 +6541,7 @@ Index: op.c Provide new 3-arg forms gv_fullname3() and gv_efullname3(). Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -6266,26 +6576,26 @@ Index: patchlevel.h Index: perl.c - From: Roderick Schertler + From: Roderick Schertler Subject: Re: -T flag and removal of `.' from @INC support C Date: Tue, 01 Oct 1996 19:02:17 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: Re: 2 core dumps (patch) Message-Id: <199610012302.TAA08395@aatma.engin.umich.edu> The problem is an uninitialized SV slot in errgv. Here's a patch. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: perl.h Date: Sat, 21 Sep 1996 21:33:15 -0400 (EDT) - From: Kenneth Albanowski + From: Kenneth Albanowski Subject: Full LONG_MAX & co. patch over 5.003_05 This patch contains the changes I've collected for the various _MAX issues @@ -6296,7 +6606,7 @@ Index: perl.h ambiguous) and to explicitly cast all of the constants. Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -6309,7 +6619,7 @@ Index: perl.h 5.003. Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6335,13 +6645,13 @@ Index: perlsdio.h Undef Irix getc_unlocked and putc_unlocked #defines. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: pod/Makefile Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6369,7 +6679,7 @@ Index: pod/perl.pod Changed Larry's address to larry@wall.org. Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6439,7 +6749,7 @@ Index: pod/perldiag.pod 5.003_05 pods, including the pods embedded in library modules. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: pod/perldsc.pod @@ -6492,7 +6802,7 @@ Index: pod/perlguts.pod From: "Daniel S. Lewart" Subject: POD spelling patches Date: Mon, 23 Sep 96 13:18:01 PDT - From: Jeff Okamoto + From: Jeff Okamoto Subject: Re: perlguts API Listing patch Here's the lastest complete version for inclusion into _06 or .004. This @@ -6508,7 +6818,7 @@ Index: pod/perlguts.pod Index: pod/perli18n.pod Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6551,7 +6861,7 @@ Index: pod/perlmod.pod 5.003_05 pods, including the pods embedded in library modules. Date: Wed, 02 Oct 1996 16:52:08 -0400 - From: Roderick Schertler + From: Roderick Schertler Subject: documentation for $? in END Document the behavior with $? WRT END subroutines. @@ -6575,7 +6885,7 @@ Index: pod/perlop.pod 5.003_05 pods, including the pods embedded in library modules. Date: Fri, 4 Oct 1996 10:36:19 -0400 (EDT) - From: Kenneth Albanowski + From: Kenneth Albanowski Subject: Re: Suggestion for improving man page Add alternative names for various escape sequences. @@ -6607,7 +6917,7 @@ Index: pod/perlre.pod 5.003_05 pods, including the pods embedded in library modules. Date: Fri, 4 Oct 1996 10:36:19 -0400 (EDT) - From: Kenneth Albanowski + From: Kenneth Albanowski Subject: Re: Suggestion for improving man page Add alternative names for various escape sequences. @@ -6702,7 +7012,7 @@ Index: pod/perltoc.pod Index: pod/perltrap.pod Date: Wed, 11 Sep 1996 13:26:18 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: a perl425 trap Here's an addition that should be self-explanatory. @@ -6725,7 +7035,7 @@ Index: pod/perlvar.pod 5.003_05 pods, including the pods embedded in library modules. Date: Wed, 02 Oct 1996 16:52:08 -0400 - From: Roderick Schertler + From: Roderick Schertler Subject: documentation for $? in END Document the behavior with $? WRT END subroutines. @@ -6789,7 +7099,7 @@ Index: pp_ctl.c Provide new 3-arg forms gv_fullname3() and gv_efullname3(). Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6854,7 +7164,7 @@ Index: pp_sys.c then closed and re-opened, retained the untaintedness. Date: Mon, 30 Sep 1996 00:54:37 -0400 - From: Spider Boardman + From: Spider Boardman First, with IO::untaint, the patches as posted resulted in a miniperl which couldn't open files, so the autosplitting of the @@ -6867,7 +7177,7 @@ Index: proto.h Provide new 3-arg forms gv_fullname3() and gv_efullname3(). Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -6877,7 +7187,7 @@ Index: proto.h improved. Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6895,7 +7205,7 @@ Index: sv.c Provide new 3-arg forms gv_fullname3() and gv_efullname3(). Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -6905,7 +7215,7 @@ Index: sv.c improved. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 I've added some DEBUG_Ps to sv.c which give a trace of the @@ -6916,7 +7226,7 @@ Index: sv.c already adds a profile of op usage to its advertised output.) Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6944,7 +7254,7 @@ Index: sv.h * Add the "untaint" keyword. Date: Fri, 20 Sep 1996 15:38:57 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: Re: "Attempt to free non-existent shared string"? (with patch) I found a subtle problem with the lazydelete mechanism (which is used @@ -6960,7 +7270,7 @@ Index: sv.h Index: t/base/term.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6970,7 +7280,7 @@ Index: t/base/term.t Index: t/comp/package.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -6980,7 +7290,7 @@ Index: t/comp/package.t Index: t/lib/abbrev.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -6988,7 +7298,7 @@ Index: t/lib/abbrev.t out are applied. Date: 23 Sep 1996 11:33:01 +0200 - From: Ulrich Pfeifer + From: Ulrich Pfeifer Subject: Text::Abbrev (Re: More standard library test scripts) This patch merges the Text::Abbrev related patches/tests from Gisle @@ -6997,7 +7307,7 @@ Index: t/lib/abbrev.t Index: t/lib/anydbm.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7007,7 +7317,7 @@ Index: t/lib/anydbm.t Index: t/lib/autoloader.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7015,7 +7325,7 @@ Index: t/lib/autoloader.t out are applied. Date: Mon, 30 Sep 1996 00:54:37 -0400 - From: Spider Boardman + From: Spider Boardman The test and patches for AutoLoader were also non-functional, since the regexp context (curpm) was still being clobbered by the @@ -7024,7 +7334,7 @@ Index: t/lib/autoloader.t Index: t/lib/basename.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7032,12 +7342,12 @@ Index: t/lib/basename.t out are applied. Date: Mon, 30 Sep 1996 00:54:37 -0400 - From: Spider Boardman + From: Spider Boardman Fix the number of tests. Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 A different set of tests for File::Basename and friends. @@ -7045,7 +7355,7 @@ Index: t/lib/basename.t Index: t/lib/checktree.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7064,7 +7374,7 @@ Index: t/lib/complex.t Index: t/lib/db-btree.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7074,7 +7384,7 @@ Index: t/lib/db-btree.t Index: t/lib/db-hash.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7084,7 +7394,7 @@ Index: t/lib/db-hash.t Index: t/lib/env.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7094,7 +7404,7 @@ Index: t/lib/env.t Index: t/lib/fatal.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7104,7 +7414,7 @@ Index: t/lib/fatal.t Index: t/lib/filecache.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7114,7 +7424,7 @@ Index: t/lib/filecache.t Index: t/lib/filecopy.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7124,7 +7434,7 @@ Index: t/lib/filecopy.t Index: t/lib/filefind.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7134,7 +7444,7 @@ Index: t/lib/filefind.t Index: t/lib/filepath.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7144,7 +7454,7 @@ Index: t/lib/filepath.t Index: t/lib/findbin.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7154,7 +7464,7 @@ Index: t/lib/findbin.t Index: t/lib/gdbm.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7164,7 +7474,7 @@ Index: t/lib/gdbm.t Index: t/lib/getopt.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7174,7 +7484,7 @@ Index: t/lib/getopt.t Index: t/lib/hostname.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7184,7 +7494,7 @@ Index: t/lib/hostname.t Index: t/lib/ndbm.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7194,7 +7504,7 @@ Index: t/lib/ndbm.t Index: t/lib/odbm.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7204,7 +7514,7 @@ Index: t/lib/odbm.t Index: t/lib/parsewords.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7214,7 +7524,7 @@ Index: t/lib/parsewords.t Index: t/lib/sdbm.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7224,7 +7534,7 @@ Index: t/lib/sdbm.t Index: t/lib/searchdict.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7234,7 +7544,7 @@ Index: t/lib/searchdict.t Index: t/lib/selectsaver.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7244,7 +7554,7 @@ Index: t/lib/selectsaver.t Index: t/lib/symbol.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7252,7 +7562,7 @@ Index: t/lib/symbol.t out are applied. Date: Mon, 30 Sep 1996 00:54:37 -0400 - From: Spider Boardman + From: Spider Boardman The various new lib/*.t tests didn't all work. For some, it was only because the count of tests was wrong: @@ -7260,7 +7570,7 @@ Index: t/lib/symbol.t Index: t/lib/texttabs.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7270,7 +7580,7 @@ Index: t/lib/texttabs.t Index: t/lib/textwrap.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7280,7 +7590,7 @@ Index: t/lib/textwrap.t Index: t/lib/timelocal.t Date: Sun, 22 Sep 1996 00:59:56 +0200 - From: Gisle Aas + From: Gisle Aas Subject: More standard library test scripts This is a collection of test scripts for the standard library modules. @@ -7290,7 +7600,7 @@ Index: t/lib/timelocal.t Index: t/op/each.t Date: Mon, 30 Sep 1996 01:13:28 -0400 - From: Spider Boardman + From: Spider Boardman Subject: Re: pre extending hash? - need speed The patch below (which is relative to perl5.001l) implements @@ -7300,7 +7610,7 @@ Index: t/op/each.t improved. Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7310,7 +7620,7 @@ Index: t/op/each.t Index: t/op/glob.t Date: Tue, 01 Oct 1996 16:37:03 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: Re: glob test 1 failing...bad test or bug Under AIX 4.1.4, with LOCALE set en_GB (British english) glob test one @@ -7322,7 +7632,7 @@ Index: t/op/glob.t Index: t/op/magic.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7330,7 +7640,7 @@ Index: t/op/magic.t Index: t/op/readdir.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7340,7 +7650,7 @@ Index: t/op/readdir.t Index: t/op/sort.t Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7350,7 +7660,7 @@ Index: t/op/sort.t Index: toke.c Date: Sat, 14 Sep 1996 17:08:16 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: whitespace induced lexer errors (with patch) I finally got around to fixing skipspace() to not indiscriminately @@ -7358,7 +7668,7 @@ Index: toke.c expectation decisions in the lexer). Date: Sat, 14 Sep 1996 18:55:16 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: perl lexer won't accept C$b;> Date: Thu, 19 Sep 1996 11:58:22 -0400 @@ -7382,7 +7692,7 @@ Index: toke.c Index: util.c Date: Mon, 7 Oct 1996 22:03:00 +0300 - From: Jarkko Hietaniemi + From: Jarkko Hietaniemi Subject: LC_COLLATE. Big patch to add, document, and test LC_COLLATE support. @@ -7438,7 +7748,7 @@ Index: utils/h2xs.PL Index: utils/perldoc.PL Date: Sun, 29 Sep 1996 22:00:09 -0400 (EDT) - From: Kenneth Albanowski + From: Kenneth Albanowski Subject: perldoc patch Ilya has found that this change makes perldoc much more useful under OS/2. @@ -7446,31 +7756,31 @@ Index: utils/perldoc.PL Index: vms/config.vms Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: vms/descrip.mms Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: vms/genconfig.pl Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: vms/perlvms.pod Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: vms/vms.c Date: Thu, 03 Oct 1996 16:31:46 -0400 (EDT) - From: Charles Bailey + From: Charles Bailey Subject: VMS patches to 5.003_05 Index: x2p/a2p.pod @@ -7490,9 +7800,10 @@ Index: x2p/s2p.PL This patch just changed the old s2p.man page into a pod page. I then embedded the pod into the s2p script. ----------------- -Version 5.003_05 ----------------- + +------------------ + Version 5.003_05 +------------------ This patch was primarily to fix bugs and to clean up some of the remaining issues from in 5.003_04. The details are described below. @@ -7545,7 +7856,7 @@ Here are the specific file-by-file changes. # The full description is below. # Please execute the following commands before applying this patch. # (You can feed this patch to 'sh' to do so.) -# Andy Dougherty +# -- Andy Dougherty # We'll create a new test, but patch won't automatically make it # executable. @@ -7568,12 +7879,6 @@ designed so you can examine each change with a command such as csplit -k perl5.003_05.pat '/^Index:/' '{99}' -Patch and enjoy, - - Andy Dougherty doughera@lafcol.lafayette.edu - Dept. of Physics - Lafayette College, Easton PA 18042 - Index: Changes Updated for 5.003_05. @@ -7643,7 +7948,7 @@ Index: av.h Subject: turbidity in av.[ch] Date: Sun, 10 Dec 1995 00:21:31 -0500 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Some unclean code that I noticed today. @@ -7660,7 +7965,7 @@ Index: config_h.SH Index: emacs/cperl-mode.el - From: Ilya Zakharevich + From: Ilya Zakharevich Subject: Newer CPerl-mode Index: ext/DB_File/DB_File.pm @@ -7674,14 +7979,14 @@ Index: ext/DB_File/DB_File.xs Index: ext/Fcntl/Fcntl.pm Date: Thu, 5 Sep 1996 18:19:14 -0400 (EDT) - From: Chip Salzenberg + From: Chip Salzenberg Subject: No AutoLoader for Fcntl Just like Socket, Fcntl doesn't need splitting and AutoLoading. Index: ext/FileHandle/FileHandle.pm - From: Roderick Schertler + From: Roderick Schertler Subject: FileHandle::DESTROY for fd 0 This fixes FileHandle::DESTROY when called on stdin. @@ -7702,7 +8007,7 @@ Index: ext/ODBM_File/hints/ultrix.pl Index: ext/Socket/Socket.pm Date: Thu, 5 Sep 1996 09:58:08 +0200 - From: Andreas Koenig + From: Andreas Koenig Subject: Patch to inhibit autosplit on Socket.pm This patch inhibits production and use of a completely useless @@ -7742,14 +8047,14 @@ Index: hints/sunos_4_1.sh Index: hv.c Date: Thu, 05 Sep 1996 00:25:28 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: minor misc. cleanup This patch makes some minor cleanups to the sources. No change in functionality whatsoever. Date: Thu, 05 Sep 1996 02:52:21 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: debugger problems--another patch (was Re: 5.003_04) @@ -7855,7 +8160,7 @@ Index: lib/open3.pl Index: lib/syslog.pl Date: Tue, 03 Sep 1996 20:33:54 -0400 - From: Roderick Schertler + From: Roderick Schertler Subject: syslog.pl `use Socket' lossage syslog.pl tries but fails to use @@ -7883,7 +8188,7 @@ Index: mg.c (lines near 584) Part of VMS changes. I don't know what this did. Date: Fri, 23 Aug 1996 17:20:22 -0400 (EDT) - From: Chip Salzenberg + From: Chip Salzenberg Subject: Integerize mg.c; eliminate warning on C< local($)) > This patch converts magic variables ($!, $^E, etc.) to use integers @@ -7904,7 +8209,7 @@ Index: nostdio.h Index: op.c - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: Re: \ ( @array ) busted for lexical @array (once more) Index: patchlevel.h @@ -7968,7 +8273,7 @@ Index: pod/perlipc.pod Index: pod/perlref.pod - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: Re: \ ( @array ) busted for lexical @array (once more) Index: pod/perltie.pod @@ -8004,14 +8309,14 @@ Index: pod/perlvar.pod Index: pp.c Date: Fri, 23 Aug 1996 17:22:40 -0400 (EDT) - From: Chip Salzenberg + From: Chip Salzenberg Subject: Minor integer speedups in mathematics This patch provides minor speedups by using integer math and SVt_IV values when performing bitwise operations and modulus. Date: Tue, 3 Sep 1996 17:49:22 -0400 (EDT) - From: Kenneth Albanowski + From: Kenneth Albanowski Subject: Pack Patch (was Re: 5.002 - pack/unpack does not do "I" right) (double)auint cast added for call to sv_setnv(). @@ -8019,7 +8324,7 @@ Index: pp.c Index: pp_hot.c Date: Thu, 05 Sep 1996 00:25:28 -0400 - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: minor misc. cleanup This patch makes some minor cleanups to the sources. No change @@ -8049,7 +8354,7 @@ Index: sv.c Perl_debug_log instead. Date: Fri, 23 Aug 1996 17:26:42 -0400 (EDT) - From: Chip Salzenberg + From: Chip Salzenberg Subject: Minor potential bug in AV creation I wasn't the one who originated this patch. But it looks like it @@ -8107,18 +8412,18 @@ Index: t/op/misc.t Index: t/op/pack.t Date: Tue, 3 Sep 1996 17:49:22 -0400 (EDT) - From: Kenneth Albanowski + From: Kenneth Albanowski Subject: Pack Patch (was Re: 5.002 - pack/unpack does not do "I" right) Index: t/op/ref.t - From: Gurusamy Sarathy + From: Gurusamy Sarathy Subject: Re: \ ( @array ) busted for lexical @array (once more) Index: universal.c Date: Thu, 29 Aug 96 07:05:10 BST - From: Graham Barr + From: Graham Barr Subject: Re: UNIVERSAL::class busted yes, but I also noticed that this does not check that the reference @@ -8137,7 +8442,7 @@ Index: util.c Index: utils/h2xs.PL Date: Fri, 6 Sep 1996 06:09:20 -0400 (EDT) - From: Ilya Zakharevich + From: Ilya Zakharevich Subject: updated h2xs Changes: @@ -8206,9 +8511,10 @@ Index: vms/vmsish.h VMS 5.003_05 Update. ----------------- -Version 5.003_04 ----------------- + +------------------ + Version 5.003_04 +------------------ This patch was primarily to fix bugs and to clean up some of the changes made in 5.003_03. The details are described below. @@ -8247,7 +8553,7 @@ Here are the specific file-by-file changes. # The full description is below. # Please execute the following commands before applying this patch. # (You can feed this patch to 'sh' to do so.) -# Andy Dougherty +# -- Andy Dougherty # Obsolete perl4 hint file. rm -f hints/dnix.sh @@ -8275,13 +8581,6 @@ designed so you can examine each change with a command such as csplit -k perl5.003_04.pat '/^Index:/' '{99}' -Patch and enjoy, - - Andy Dougherty doughera@lafcol.lafayette.edu - Dept. of Physics - Lafayette College, Easton PA 18042 - - Index: Changes Updated for 5.003_04. @@ -8342,8 +8641,7 @@ Index: config_h.SH The /*#define FOO /**/ is a perfectly legal un-nested comment, and I wish IBM would fix it's blasted compiler instead. In the meantime we'll take mercy on the poor AIX user and get rid of the screenfulls - of stupid warning messages. Thanks to Hallvard B Furuseth - for the fix. + of stupid warning messages. Thanks to Hallvard B Furuseth for the fix. Index: dump.c @@ -8646,7 +8944,7 @@ Index: sv.c reduce code size and improve maintainability by combining some common code in gv_fullname() and gv_efullname(). - From: Chip Salzenberg + From: Chip Salzenberg Subject: Track SVs for destruction when -DPURIFY When checking for memory leaks, I compiled Perl with "-DPURIFY". @@ -8738,9 +9036,10 @@ Index: utils/perldoc.PL HP-UX nroff -man output. (col -x isn't portable -- SunOS doesn't support the -x option.) ----------------- -Version 5.003_03 ----------------- + +------------------ + Version 5.003_03 +------------------ Most of the changes in 5.003_03 are to make the build and installation process more robust. The details are described below. A very brief @@ -8775,7 +9074,7 @@ Here are the specific file-by-file changes. # The full description is below. # Please execute the following commands before applying this patch. # (You can feed this patch to 'sh' to do so.) -# Andy Dougherty +# -- Andy Dougherty # Absorbed into Changes5.002 rm -f Changes.Conf @@ -8814,12 +9113,6 @@ designed so you can examine each change with a command such as csplit -k perl5.003_03.pat '/^Index:/' '{99}' -Patch and enjoy, - - Andy Dougherty doughera@lafcol.lafayette.edu - Dept. of Physics - Lafayette College, Easton PA 18042 - Index: Changes Include 5.003_03 change notes. @@ -9355,9 +9648,11 @@ Index: x2p/str.c Use Configure's FILE_filbuf macro instead of a raw _filbuf. ----------------- -Version 5.003_02 ----------------- + +------------------ + Version 5.003_02 +------------------ + o Visible Changes to Core Functionality - Redefining constant subs, or changing sub's prototype now give warnings. - Fixes for ++/-- of values close to max/min size of an integer @@ -9397,9 +9692,10 @@ o Changes in OS-specific and Build-time Support - Applied OS/2 patches. - Typo patch for VMS. ----------------- -Version 5.003_01 ----------------- + +------------------ + Version 5.003_01 +------------------ Version 5.003_01 contains bugfixes and additions accumulated since version 5.002_01, since the patch to version 5.003 was deliberately diff --git a/EXTERN.h b/EXTERN.h index 24fe135..91c8d4a 100644 --- a/EXTERN.h +++ b/EXTERN.h @@ -23,10 +23,24 @@ # define EXTCONST globalref # define dEXTCONST globaldef {"$GLOBAL_RO_VARS"} readonly #else -# define EXT extern -# define dEXT -# define EXTCONST extern const -# define dEXTCONST const +# if defined(_MSC_VER) && defined(_WIN32) +# ifdef PERLDLL +# define EXT __declspec(dllexport) +# define dEXT +# define EXTCONST __declspec(dllexport) const +# define dEXTCONST const +# else +# define EXT __declspec(dllimport) +# define dEXT +# define EXTCONST __declspec(dllimport) const +# define dEXTCONST const +# endif +# else +# define EXT extern +# define dEXT +# define EXTCONST extern const +# define dEXTCONST const +# endif #endif #undef INIT diff --git a/MANIFEST b/MANIFEST index a0585d5..d67c42d 100644 --- a/MANIFEST +++ b/MANIFEST @@ -40,6 +40,24 @@ dosish.h Some defines for MS/DOSish machines dump.c Debugging output eg/ADB An adb wrapper to put in your crash dir eg/README Intro to example perl scripts +eg/cgi/RunMeFirst Setup script for CGI examples +eg/cgi/clickable_image.cgi CGI example +eg/cgi/cookie.cgi CGI example +eg/cgi/crash.cgi CGI example +eg/cgi/customize.cgi CGI example +eg/cgi/diff_upload.cgi CGI example +eg/cgi/file_upload.cgi CGI example +eg/cgi/frameset.cgi CGI example +eg/cgi/index.html Index page for CGI examples +eg/cgi/internal_links.cgi CGI example +eg/cgi/javascript.cgi CGI example +eg/cgi/monty.cgi CGI example +eg/cgi/multiple_forms.cgi CGI example +eg/cgi/nph-clock.cgi CGI example +eg/cgi/popup.cgi CGI example +eg/cgi/save_state.cgi CGI example +eg/cgi/tryit.cgi CGI example +eg/cgi/wilogo.gif.uu Small image for CGI examples eg/changes A program to list recently changed files eg/client A sample client eg/down A program to do things to subdirectories @@ -272,6 +290,7 @@ hints/utekv.sh Hints for named architecture hints/uts.sh Hints for named architecture hv.c Hash value code hv.h Hash value header +installhtml Perl script to install html files for pods installman Perl script to install man pages for pods installperl Perl script to do "make install" dirty work interp.sym Interpreter specific symbols to hide in a struct @@ -282,6 +301,12 @@ lib/AutoLoader.pm Autoloader base class lib/AutoSplit.pm Split up autoload functions lib/Benchmark.pm Measure execution time lib/Bundle/CPAN.pm The CPAN bundle +lib/CGI.pm Web server interface +lib/CGI/Apache.pm Web server interface +lib/CGI/Carp.pm Web server interface +lib/CGI/Fast.pm Web server interface +lib/CGI/Push.pm Web server interface +lib/CGI/Switch.pm Web server interface lib/CPAN.pm Interface to Comprehensive Perl Archive Network lib/CPAN/FirstTime.pm Utility for creating CPAN config files lib/CPAN/Nox.pm Runs CPAN while avoiding compiled extensions @@ -332,6 +357,7 @@ lib/Net/netent.pm By-name interface to Perl's built-in getnet* lib/Net/protoent.pm By-name interface to Perl's built-in getproto* lib/Net/servent.pm By-name interface to Perl's built-in getserv* lib/Pod/Functions.pm used by pod/splitpod +lib/Pod/Html.pm Convert POD data to HTML lib/Pod/Text.pm Convert POD data to formatted ASCII text lib/Search/Dict.pm Perform binary search on dictionaries lib/SelectSaver.pm Enforce proper select scoping @@ -368,9 +394,8 @@ lib/bigint.pl An arbitrary precision integer arithmetic package lib/bigrat.pl An arbitrary precision rational arithmetic package lib/blib.pm For "use blib" lib/cacheout.pl Manages output filehandles when you need too many -lib/chat2.inter A chat2 with interaction -lib/chat2.pl Randal's famous expect-ish routines lib/complete.pl A command completion subroutine +lib/constant.pm For "use constant" lib/ctime.pl A ctime workalike lib/diagnostics.pm Print verbose diagnostics lib/dotsh.pl Code to "dot" in a shell script @@ -652,6 +677,7 @@ t/lib/texttabs.t See if Text::Tabs works t/lib/textwrap.t See if Text::Wrap works t/lib/timelocal.t See if Time::Local works t/op/append.t See if . works +t/op/arith.t See if arithmetic works t/op/array.t See if array operations work t/op/assignwarn.t See if OP= operators warn correctly for undef targets t/op/auto.t See if autoincrement et all work @@ -716,6 +742,7 @@ t/op/universal.t See if UNIVERSAL class works t/op/unshift.t See if unshift works t/op/vec.t See if vectors work t/op/write.t See if write works +t/pragma/constant.t See if compile-time constants work t/pragma/locale.t See if locale support (i18n and l10n) works t/pragma/overload.t See if operator overloading works t/pragma/strict-refs Tests of "use strict 'refs'" for strict.t @@ -792,8 +819,8 @@ win32/VC-2.0/perl.mak Win32 port win32/VC-2.0/perldll.mak Win32 port win32/VC-2.0/perlglob.mak Win32 port win32/autosplit.pl Win32 port -win32/bin/PL2BAT.BAT Win32 port win32/bin/network.pl Win32 port +win32/bin/pl2bat.bat Win32 port win32/bin/search.bat Win32 port win32/bin/test.bat Win32 port win32/bin/webget.bat Win32 port @@ -814,6 +841,7 @@ win32/makeperldef.pl Win32 port win32/miniperl.mak Win32 port win32/modules.mak Win32 port win32/perl.mak Win32 port +win32/perl.rc Win32 port win32/perldll.mak Win32 port win32/perlglob.c Win32 port win32/perlglob.mak Win32 port diff --git a/configpm b/configpm index f160177..fcf4e3d 100755 --- a/configpm +++ b/configpm @@ -70,8 +70,8 @@ print CONFIG "\n", print CONFIG "my \$summary = <<'!END!';\n"; open(MYCONFIG,") !~ /^Summary of/); -do { print CONFIG $_ } until ($_ = ) =~ /^\s*$/; +1 while defined($_ = ) && !/^Summary of/; +do { print CONFIG $_ } until !defined($_ = ) || /^\s*$/; close(MYCONFIG); print CONFIG "\n!END!\n", <<'EOT'; diff --git a/cop.h b/cop.h index a569967..72a9483 100644 --- a/cop.h +++ b/cop.h @@ -265,9 +265,10 @@ struct context { /* "gimme" values */ #define G_SCALAR 0 #define G_ARRAY 1 +#define G_VOID 128 /* skip this bit when adding flags below */ /* extra flags for perl_call_* routines */ #define G_DISCARD 2 /* Call FREETMPS. */ #define G_EVAL 4 /* Assume eval {} around subroutine call. */ #define G_NOARGS 8 /* Don't construct a @_ array. */ -#define G_KEEPERR 16 /* Append errors to $@ rather than overwriting it */ +#define G_KEEPERR 16 /* Append errors to $@, don't overwrite it */ diff --git a/doop.c b/doop.c index a87f7ef..400934d 100644 --- a/doop.c +++ b/doop.c @@ -649,6 +649,7 @@ dARGS HV *hv = (HV*)POPs; register HE *entry; SV *tmpstr; + I32 gimme = GIMME_V; I32 dokeys = (op->op_type == OP_KEYS); I32 dovalues = (op->op_type == OP_VALUES); @@ -667,10 +668,10 @@ dARGS (void)hv_iterinit(hv); /* always reset iterator regardless */ - if (op->op_private & OPpLEAVE_VOID) + if (gimme == G_VOID) RETURN; - if (GIMME != G_ARRAY) { + if (gimme == G_SCALAR) { I32 i; dTARGET; diff --git a/dump.c b/dump.c index af75cf7..e74c8c4 100644 --- a/dump.c +++ b/dump.c @@ -131,14 +131,20 @@ register OP *op; #endif if (op->op_flags) { *buf = '\0'; - if (op->op_flags & OPf_KNOW) { - if (op->op_flags & OPf_LIST) - (void)strcat(buf,"LIST,"); - else - (void)strcat(buf,"SCALAR,"); - } - else + switch (op->op_flags & OPf_WANT) { + case OPf_WANT_VOID: + (void)strcat(buf,"VOID,"); + break; + case OPf_WANT_SCALAR: + (void)strcat(buf,"SCALAR,"); + break; + case OPf_WANT_LIST: + (void)strcat(buf,"LIST,"); + break; + default: (void)strcat(buf,"UNKNOWN,"); + break; + } if (op->op_flags & OPf_KIDS) (void)strcat(buf,"KIDS,"); if (op->op_flags & OPf_PARENS) diff --git a/eg/cgi/RunMeFirst b/eg/cgi/RunMeFirst new file mode 100644 index 0000000..c96d79e --- /dev/null +++ b/eg/cgi/RunMeFirst @@ -0,0 +1,29 @@ +#!/usr/local/bin/perl + +# Make a world-writeable directory for saving state. +$ww = 'WORLD_WRITABLE'; +unless (-w $ww) { + $u = umask 0; + mkdir $ww, 0777; + umask $u; +} + +# Decode the sample image. +for $bin (qw(wilogo.gif)) { + unless (open UU, "$bin.uu") { warn "Can't open $bin.uu: $!\n"; next } + unless (open BIN, "> $bin") { warn "Can't create $bin: $!\n"; next } + $_ = ; + while () { + chomp; + last if /^end/; + print BIN unpack "u", $_; + } + close BIN; + close UU; +} + +# Create symlinks from *.txt to *.cgi for documentation purposes. +foreach (<*.cgi>) { + ($target = $_) =~ s/cgi$/txt/; + symlink $_, $target unless -e $target; +} diff --git a/eg/cgi/clickable_image.cgi b/eg/cgi/clickable_image.cgi new file mode 100644 index 0000000..81daf09 --- /dev/null +++ b/eg/cgi/clickable_image.cgi @@ -0,0 +1,26 @@ +#!/usr/local/bin/perl + +use CGI; +$query = new CGI; +print $query->header; +print $query->start_html("A Clickable Image"); +print <A Clickable Image + +END +print "Sorry, this isn't very exciting!\n"; + +print $query->startform; +print $query->image_button('picture',"./wilogo.gif"); +print "Give me a: ",$query->popup_menu('letter',['A','B','C','D','E','W']),"\n"; # +print "

Magnification: ",$query->radio_group('magnification',['1X','2X','4X','20X']),"\n"; +print "


\n"; + +if ($query->param) { + print "

Magnification, ",$query->param('magnification'),"\n"; + print "

Selected Letter, ",$query->param('letter'),"\n"; + ($x,$y) = ($query->param('picture.x'),$query->param('picture.y')); + print "

Selected Position ($x,$y)\n"; +} + +print $query->end_html; diff --git a/eg/cgi/cookie.cgi b/eg/cgi/cookie.cgi new file mode 100644 index 0000000..98adda1 --- /dev/null +++ b/eg/cgi/cookie.cgi @@ -0,0 +1,88 @@ +#!/usr/local/bin/perl + +use CGI qw(:standard); + +@ANIMALS=sort qw/lion tiger bear pig porcupine ferret zebra gnu ostrich + emu moa goat weasel yak chicken sheep hyena dodo lounge-lizard + squirrel rat mouse hedgehog racoon baboon kangaroo hippopotamus + giraffe/; + +# Recover the previous animals from the magic cookie. +# The cookie has been formatted as an associative array +# mapping animal name to the number of animals. +%zoo = cookie('animals'); + +# Recover the new animal(s) from the parameter 'new_animal' +@new = param('new_animals'); + +# If the action is 'add', then add new animals to the zoo. Otherwise +# delete them. +foreach (@new) { + if (param('action') eq 'Add') { + $zoo{$_}++; + } elsif (param('action') eq 'Delete') { + $zoo{$_}-- if $zoo{$_}; + delete $zoo{$_} unless $zoo{$_}; + } +} + +# Add new animals to old, and put them in a cookie +$the_cookie = cookie(-name=>'animals', + -value=>\%zoo, + -expires=>'+1h'); + +# Print the header, incorporating the cookie and the expiration date... +print header(-cookie=>$the_cookie); + +# Now we're ready to create our HTML page. +print start_html('Animal crackers'); + +print <Animal Crackers +Choose the animals you want to add to the zoo, and click "add". +Come back to this page any time within the next hour and the list of +animals in the zoo will be resurrected. You can even quit Netscape +completely! +

+Try adding the same animal several times to the list. Does this +remind you vaguely of a shopping cart? +

+This script only works with Netscape browsers +

+

+ +
Add/DeleteCurrent Contents +EOF + ; + +print "
",start_form; +print scrolling_list(-name=>'new_animals', + -values=>[@ANIMALS], + -multiple=>1, + -override=>1, + -size=>10),"
"; +print submit(-name=>'action',-value=>'Delete'), + submit(-name=>'action',-value=>'Add'); +print end_form; + +print "
"; +if (%zoo) { # make a table + print "
    \n"; + foreach (sort keys %zoo) { + print "
  • $zoo{$_} $_\n"; + } + print "
\n"; +} else { + print "The zoo is empty.\n"; +} +print "
"; + +print < +
Lincoln D. Stein

+More Examples +EOF + ; +print end_html; + + diff --git a/eg/cgi/crash.cgi b/eg/cgi/crash.cgi new file mode 100644 index 0000000..64f03c7 --- /dev/null +++ b/eg/cgi/crash.cgi @@ -0,0 +1,6 @@ +#!/usr/local/bin/perl + +use CGI::Carp qw(fatalsToBrowser); + +# This line invokes a fatal error message at compile time. +foo bar baz; diff --git a/eg/cgi/customize.cgi b/eg/cgi/customize.cgi new file mode 100644 index 0000000..d932f4b --- /dev/null +++ b/eg/cgi/customize.cgi @@ -0,0 +1,92 @@ +#!/usr/local/bin/perl + +use CGI qw(:standard :html3); + +# Some constants to use in our form. +@colors=qw/aqua black blue fuschia gray green lime maroon navy olive + purple red silver teal white yellow/; +@sizes=("",1..7); + +# recover the "preferences" cookie. +%preferences = cookie('preferences'); + +# If the user wants to change the background color or her +# name, they will appear among our CGI parameters. +foreach ('text','background','name','size') { + $preferences{$_} = param($_) || $preferences{$_}; +} + +# Set some defaults +$preferences{'background'} = $preferences{'background'} || 'silver'; +$preferences{'text'} = $preferences{'text'} || 'black'; + +# Refresh the cookie so that it doesn't expire. This also +# makes any changes the user made permanent. +$the_cookie = cookie(-name=>'preferences', + -value=>\%preferences, + -expires=>'+30d'); +print header(-cookie=>$the_cookie); + +# Adjust the title to incorporate the user's name, if provided. +$title = $preferences{'name'} ? + "Welcome back, $preferences{name}!" : "Customizable Page"; + +# Create the HTML page. We use several of Netscape's +# extended tags to control the background color and the +# font size. It's safe to use Netscape features here because +# cookies don't work anywhere else anyway. +print start_html(-title=>$title, + -bgcolor=>$preferences{'background'}, + -text=>$preferences{'text'} + ); + +print basefont({SIZE=>$preferences{size}}) if $preferences{'size'} > 0; + +print h1($title),<'name', + -default=>$preferences{'name'}, + -size=>30),br, + + table( + TR( + td("Preferred"), + td("Page color:"), + td(popup_menu(-name=>'background', + -values=>\@colors, + -default=>$preferences{'background'}) + ), + ), + TR( + td(''), + td("Text color:"), + td(popup_menu(-name=>'text', + -values=>\@colors, + -default=>$preferences{'text'}) + ) + ), + TR( + td(''), + td("Font size:"), + td(popup_menu(-name=>'size', + -values=>\@sizes, + -default=>$preferences{'size'}) + ) + ) + ), + + submit(-label=>'Set preferences'), + hr; + +print a({HREF=>"/"},'Go to the home page'); + diff --git a/eg/cgi/diff_upload.cgi b/eg/cgi/diff_upload.cgi new file mode 100644 index 0000000..913f9ca --- /dev/null +++ b/eg/cgi/diff_upload.cgi @@ -0,0 +1,68 @@ +#!/usr/local/bin/perl + +$DIFF = "/usr/bin/diff"; +$PERL = "/usr/bin/perl"; + +use CGI qw(:standard); +use CGI::Carp; + +print header; +print start_html("File Diff Example"); +print "Version $CGI::VERSION

"; + +print <File Diff Example +Enter two files. When you press "submit" their diff will be +produced. +EOF + ; + +# Start a multipart form. +print start_multipart_form; +print "File #1:",filefield(-name=>'file1',-size=>45),"
\n"; +print "File #2:",filefield(-name=>'file2',-size=>45),"
\n"; +print "Diff type: ",radio_group(-name=>'type', + -value=>['context','normal']),"
\n"; +print reset,submit(-name=>'submit',-value=>'Do Diff'); +print endform; + +# Process the form if there is a file name entered +$file1 = param('file1'); +$file2 = param('file2'); + +$|=1; # for buffering +if ($file1 && $file2) { + $realfile1 = tmpFileName($file1); + $realfile2 = tmpFileName($file2); + print "


\n"; + print "

$file1 vs $file2

\n"; + + print "
\n";
+    $options = "-c" if param('type') eq 'context';
+    system "$DIFF $options $realfile1 $realfile2 | $PERL -pe 's/>/>/g; s/\n";
+}
+
+print <
+CGI documentation
+
+
+Lincoln D. Stein +

+Last modified 17 July 1996 +EOF + ; +print end_html; + +sub sanitize { + my $name = shift; + my($safe) = $name=~/([a-zA-Z0-9._~#,]+)/; + unless ($safe) { + print "$name is not a valid Unix filename -- sorry"; + exit 0; + } + return $safe; +} diff --git a/eg/cgi/file_upload.cgi b/eg/cgi/file_upload.cgi new file mode 100644 index 0000000..1f9eaec --- /dev/null +++ b/eg/cgi/file_upload.cgi @@ -0,0 +1,63 @@ +#!/usr/local/bin/perl + +use CGI qw(:standard); +use CGI::Carp; + +print header(); +print start_html("File Upload Example"); +print strong("Version "),$CGI::VERSION,p; + +print h1("File Upload Example"), + 'This example demonstrates how to prompt the remote user to + select a remote file for uploading. ', + strong("This feature only works with Netscape 2.0 browsers."), + p, + 'Select the ',cite('browser'),' button to choose a text file + to upload. When you press the submit button, this script + will count the number of lines, words, and characters in + the file.'; + +@types = ('count lines','count words','count characters'); + +# Start a multipart form. +print start_multipart_form(), + "Enter the file to process:", + filefield('filename','',45), + br, + checkbox_group('count',\@types,\@types), + p, + reset,submit('submit','Process File'), + endform; + +# Process the form if there is a file name entered +if ($file = param('filename')) { + $tmpfile=tmpFileName($file); + print hr(), + h2($file), + h3($tmpfile); + my($lines,$words,$characters,@words) = (0,0,0,0); + while (<$file>) { + $lines++; + $words += @words=split(/\s+/); + $characters += length($_); + } + close $file; + grep($stats{$_}++,param('count')); + if (%stats) { + print strong("Lines: "),$lines,br if $stats{'count lines'}; + print strong("Words: "),$words,br if $stats{'count words'}; + print strong("Characters: "),$characters,br if $stats{'count characters'}; + } else { + print strong("No statistics selected."); + } +} + +print hr(), + a({href=>"../cgi_docs.html"},"CGI documentation"), + hr, + address( + a({href=>'/~lstein'},"Lincoln D. Stein")), + br, + 'Last modified July 17, 1996', + end_html; + diff --git a/eg/cgi/frameset.cgi b/eg/cgi/frameset.cgi new file mode 100644 index 0000000..ff73026 --- /dev/null +++ b/eg/cgi/frameset.cgi @@ -0,0 +1,81 @@ +#!/usr/local/bin/perl + +use CGI; +$query = new CGI; +print $query->header; +$TITLE="Frameset Example"; + +# We use the path information to distinguish between calls +# to the script to: +# (1) create the frameset +# (2) create the query form +# (3) create the query response + +$path_info = $query->path_info; + +# If no path information is provided, then we create +# a side-by-side frame set +if (!$path_info) { + &print_frameset; + exit 0; +} + +# If we get here, then we either create the query form +# or we create the response. +&print_html_header; +&print_query if $path_info=~/query/; +&print_response if $path_info=~/response/; +&print_end; + + +# Create the frameset +sub print_frameset { + $script_name = $query->script_name; + print <$TITLE + + + + +EOF + ; + exit 0; +} + +sub print_html_header { + print $query->start_html($TITLE); +} + +sub print_end { + print qq{


Go to the documentation}; + print $query->end_html; +} + +sub print_query { + $script_name = $query->script_name; + print "

Frameset Query

\n"; + print $query->startform(-action=>"$script_name/response",-TARGET=>"response"); + print "What's your name? ",$query->textfield('name'); + print "

What's the combination?

", + $query->checkbox_group(-name=>'words', + -values=>['eenie','meenie','minie','moe']); + + print "

What's your favorite color? ", + $query->popup_menu(-name=>'color', + -values=>['red','green','blue','chartreuse']), + "

"; + print $query->submit; + print $query->endform; +} + +sub print_response { + print "

Frameset Result

\n"; + unless ($query->param) { + print "No query submitted yet."; + return; + } + print "Your name is ",$query->param(name),"\n"; + print "

The keywords are: ",join(", ",$query->param(words)),"\n"; + print "

Your favorite color is ",$query->param(color),"\n"; +} + diff --git a/eg/cgi/index.html b/eg/cgi/index.html new file mode 100644 index 0000000..9eafd5f --- /dev/null +++ b/eg/cgi/index.html @@ -0,0 +1,111 @@ + +More Examples of Scripts Created with CGI.pm + + + +

More Examples of Scripts Created with CGI.pm

+ +

Basic Non Sequitur Questionnaire

+ + +

Advanced Non Sequitur Questionnaire

+ + +

Save and restore the state of a form to a file

+ + +

Read the coordinates from a clickable image map

+ + +

Multiple independent forms on the same page

+ + +

How to maintain state on a page with internal links

+ + +

Echo fatal script errors to the browser

+ + +The Following Scripts only Work with Netscape 2.0 & Internet Explorer only! + +

Prompt for a file to upload and process it

+ + +

A Continuously-Updated Page using Server Push

+ + +

Compute the "diff" between two uploaded files

+ + +

Maintain state over a long period with a cookie

+ + +

Permanently customize the appearance of a page

+ + +

Popup the response in a new window

+ + +

Side-by-side form and response using frames

+ + +

Verify the Contents of a fill-out form with JavaScript

+ + +
+ +
  • CGI.pm documentation +
  • Download the CGI.pm distribution +
  • +
    +
    Lincoln D. Stein, lstein@genome.wi.mit.edu
    +Whitehead Institute/MIT Center for Genome Research
    + +Last modified: Mon Dec 2 06:23:25 EST 1996 + + diff --git a/eg/cgi/internal_links.cgi b/eg/cgi/internal_links.cgi new file mode 100644 index 0000000..4806966 --- /dev/null +++ b/eg/cgi/internal_links.cgi @@ -0,0 +1,33 @@ +#!/usr/local/bin/perl + +use CGI; +$query = new CGI; + +# We generate a regular HTML file containing a very long list +# and a popup menu that does nothing except to show that we +# don't lose the state information. +print $query->header; +print $query->start_html("Internal Links Example"); +print "

    Internal Links Example

    \n"; +print "Click Submit Query to create a state. Then scroll down and", + " click on any of the Jump to top links. This is not very exciting."; + +print "\n"; # an anchor point at the top + +# pick a default starting value; +$query->param('amenu','FOO1') unless $query->param('amenu'); + +print $query->startform; +print $query->popup_menu('amenu',[('FOO1'..'FOO9')]); +print $query->submit,$query->endform; + +# We create a long boring list for the purposes of illustration. +$myself = $query->self_url; +print "
      \n"; +for (1..100) { + print qq{
    1. List item #$_ Jump to top\n}; +} +print "
    \n"; + +print $query->end_html; + diff --git a/eg/cgi/javascript.cgi b/eg/cgi/javascript.cgi new file mode 100644 index 0000000..20496c0 --- /dev/null +++ b/eg/cgi/javascript.cgi @@ -0,0 +1,105 @@ +#!/usr/local/bin/perl + +# This script illustrates how to use JavaScript to validage fill-out +# forms. +use CGI qw(:standard); + +# Here's the javascript code that we include in the document. +$JSCRIPT=< 20) || (years < 5)) { + alert("You must be between the ages of 5 and 20 to submit this form"); + document.form1.birthdate.focus(); + document.form1.birthdate.select(); + return false; + } + // Since we've calculated the age in years already, + // we might as well send it up to our CGI script. + document.form1.age.value=Math.floor(years); + return true; + } + + // make sure that the contents of the supplied + // field contain a valid date. + function validateDate(element) { + var date = Date.parse(element.value); + if (0 == date) { + alert("Please enter date in format MMM DD, YY"); + element.focus(); + element.select(); + } + return date; + } + + // Compliments, compliments + function doPraise(element) { + if (element.checked) { + self.status=element.value + " is an excellent choice!"; + return true; + } else { + return false; + } + } + + function checkColor(element) { + var color = element.options[element.selectedIndex].text; + if (color == "blonde") { + if (confirm("Is it true that blondes have more fun?")) + alert("Darn. That leaves me out."); + } else + alert(color + " is a fine choice!"); + } +EOF + ; + +# here's where the execution begins +print header; +print start_html(-title=>'Personal Profile',-script=>$JSCRIPT); + +print h1("Big Brother Wants to Know All About You"), + strong("Note: "),"This page uses JavaScript and requires", + "Netscape 2.0 or higher to do anything special."; + +&print_prompt(); +print hr; +&print_response() if param; +print end_html; + +sub print_prompt { + print start_form(-name=>'form1', + -onSubmit=>"return validateForm()"),"\n"; + print "Birthdate (e.g. Jan 3, 1972): ", + textfield(-name=>'birthdate', + -onBlur=>"validateDate(this)"),"

    \n"; + print "Sex: ",radio_group(-name=>'gender', + -value=>[qw/male female/], + -onClick=>"doPraise(this)"),"

    \n"; + print "Hair color: ",popup_menu(-name=>'color', + -value=>[qw/brunette blonde red gray/], + -default=>'red', + -onChange=>"checkColor(this)"),"

    \n"; + print hidden(-name=>'age',-value=>0); + print submit(); + print end_form; +} + +sub print_response { + import_names('Q'); + print h2("Your profile"), + "You are a ",b($Q::age)," year old ",b($Q::color,$Q::gender),".", + "You should be ashamed of yourself for lying so ", + "blatantly to big brother!", + hr; +} + diff --git a/eg/cgi/monty.cgi b/eg/cgi/monty.cgi new file mode 100644 index 0000000..b7c0f6a --- /dev/null +++ b/eg/cgi/monty.cgi @@ -0,0 +1,83 @@ +#!/usr/local/bin/perl + +use CGI; + +$query = new CGI; + +print $query->header; +print $query->start_html("Example CGI.pm Form"); +print "

    Example CGI.pm Form

    \n"; +&print_prompt($query); +&do_work($query); +&print_tail; +print $query->end_html; + +sub print_prompt { + my($query) = @_; + + print $query->start_multipart_form; + print "What's your name?
    "; + print $query->textfield('name'); + print $query->checkbox('Not my real name'); + + print "

    Where can you find English Sparrows?
    "; + print $query->checkbox_group( + -name=>'Sparrow locations', + -values=>[England,France,Spain,Asia,Hoboken], + -linebreak=>'yes', + -defaults=>[England,Asia]); + + print "

    How far can they fly?
    ", + $query->radio_group( + -name=>'how far', + -values=>['10 ft','1 mile','10 miles','real far'], + -default=>'1 mile'); + + print "

    What's your favorite color? "; + print $query->popup_menu(-name=>'Color', + -values=>['black','brown','red','yellow'], + -default=>'red'); + + print $query->hidden('Reference','Monty Python and the Holy Grail'); + + print "

    What have you got there?
    "; + print $query->scrolling_list( + -name=>'possessions', + -values=>['A Coconut','A Grail','An Icon', + 'A Sword','A Ticket'], + -size=>5, + -multiple=>'true'); + + print "

    Any parting comments?
    "; + print $query->textarea(-name=>'Comments', + -rows=>10, + -columns=>50); + + print "

    ",$query->reset; + print $query->submit('Action','Shout'); + print $query->submit('Action','Scream'); + print $query->endform; + print "


    \n"; + } + +sub do_work { + my($query) = @_; + my(@values,$key); + + print "

    Here are the current settings in this form

    "; + + foreach $key ($query->param) { + print "$key -> "; + @values = $query->param($key); + print join(", ",@values),"
    \n"; + } +} + +sub print_tail { + print < +
    Lincoln D. Stein

    +Home Page +END + ; +} diff --git a/eg/cgi/multiple_forms.cgi b/eg/cgi/multiple_forms.cgi new file mode 100644 index 0000000..b38bf93 --- /dev/null +++ b/eg/cgi/multiple_forms.cgi @@ -0,0 +1,54 @@ +#!/usr/local/bin/perl + +use CGI; + +$query = new CGI; +print $query->header; +print $query->start_html('Multiple Forms'); +print "

    Multiple Forms

    \n"; + +# Print the first form +print $query->startform; +$name = $query->remote_user || 'anonymous@' . $query->remote_host; + +print "What's your name? ",$query->textfield('name',$name,50); +print "

    What's the combination?

    ", + $query->checkbox_group('words',['eenie','meenie','minie','moe']); +print "

    What's your favorite color? ", + $query->popup_menu('color',['red','green','blue','chartreuse']), + "

    "; +print $query->submit('form_1','Send Form 1'); +print $query->endform; + +# Print the second form +print "


    \n"; +print $query->startform; +print "Some radio buttons: ",$query->radio_group('radio buttons', + [qw{one two three four five}],'three'),"\n"; +print "

    What's the password? ",$query->password_field('pass','secret'); +print $query->defaults,$query->submit('form_2','Send Form 2'),"\n"; +print $query->endform; + +print "


    \n"; + +$query->import_names('Q'); +if ($Q::form_1) { + print "

    Form 1 Submitted

    \n"; + print "Your name is $Q::name\n"; + print "

    The combination is: {",join(",",@Q::words),"}\n"; + print "

    Your favorite color is $Q::color\n"; +} elsif ($Q::form_2) { + print <Form 2 Submitted +

    The value of the radio buttons is $Q::radio_buttons +

    The secret password is $Q::pass +EOF + ; +} +print qq{

    Other examples}; +print qq{

    Go to the documentation}; + +print $query->end_html; + + + diff --git a/eg/cgi/nph-clock.cgi b/eg/cgi/nph-clock.cgi new file mode 100644 index 0000000..55a2fbe --- /dev/null +++ b/eg/cgi/nph-clock.cgi @@ -0,0 +1,18 @@ +#!/usr/local/bin/perl -w + +use CGI::Push qw(:standard :html3); + +do_push(-next_page=>\&draw_time,-delay=>1); + +sub draw_time { + my $time = `/bin/date`; + return start_html('Tick Tock'), + div({-align=>CENTER}, + h1('Virtual Clock'), + h2($time) + ), + hr, + a({-href=>'index.html'},'More examples'), + end_html(); +} + diff --git a/eg/cgi/popup.cgi b/eg/cgi/popup.cgi new file mode 100644 index 0000000..88cea1d --- /dev/null +++ b/eg/cgi/popup.cgi @@ -0,0 +1,32 @@ +#!/usr/local/bin/perl + +use CGI; +$query = new CGI; +print $query->header; +print $query->start_html('Popup Window'); + + +if (!$query->param) { + print "

    Ask your Question

    \n"; + print $query->startform(-target=>'_new'); + print "What's your name? ",$query->textfield('name'); + print "

    What's the combination?

    ", + $query->checkbox_group(-name=>'words', + -values=>['eenie','meenie','minie','moe'], + -defaults=>['eenie','moe']); + + print "

    What's your favorite color? ", + $query->popup_menu(-name=>'color', + -values=>['red','green','blue','chartreuse']), + "

    "; + print $query->submit; + print $query->endform; + +} else { + print "

    And the Answer is...

    \n"; + print "Your name is ",$query->param(name),"\n"; + print "

    The keywords are: ",join(", ",$query->param(words)),"\n"; + print "

    Your favorite color is ",$query->param(color),"\n"; +} +print qq{

    Go to the documentation}; +print $query->end_html; diff --git a/eg/cgi/save_state.cgi b/eg/cgi/save_state.cgi new file mode 100644 index 0000000..be79051 --- /dev/null +++ b/eg/cgi/save_state.cgi @@ -0,0 +1,67 @@ +#!/usr/local/bin/perl + +use CGI; +$query = new CGI; + +print $query->header; +print $query->start_html("Save and Restore Example"); +print "

    Save and Restore Example

    \n"; + +# Here's where we take action on the previous request +&save_parameters($query) if $query->param('action') eq 'SAVE'; +$query = &restore_parameters($query) if $query->param('action') eq 'RESTORE'; + +# Here's where we create the form +print $query->startform; +print "Popup 1: ",$query->popup_menu('popup1',[qw{red green purple magenta orange chartreuse brown}]),"\n"; +print "Popup 2: ",$query->popup_menu('popup2',[qw{lion tiger bear zebra potto wildebeest frog emu gazelle}]),"\n"; +print "

    "; +$default_name = $query->remote_addr . '.sav'; +print "Save/restore state from file: ",$query->textfield('savefile',$default_name),"\n"; +print "

    "; +print $query->submit('action','SAVE'),$query->submit('action','RESTORE'); +print "

    ",$query->defaults; +print $query->endform; + +# Here we print out a bit at the end +print $query->end_html; + +sub save_parameters { + local($query) = @_; + local($filename) = &clean_name($query->param('savefile')); + if (open(FILE,">$filename")) { + $query->save(FILE); + close FILE; + print "State has been saved to file $filename\n"; + print "

    If you remember this name you can restore the state later.\n"; + } else { + print "Error: couldn't write to file $filename: $!\n"; + } +} + +sub restore_parameters { + local($query) = @_; + local($filename) = &clean_name($query->param('savefile')); + if (open(FILE,$filename)) { + $query = new CGI(FILE); # Throw out the old query, replace it with a new one + close FILE; + print "State has been restored from file $filename\n"; + } else { + print "Error: couldn't restore file $filename: $!\n"; + } + return $query; +} + + +# Very important subroutine -- get rid of all the naughty +# metacharacters from the file name. If there are, we +# complain bitterly and die. +sub clean_name { + local($name) = @_; + unless ($name=~/^[\w\._\-]+$/) { + print "$name has naughty characters. Only "; + print "alphanumerics are allowed. You can't use absolute names."; + die "Attempt to use naughty characters"; + } + return "WORLD_WRITABLE/$name"; +} diff --git a/eg/cgi/tryit.cgi b/eg/cgi/tryit.cgi new file mode 100644 index 0000000..155cd72 --- /dev/null +++ b/eg/cgi/tryit.cgi @@ -0,0 +1,35 @@ +#!/usr/local/bin/perl + +use CGI ':standard'; + +print header; +print start_html('A Simple Example'), + h1('A Simple Example'), + start_form, + "What's your name? ",textfield('name'), + p, + "What's the combination?", + p, + checkbox_group(-name=>'words', + -values=>['eenie','meenie','minie','moe'], + -defaults=>['eenie','minie']), + p, + "What's your favorite color? ", + popup_menu(-name=>'color', + -values=>['red','green','blue','chartreuse']), + p, + submit, + end_form, + hr; + +if (param()) { + print + "Your name is: ",em(param('name')), + p, + "The keywords are: ",em(join(", ",param('words'))), + p, + "Your favorite color is: ",em(param('color')), + hr; +} +print a({href=>'../cgi_docs.html'},'Go to the documentation'); + diff --git a/eg/cgi/wilogo.gif.uu b/eg/cgi/wilogo.gif.uu new file mode 100644 index 0000000..a183bc0 --- /dev/null +++ b/eg/cgi/wilogo.gif.uu @@ -0,0 +1,14 @@ +begin 644 wilogo.gif +M1TE&.#=A7@!$`(```'X2F?___RP`````7@!$```"_D2.J<#MKF)ZU,A3,[OO +M(IUY']A%9"6AW$F)+#2]Y:BNLF6_\;WMHF*(A55\BX%UEI^;OJ8N%(*Z^4G +M.OJJ>8HZ.(>;JRMD>X" +M%A1XSM]!A?T8/C0T$1XMJG\B&G+,"-&C/(VS0(842;`)M'S>_OE8F#"=2S#* +M8LHLAS'D1Y,42UGY9O,F-T:X@@JEE@D1RW>/D@8R.DZ-+*E0CQ:9JJ5JU!SQ +MR&BU2D.;E*4'ER0TNY%G2A/Y.G[=VG%81+5K_UG$21-GQW55;$8L\RW6J8-9>QM7<^A/SMZK!ESY$,+ +(KPA.EJ```#L` +` +end diff --git a/embed.h b/embed.h index a408584..fdda81a 100644 --- a/embed.h +++ b/embed.h @@ -53,6 +53,7 @@ #define band_amg Perl_band_amg #define bind_match Perl_bind_match #define block_end Perl_block_end +#define block_gimme Perl_block_gimme #define block_start Perl_block_start #define bool__amg Perl_bool__amg #define bor_amg Perl_bor_amg @@ -219,7 +220,7 @@ #define gv_AVadd Perl_gv_AVadd #define gv_HVadd Perl_gv_HVadd #define gv_IOadd Perl_gv_IOadd -#define gv_autoload Perl_gv_autoload +#define gv_autoload4 Perl_gv_autoload4 #define gv_check Perl_gv_check #define gv_efullname Perl_gv_efullname #define gv_efullname3 Perl_gv_efullname3 @@ -1257,7 +1258,6 @@ #define minus_n (curinterp->Iminus_n) #define minus_p (curinterp->Iminus_p) #define multiline (curinterp->Imultiline) -#define mustcatch (curinterp->Imustcatch) #define mystack_base (curinterp->Imystack_base) #define mystack_mark (curinterp->Imystack_mark) #define mystack_max (curinterp->Imystack_max) @@ -1298,6 +1298,7 @@ #define sortstack (curinterp->Isortstack) #define sortstash (curinterp->Isortstash) #define splitstr (curinterp->Isplitstr) +#define start_env (curinterp->Istart_env) #define statcache (curinterp->Istatcache) #define statgv (curinterp->Istatgv) #define statname (curinterp->Istatname) @@ -1410,7 +1411,6 @@ #define Iminus_n minus_n #define Iminus_p minus_p #define Imultiline multiline -#define Imustcatch mustcatch #define Imystack_base mystack_base #define Imystack_mark mystack_mark #define Imystack_max mystack_max @@ -1451,6 +1451,7 @@ #define Isortstack sortstack #define Isortstash sortstash #define Isplitstr splitstr +#define Istart_env start_env #define Istatcache statcache #define Istatgv statgv #define Istatname statname @@ -1572,7 +1573,6 @@ #define minus_n Perl_minus_n #define minus_p Perl_minus_p #define multiline Perl_multiline -#define mustcatch Perl_mustcatch #define mystack_base Perl_mystack_base #define mystack_mark Perl_mystack_mark #define mystack_max Perl_mystack_max @@ -1612,6 +1612,7 @@ #define sortstack Perl_sortstack #define sortstash Perl_sortstash #define splitstr Perl_splitstr +#define start_env Perl_start_env #define statcache Perl_statcache #define statgv Perl_statgv #define statname Perl_statname diff --git a/global.sym b/global.sym index 9137270..60c3836 100644 --- a/global.sym +++ b/global.sym @@ -317,6 +317,7 @@ av_undef av_unshift bind_match block_end +block_gimme block_start boot_core_UNIVERSAL call_list @@ -436,7 +437,7 @@ gp_ref gv_AVadd gv_HVadd gv_IOadd -gv_autoload +gv_autoload4 gv_check gv_efullname gv_efullname3 diff --git a/gv.c b/gv.c index cc520d6..fccecf3 100644 --- a/gv.c +++ b/gv.c @@ -264,17 +264,18 @@ char* name; if (strEQ(name,"import")) gv = (GV*)&sv_yes; else - gv = gv_autoload(stash, name, nend - name); + gv = gv_autoload4(stash, name, nend - name, TRUE); } return gv; } GV* -gv_autoload(stash, name, len) +gv_autoload4(stash, name, len, method) HV* stash; char* name; STRLEN len; +I32 method; { static char autoload[] = "AUTOLOAD"; static STRLEN autolen = 8; @@ -286,9 +287,16 @@ STRLEN len; if (len == autolen && strnEQ(name, autoload, autolen)) return Nullgv; - if (!(gv = gv_fetchmeth(stash, autoload, autolen, 0))) - return Nullgv; - cv = GvCV(gv); + if (method) { + if (!(gv = gv_fetchmeth(stash, autoload, autolen, FALSE))) + return Nullgv; + cv = GvCV(gv); + } + else { + GV** gvp = (GV**)hv_fetch(stash, autoload, autolen, FALSE); + if (!gvp || !(gv = *gvp) || !(cv = GvCVu(gv))) + return Nullgv; + } /* * Given &FOO::AUTOLOAD, set $FOO::AUTOLOAD to desired function name. @@ -1282,14 +1290,14 @@ int flags; dSP; BINOP myop; SV* res; - bool oldmustcatch = mustcatch; + bool oldcatch = CATCH_GET; + CATCH_SET(TRUE); Zero(&myop, 1, BINOP); myop.op_last = (OP *) &myop; myop.op_next = Nullop; - myop.op_flags = OPf_KNOW|OPf_STACKED; + myop.op_flags = OPf_WANT_SCALAR | OPf_STACKED; - mustcatch = TRUE; ENTER; SAVESPTR(op); op = (OP *) &myop; @@ -1301,7 +1309,7 @@ int flags; EXTEND(sp, notfound + 5); PUSHs(lr>0? right: left); PUSHs(lr>0? left: right); - PUSHs( assign ? &sv_undef : (lr>0? &sv_yes: &sv_no)); + PUSHs( assign ? &sv_undef : boolSV(lr>0) ); if (notfound) { PUSHs( sv_2mortal(newSVpv((char *)AMG_names[method + assignshift],0)) ); } @@ -1315,7 +1323,7 @@ int flags; res=POPs; PUTBACK; - mustcatch = oldmustcatch; + CATCH_SET(oldcatch); if (postpr) { int ans; @@ -1344,7 +1352,7 @@ int flags; case not_amg: ans=!SvOK(res); break; } - return ans? &sv_yes: &sv_no; + return boolSV(ans); } else if (method==copy_amg) { if (!SvROK(res)) { croak("Copy method did not return a reference"); diff --git a/hints/dgux.sh b/hints/dgux.sh index d751e63..03b285d 100644 --- a/hints/dgux.sh +++ b/hints/dgux.sh @@ -18,7 +18,7 @@ # your $LD_LIBRARY_PATH to include the source directory when you build, # test and install the software. # -# -Roderick Schertler +# -Roderick Schertler # Here are the things from some old DGUX hints files which are different diff --git a/installhtml b/installhtml new file mode 100644 index 0000000..a33dec3 --- /dev/null +++ b/installhtml @@ -0,0 +1,560 @@ +#!/usr/bin/perl -w + +use Config; # for config options in the makefile +use Getopt::Long; # for command-line parsing +use Cwd; +use Pod::Html; + +umask 022; + +=head1 NAME + +installhtml - converts a collection of POD pages to HTML format. + +=head1 SYNOPSIS + + installhtml [--help] [--podpath=:...:] [--podroot=] + [--htmldir=] [--htmlroot=] [--norecurse] [--recurse] + [--splithead=,...,] [--splititem=,...,] + [--libpods=,...,] [--verbose] + +=head1 DESCRIPTION + +I converts a collection of POD pages to a corresponding +collection of HTML pages. This is primarily used to convert the pod +pages found in the perl distribution. + +=head1 OPTIONS + +=over 4 + +=item B<--help> help + +Displays the usage. + +=item B<--podpath> POD search path + +The list of diretories to search for .pod and .pm files to be converted. +Default is `podroot/.'. + +=item B<--podroot> POD search path base directory + +The base directory to search for all .pod and .pm files to be converted. +Default is current directory. + +=item B<--htmldir> HTML destination directory + +The base directory which all HTML files will be written to. This should +be a path relative to the filesystem, not the resulting URL. + +=item B<--htmlroot> URL base directory + +The base directory which all resulting HTML files will be visible at in +a URL. The default is `/'. + +=item B<--recurse> recurse on subdirectories + +Whether or not to convert all .pm and .pod files found in subdirectories +too. Default is to not recurse. + +=item B<--splithead> POD files to split on =head directive + +Colon-seperated list of pod files to split by the =head directive. These +files should have names specified relative to podroot. + +=item B<--splititem> POD files to split on =item directive + +Colon-seperated list of all pod files to split by the =item directive. +I does not do the actual split, rather it invokes I +to do the dirty work. As with --splithead, these files should have names +specified relative to podroot. + +=item B<--libpods> library PODs for LEE links + +Colon-seperated list of "library" pod files. This is the same list that +will be passed to pod2html when any pod is converted. + +=item B<--verbose> verbose output + +Self-explanatory. + +=back + +=head1 EXAMPLE + +The following command-line is an example of the one we use to convert +perl documentation: + + ./installhtml --podpath=lib:ext:pod:vms \ + --podroot=/usr/src/perl \ + --htmldir=/perl/nmanual \ + --htmlroot=/perl/nmanual \ + --splithead=pod/perlipc.pod \ + --splititem=pod/perlfunc \ + --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \ + --recurse \ + --verbose + +=head1 AUTHOR + +Chris Hall Ehallc@cs.colorado.eduE + +=head1 TODO + +=cut + +$usage =<:...: --podroot= + --htmldir= --htmlroot= --norecurse --recurse + --splithead=,..., --splititem=,..., + --libpods=,..., --verbose + + --help - this message + --podpath - colon-separated list of directories containing .pod and + .pm files to be converted (. by default). + --podroot - filesystem base directory from which all relative paths in + podpath stem (default is .). + --htmldir - directory to store resulting html files in relative + to the filesystem (\$podroot/html by default). + --htmlroot - http-server base directory from which all relative paths + in podpath stem (default is /). + --libpods - comma-separated list of files to search for =item pod + directives in as targets of C<> and implicit links (empty + by default). + --norecurse - don't recurse on those subdirectories listed in podpath. + (default behavior). + --recurse - recurse on those subdirectories listed in podpath + --splithead - comma-separated list of .pod or .pm files to split. will + split each file into several smaller files at every occurance + of a pod =head[1-6] directive. + --splititem - comma-separated list of .pod or .pm files to split using + splitpod. + --splitpod - where the program splitpod can be found (\$podroot/pod by + default). + --verbose - self-explanatory. + +END_OF_USAGE + +@libpods = (); +@podpath = ( "." ); # colon-separated list of directories containing .pod + # and .pm files to be converted. +$podroot = "."; # assume the pods we want are here +$htmldir = ""; # nothing for now... +$htmlroot = "/"; # default value +$recurse = 0; # default behavior +@splithead = (); # don't split any files by default +@splititem = (); # don't split any files by default +$splitpod = ""; # nothing for now. + +$verbose = 0; # whether or not to print debugging info + +$pod2html = "pod/pod2html"; + + +# parse the command-line +$result = GetOptions( qw( + help + podpath=s + podroot=s + htmldir=s + htmlroot=s + libpods=s + recurse! + splithead=s + splititem=s + splitpod=s + verbose +)); +usage("invalid parameters") unless $result; +parse_command_line(); + + +# set these variables to appropriate values if the user didn't specify +# values for them. +$htmldir = "$htmlroot/html" unless $htmldir; +$splitpod = "$podroot/pod" unless $splitpod; + + +# make sure that the destination directory exists +(mkdir($htmldir, 0755) || + die "$0: cannot make directory $htmldir: $!\n") if ! -d $htmldir; + + +# the following array will eventually contain files that are to be +# ignored in the conversion process. these are files that have been +# process by splititem or splithead and should not be converted as a +# result. +@ignore = (); + + +# split pods. its important to do this before convert ANY pods because +# it may effect some of the links +@splitdirs = (); # files in these directories won't get an index +split_on_head($podroot, $htmldir, \@splitdirs, \@ignore, @splithead); +split_on_item($podroot, \@splitdirs, \@ignore, @splititem); + + +# convert the pod pages found in @poddirs +#warn "converting files\n" if $verbose; +#warn "\@ignore\t= @ignore\n" if $verbose; +foreach $dir (@podpath) { + installdir($dir, $recurse, $podroot, \@splitdirs, \@ignore); +} + + +# now go through and create master indices for each pod we split +foreach $dir (@splititem) { + print "creating index $htmldir/$dir.html\n" if $verbose; + create_index("$htmldir/$dir.html", "$htmldir/$dir"); +} + +foreach $dir (@splithead) { + $dir .= ".pod" unless $dir =~ /(\.pod|\.pm)$/; + # let pod2html create the file + runpod2html($dir, 1); + + # now go through and truncate after the index + $dir =~ /^(.*?)(\.pod|\.pm)?$/sm; + $file = "$htmldir/$1"; + print "creating index $file.html\n" if $verbose; + + # read in everything until what would have been the first =head + # directive, patching the index as we go. + open(H, "<$file.html") || + die "$0: error opening $file.html for input: $!\n"; + $/ = ""; + @data = (); + while () { + last if /NAME=/; + s,HREF="#(.*)">,HREF="$file/$1.html">,g; + push @data, $_; + } + close(H); + + # now rewrite the file + open(H, ">$file.html") || + die "$0: error opening $file.html for output: $!\n"; + print H "@data\n"; + close(H); +} + +############################################################################## + + +sub usage { + warn "$0: @_\n" if @_; + die $usage; +} + + +sub parse_command_line { + usage() if defined $opt_help; + $opt_help = ""; # make -w shut up + + # list of directories + @podpath = split(":", $opt_podpath) if defined $opt_podpath; + + # lists of files + @splithead = split(",", $opt_splithead) if defined $opt_splithead; + @splititem = split(",", $opt_splititem) if defined $opt_splititem; + @libpods = split(",", $opt_libpods) if defined $opt_libpods; + + $htmldir = $opt_htmldir if defined $opt_htmldir; + $htmlroot = $opt_htmlroot if defined $opt_htmlroot; + $podroot = $opt_podroot if defined $opt_podroot; + $splitpod = $opt_splitpod if defined $opt_splitpod; + + $recurse = $opt_recurse if defined $opt_recurse; + $verbose = $opt_verbose if defined $opt_verbose; +} + + +sub create_index { + my($html, $dir) = @_; + my(@files, @filedata, @index, $file); + + # get the list of .html files in this directory + opendir(DIR, $dir) || + die "$0: error opening directory $dir for reading: $!\n"; + @files = sort(grep(/\.html$/, readdir(DIR))); + closedir(DIR); + + open(HTML, ">$html") || + die "$0: error opening $html for output: $!\n"; + + # for each .html file in the directory, extract the index + # embedded in the file and throw it into the big index. + print HTML "

    \n"; + foreach $file (@files) { + $/ = ""; + + open(IN, "<$dir/$file") || + die "$0: error opening $dir/$file for input: $!\n"; + @filedata = ; + close(IN); + + # pull out the NAME section + ($name) = grep(/NAME=/, @filedata); + $name =~ m,/H1>\s(\S+)\s[\s-]*(.*?)\s*$,sm; + print HTML qq(); + print HTML "
    $1
    $2\n" if defined $1; +# print HTML qq($1
    \n") if defined $1; + + next; + + @index = grep(/.*/s, + @filedata); + for (@index) { + s/(\s*\s*)/$2/s; + s,#,$dir/$file#,g; + # print HTML "$_\n"; + print HTML "$_\n


    \n"; + } + } + print HTML "

    \n"; + + close(HTML); +} + + +sub split_on_head { + my($podroot, $htmldir, $splitdirs, $ignore, @splithead) = @_; + my($pod, $dirname, $filename); + + # split the files specified in @splithead on =head[1-6] pod directives + print "splitting files by head.\n" if $verbose && $#splithead >= 0; + foreach $pod (@splithead) { + # figure out the directory name and filename + $pod =~ s,^([^/]*)$,/$1,; + $pod =~ m,(.*?)/(.*?)(\.pod)?$,; + $dirname = $1; + $filename = "$2.pod"; + + # since we are splitting this file it shouldn't be converted. + push(@$ignore, "$podroot/$dirname/$filename"); + + # split the pod + splitpod("$podroot/$dirname/$filename", "$podroot/$dirname", $htmldir, + $splitdirs); + } +} + + +sub split_on_item { + my($podroot, $splitdirs, $ignore, @splititem) = @_; + my($pwd, $dirname, $filename); + + print "splitting files by item.\n" if $verbose && $#splititem >= 0; + $pwd = getcwd(); + foreach $pod (@splititem) { + # figure out the directory to split into + $pod =~ s,^([^/]*)$,/$1,; + $pod =~ m,(.*?)/(.*?)(\.pod)?$,; + $dirname = "$1/$2"; + $filename = "$2.pod"; + + # since we are splitting this file it shouldn't be converted. + push(@$ignore, "$podroot/$dirname.pod"); + + # split the pod + push(@$splitdirs, "$podroot/$dirname"); + if (! -d "$podroot/$dirname") { + mkdir("$podroot/$dirname", 0755) || + die "$0: error creating directory $podroot/$dirname: $!\n"; + } + chdir("$podroot/$dirname") || + die "$0: error changing to directory $podroot/$dirname: $!\n"; + system("./splitpod", "../$filename"); + } + chdir($pwd); +} + + +# +# splitpod - splits a .pod file into several smaller .pod files +# where a new file is started each time a =head[1-6] pod directive +# is encountered in the input file. +# +sub splitpod { + my($pod, $poddir, $htmldir, $splitdirs) = @_; + my(@poddata, @filedata, @heads); + my($file, $i, $j, $prevsec, $section, $nextsec); + + print "splitting $pod\n" if $verbose; + + # read the file in paragraphs + $/ = ""; + open(SPLITIN, "<$pod") || + die "$0: error opening $pod for input: $!\n"; + @filedata = ; + close(SPLITIN) || + die "$0: error closing $pod: $!\n"; + + # restore the file internally by =head[1-6] sections + @poddata = (); + for ($i = 0, $j = -1; $i <= $#filedata; $i++) { + $j++ if ($filedata[$i] =~ /^\s*=head[1-6]/); + if ($j >= 0) { + $poddata[$j] = "" unless defined $poddata[$j]; + $poddata[$j] .= "\n$filedata[$i]" if $j >= 0; + } + } + + # create list of =head[1-6] sections so that we can rewrite + # L<> links as necessary. + %heads = (); + foreach $i (0..$#poddata) { + $heads{htmlize($1)} = 1 if $poddata[$i] =~ /=head[1-6]\s+(.*)/; + } + + # create a directory of a similar name and store all the + # files in there + $pod =~ s,.*/(.*),$1,; # get the last part of the name + $dir = $pod; + $dir =~ s/\.pod//g; + push(@$splitdirs, "$poddir/$dir"); + mkdir("$poddir/$dir", 0755) || + die "$0: could not create directory $poddir/$dir: $!\n" + unless -d "$poddir/$dir"; + + $poddata[0] =~ /^\s*=head[1-6]\s+(.*)/; + $section = ""; + $nextsec = $1; + + # for each section of the file create a separate pod file + for ($i = 0; $i <= $#poddata; $i++) { + # determine the "prev" and "next" links + $prevsec = $section; + $section = $nextsec; + if ($i < $#poddata) { + $poddata[$i+1] =~ /^\s*=head[1-6]\s+(.*)/; + $nextsec = $1; + } else { + $nextsec = ""; + } + + # determine an appropriate filename (this must correspond with + # what pod2html will try and guess) + # $poddata[$i] =~ /^\s*=head[1-6]\s+(.*)/; + $file = "$dir/" . htmlize($section) . ".pod"; + + # create the new .pod file + print "\tcreating $poddir/$file\n" if $verbose; + open(SPLITOUT, ">$poddir/$file") || + die "$0: error opening $poddir/$file for output: $!\n"; + $poddata[$i] =~ s,L<([^<>]*)>, + defined $heads{htmlize($1)} ? "L<$dir/$1>" : "L<$1>" + ,ge; + print SPLITOUT $poddata[$i]."\n\n"; + print SPLITOUT "=over 4\n\n"; + print SPLITOUT "=item *\n\nBack to L<$dir/\"$prevsec\">\n\n" if $prevsec; + print SPLITOUT "=item *\n\nForward to L<$dir/\"$nextsec\">\n\n" if $nextsec; + print SPLITOUT "=item *\n\nUp to L<$dir>\n\n"; + print SPLITOUT "=back\n\n"; + close(SPLITOUT) || + die "$0: error closing $poddir/$file: $!\n"; + } +} + + +# +# installdir - takes care of converting the .pod and .pm files in the +# current directory to .html files and then installing those. +# +sub installdir { + my($dir, $recurse, $podroot, $splitdirs, $ignore) = @_; + my(@dirlist, @podlist, @pmlist, $doindex); + + @dirlist = (); # directories to recurse on + @podlist = (); # .pod files to install + @pmlist = (); # .pm files to install + + # should files in this directory get an index? + $doindex = (grep($_ eq "$podroot/$dir", @$splitdirs) ? 0 : 1); + + opendir(DIR, "$podroot/$dir") + || die "$0: error opening directory $podroot/$dir: $!\n"; + + # find the directories to recurse on + @dirlist = map { "$dir/$_" } + grep(-d "$podroot/$dir/$_" && !/^\.{1,2}/, readdir(DIR)) if $recurse; + rewinddir(DIR); + + # find all the .pod files within the directory + @podlist = map { /^(.*)\.pod$/; "$dir/$1" } + grep(! -d "$podroot/$dir/$_" && /\.pod$/, readdir(DIR)); + rewinddir(DIR); + + # find all the .pm files within the directory + @pmlist = map { /^(.*)\.pm$/; "$dir/$1" } + grep(! -d "$podroot/$dir/$_" && /\.pm$/, readdir(DIR)); + + closedir(DIR); + + # recurse on all subdirectories we kept track of + foreach $dir (@dirlist) { + installdir($dir, $recurse, $podroot, $splitdirs, $ignore); + } + + # install all the pods we found + foreach $pod (@podlist) { + # check if we should ignore it. + next if grep($_ eq "$podroot/$pod.pod", @$ignore); + + # check if a .pm files exists too + if (grep($_ eq "$pod.pm", @pmlist)) { + print "$0: Warning both `$podroot/$pod.pod' and " + . "`$podroot/$pod.pm' exist, using pod\n"; + push(@ignore, "$pod.pm"); + } + runpod2html("$pod.pod", $doindex); + } + + # install all the .pm files we found + foreach $pm (@pmlist) { + # check if we should ignore it. + next if grep($_ eq "$pm.pm", @ignore); + + runpod2html("$pm.pm", $doindex); + } +} + + +# +# runpod2html - invokes pod2html to convert a .pod or .pm file to a .html +# file. +# +sub runpod2html { + my($pod, $doindex) = @_; + my($html, $i, $dir, @dirs); + + $html = $pod; + $html =~ s/\.(pod|pm)$/.html/g; + + # make sure the destination directories exist + @dirs = split("/", $html); + $dir = "$htmldir/"; + for ($i = 0; $i < $#dirs; $i++) { + if (! -d "$dir$dirs[$i]") { + mkdir("$dir$dirs[$i]", 0755) || + die "$0: error creating directory $dir$dirs[$i]: $!\n"; + } + $dir .= "$dirs[$i]/"; + } + + # invoke pod2html + print "$podroot/$pod => $htmldir/$html\n" if $verbose; +#system("./pod2html", + Pod::Html'pod2html( + #Pod::Html'pod2html($pod2html, + "--htmlroot=$htmlroot", + "--podpath=".join(":", @podpath), + "--podroot=$podroot", "--netscape", + ($doindex ? "--index" : "--noindex"), + "--" . ($recurse ? "" : "no") . "recurse", + ($#libpods >= 0) ? "--libpods=" . join(":", @libpods) : "", + "--infile=$podroot/$pod", "--outfile=$htmldir/$html"); + die "$0: error running $pod2html: $!\n" if $?; +} + +sub htmlize { htmlify(0, @_) } diff --git a/interp.sym b/interp.sym index a82c2c4..80ef5b5 100644 --- a/interp.sym +++ b/interp.sym @@ -85,7 +85,6 @@ minus_l minus_n minus_p multiline -mustcatch mystack_base mystack_mark mystack_max @@ -126,6 +125,7 @@ sortcop sortstack sortstash splitstr +start_env statcache statgv statname diff --git a/lib/CGI.pm b/lib/CGI.pm new file mode 100644 index 0000000..3ddd4d9 --- /dev/null +++ b/lib/CGI.pm @@ -0,0 +1,4885 @@ +package CGI; +require 5.001; + +# See the bottom of this file for the POD documentation. Search for the +# string '=head'. + +# You can run this file through either pod2man or pod2html to produce pretty +# documentation in manual or html file format (these utilities are part of the +# Perl 5 distribution). + +# Copyright 1995-1997 Lincoln D. Stein. All rights reserved. +# It may be used and modified freely, but I do request that this copyright +# notice remain attached to the file. You may modify this module as you +# wish, but if you redistribute a modified version, please attach a note +# listing the modifications you have made. + +# The most recent version and complete docs are available at: +# http://www.genome.wi.mit.edu/ftp/pub/software/WWW/cgi_docs.html +# ftp://ftp-genome.wi.mit.edu/pub/software/WWW/ + +# Set this to 1 to enable copious autoloader debugging messages +$AUTOLOAD_DEBUG=0; + +# Set this to 1 to enable NPH scripts +# or: +# 1) use CGI qw(:nph) +# 2) $CGI::nph(1) +# 3) print header(-nph=>1) +$NPH=0; + +$CGI::revision = '$Id: CGI.pm,v 2.32 1997/3/19 10:10 lstein Exp $'; +$CGI::VERSION='2.32'; + +# OVERRIDE THE OS HERE IF CGI.pm GUESSES WRONG +# $OS = 'UNIX'; +# $OS = 'MACINTOSH'; +# $OS = 'WINDOWS'; +# $OS = 'VMS'; +# $OS = 'OS2'; + +# HARD-CODED LOCATION FOR FILE UPLOAD TEMPORARY FILES. +# UNCOMMENT THIS ONLY IF YOU KNOW WHAT YOU'RE DOING. +# $TempFile::TMPDIRECTORY = '/usr/tmp'; + +# ------------------ START OF THE LIBRARY ------------ + +# FIGURE OUT THE OS WE'RE RUNNING UNDER +# Some systems support the $^O variable. If not +# available then require() the Config library +unless ($OS) { + unless ($OS = $^O) { + require Config; + $OS = $Config::Config{'osname'}; + } +} +if ($OS=~/Win/i) { + $OS = 'WINDOWS'; +} elsif ($OS=~/vms/i) { + $OS = 'VMS'; +} elsif ($OS=~/Mac/i) { + $OS = 'MACINTOSH'; +} elsif ($OS=~/os2/i) { + $OS = 'OS2'; +} else { + $OS = 'UNIX'; +} + +# Some OS logic. Binary mode enabled on DOS, NT and VMS +$needs_binmode = $OS=~/^(WINDOWS|VMS|OS2)/; + +# This is the default class for the CGI object to use when all else fails. +$DefaultClass = 'CGI' unless defined $CGI::DefaultClass; +# This is where to look for autoloaded routines. +$AutoloadClass = $DefaultClass unless defined $CGI::AutoloadClass; + +# The path separator is a slash, backslash or semicolon, depending +# on the paltform. +$SL = { + UNIX=>'/', + OS2=>'\\', + WINDOWS=>'\\', + MACINTOSH=>':', + VMS=>'\\' + }->{$OS}; + +# Turn on NPH scripts by default when running under IIS server! +$NPH++ if defined($ENV{'SERVER_SOFTWARE'}) && $ENV{'SERVER_SOFTWARE'}=~/IIS/; + +# Turn on special checking for Doug MacEachern's modperl +if ($MOD_PERL = $ENV{'GATEWAY_INTERFACE'} =~ /^CGI-Perl/) { + $NPH++; + $| = 1; + $SEQNO = 1; +} + +# This is really "\r\n", but the meaning of \n is different +# in MacPerl, so we resort to octal here. +$CRLF = "\015\012"; + +if ($needs_binmode) { + $CGI::DefaultClass->binmode(main::STDOUT); + $CGI::DefaultClass->binmode(main::STDIN); + $CGI::DefaultClass->binmode(main::STDERR); +} + +# Cute feature, but it broke when the overload mechanism changed... +# %OVERLOAD = ('""'=>'as_string'); + +%EXPORT_TAGS = ( + ':html2'=>[h1..h6,qw/p br hr ol ul li dl dt dd menu code var strong em + tt i b blockquote pre img a address cite samp dfn html head + base body link nextid title meta kbd start_html end_html + input Select option/], + ':html3'=>[qw/div table caption th td TR Tr super sub strike applet PARAM embed basefont/], + ':netscape'=>[qw/blink frameset frame script font fontsize center/], + ':form'=>[qw/textfield textarea filefield password_field hidden checkbox checkbox_group + submit reset defaults radio_group popup_menu button autoEscape + scrolling_list image_button start_form end_form startform endform + start_multipart_form isindex tmpFileName uploadInfo URL_ENCODED MULTIPART/], + ':cgi'=>[qw/param path_info path_translated url self_url script_name cookie dump + raw_cookie request_method query_string accept user_agent remote_host + remote_addr referer server_name server_software server_port server_protocol + virtual_host remote_ident auth_type http + remote_user user_name header redirect import_names put/], + ':ssl' => [qw/https/], + ':cgi-lib' => [qw/ReadParse PrintHeader HtmlTop HtmlBot SplitParam/], + ':html' => [qw/:html2 :html3 :netscape/], + ':standard' => [qw/:html2 :form :cgi/], + ':all' => [qw/:html2 :html3 :netscape :form :cgi/] + ); + +# to import symbols into caller +sub import { + my $self = shift; + my ($callpack, $callfile, $callline) = caller; + foreach (@_) { + $NPH++, next if $_ eq ':nph'; + foreach (&expand_tags($_)) { + tr/a-zA-Z0-9_//cd; # don't allow weird function names + $EXPORT{$_}++; + } + } + # To allow overriding, search through the packages + # Till we find one in which the correct subroutine is defined. + my @packages = ($self,@{"$self\:\:ISA"}); + foreach $sym (keys %EXPORT) { + my $pck; + my $def = ${"$self\:\:AutoloadClass"} || $DefaultClass; + foreach $pck (@packages) { + if (defined(&{"$pck\:\:$sym"})) { + $def = $pck; + last; + } + } + *{"${callpack}::$sym"} = \&{"$def\:\:$sym"}; + } +} + +sub expand_tags { + my($tag) = @_; + my(@r); + return ($tag) unless $EXPORT_TAGS{$tag}; + foreach (@{$EXPORT_TAGS{$tag}}) { + push(@r,&expand_tags($_)); + } + return @r; +} + +#### Method: new +# The new routine. This will check the current environment +# for an existing query string, and initialize itself, if so. +#### +sub new { + my($class,$initializer) = @_; + my $self = {}; + bless $self,ref $class || $class || $DefaultClass; + $CGI::DefaultClass->_reset_globals() if $MOD_PERL; + $initializer = to_filehandle($initializer) if $initializer; + $self->init($initializer); + return $self; +} + +# We provide a DESTROY method so that the autoloader +# doesn't bother trying to find it. +sub DESTROY { } + +#### Method: param +# Returns the value(s)of a named parameter. +# If invoked in a list context, returns the +# entire list. Otherwise returns the first +# member of the list. +# If name is not provided, return a list of all +# the known parameters names available. +# If more than one argument is provided, the +# second and subsequent arguments are used to +# set the value of the parameter. +#### +sub param { + my($self,@p) = self_or_default(@_); + return $self->all_parameters unless @p; + my($name,$value,@other); + + # For compatibility between old calling style and use_named_parameters() style, + # we have to special case for a single parameter present. + if (@p > 1) { + ($name,$value,@other) = $self->rearrange([NAME,[DEFAULT,VALUE,VALUES]],@p); + my(@values); + + if (substr($p[0],0,1) eq '-' || $self->use_named_parameters) { + @values = defined($value) ? (ref($value) && ref($value) eq 'ARRAY' ? @{$value} : $value) : (); + } else { + foreach ($value,@other) { + push(@values,$_) if defined($_); + } + } + # If values is provided, then we set it. + if (@values) { + $self->add_parameter($name); + $self->{$name}=[@values]; + } + } else { + $name = $p[0]; + } + + return () unless defined($name) && $self->{$name}; + return wantarray ? @{$self->{$name}} : $self->{$name}->[0]; +} + +#### Method: delete +# Deletes the named parameter entirely. +#### +sub delete { + my($self,$name) = self_or_default(@_); + delete $self->{$name}; + delete $self->{'.fieldnames'}->{$name}; + @{$self->{'.parameters'}}=grep($_ ne $name,$self->param()); + return wantarray ? () : undef; +} + +sub self_or_default { + return @_ if defined($_[0]) && !ref($_[0]) && ($_[0] eq 'CGI'); + unless (defined($_[0]) && + ref($_[0]) && + (ref($_[0]) eq 'CGI' || + eval "\$_[0]->isaCGI()")) { # optimize for the common case + $CGI::DefaultClass->_reset_globals() + if defined($Q) && $MOD_PERL && $CGI::DefaultClass->_new_request(); + $Q = $CGI::DefaultClass->new unless defined($Q); + unshift(@_,$Q); + } + return @_; +} + +sub _new_request { + return undef unless (defined(Apache->seqno()) or eval { require Apache }); + if (Apache->seqno() != $SEQNO) { + $SEQNO = Apache->seqno(); + return 1; + } else { + return undef; + } +} + +sub _reset_globals { + undef $Q; + undef @QUERY_PARAM; +} + +sub self_or_CGI { + local $^W=0; # prevent a warning + if (defined($_[0]) && + (substr(ref($_[0]),0,3) eq 'CGI' + || eval "\$_[0]->isaCGI()")) { + return @_; + } else { + return ($DefaultClass,@_); + } +} + +sub isaCGI { + return 1; +} + +#### Method: import_names +# Import all parameters into the given namespace. +# Assumes namespace 'Q' if not specified +#### +sub import_names { + my($self,$namespace) = self_or_default(@_); + $namespace = 'Q' unless defined($namespace); + die "Can't import names into 'main'\n" + if $namespace eq 'main'; + my($param,@value,$var); + foreach $param ($self->param) { + # protect against silly names + ($var = $param)=~tr/a-zA-Z0-9_/_/c; + $var = "${namespace}::$var"; + @value = $self->param($param); + @{$var} = @value; + ${$var} = $value[0]; + } +} + +#### Method: use_named_parameters +# Force CGI.pm to use named parameter-style method calls +# rather than positional parameters. The same effect +# will happen automatically if the first parameter +# begins with a -. +sub use_named_parameters { + my($self,$use_named) = self_or_default(@_); + return $self->{'.named'} unless defined ($use_named); + + # stupidity to avoid annoying warnings + return $self->{'.named'}=$use_named; +} + +######################################## +# THESE METHODS ARE MORE OR LESS PRIVATE +# GO TO THE __DATA__ SECTION TO SEE MORE +# PUBLIC METHODS +######################################## + +# Initialize the query object from the environment. +# If a parameter list is found, this object will be set +# to an associative array in which parameter names are keys +# and the values are stored as lists +# If a keyword list is found, this method creates a bogus +# parameter list with the single parameter 'keywords'. + +sub init { + my($self,$initializer) = @_; + my($query_string,@lines); + my($meth) = ''; + + # if we get called more than once, we want to initialize + # ourselves from the original query (which may be gone + # if it was read from STDIN originally.) + if (defined(@QUERY_PARAM) && !defined($initializer)) { + + foreach (@QUERY_PARAM) { + $self->param('-name'=>$_,'-value'=>$QUERY_PARAM{$_}); + } + return; + } + + $meth=$ENV{'REQUEST_METHOD'} if defined($ENV{'REQUEST_METHOD'}); + + # If initializer is defined, then read parameters + # from it. + METHOD: { + if (defined($initializer)) { + + if (ref($initializer) && ref($initializer) eq 'HASH') { + foreach (keys %$initializer) { + $self->param('-name'=>$_,'-value'=>$initializer->{$_}); + } + last METHOD; + } + + $initializer = $$initializer if ref($initializer); + if (defined(fileno($initializer))) { + while (<$initializer>) { + chomp; + last if /^=/; + push(@lines,$_); + } + # massage back into standard format + if ("@lines" =~ /=/) { + $query_string=join("&",@lines); + } else { + $query_string=join("+",@lines); + } + last METHOD; + } + $query_string = $initializer; + last METHOD; + } + # If method is GET or HEAD, fetch the query from + # the environment. + if ($meth=~/^(GET|HEAD)$/) { + $query_string = $ENV{'QUERY_STRING'}; + last METHOD; + } + + # If the method is POST, fetch the query from standard + # input. + if ($meth eq 'POST') { + + if (defined($ENV{'CONTENT_TYPE'}) + && + $ENV{'CONTENT_TYPE'}=~m|^multipart/form-data|) { + my($boundary) = $ENV{'CONTENT_TYPE'}=~/boundary=(\S+)/; + $self->read_multipart($boundary,$ENV{'CONTENT_LENGTH'}); + + } else { + + $self->read_from_client(\*STDIN,\$query_string,$ENV{'CONTENT_LENGTH'},0) + if $ENV{'CONTENT_LENGTH'} > 0; + + } + # Some people want to have their cake and eat it too! + # Uncomment this line to have the contents of the query string + # APPENDED to the POST data. + # $query_string .= ($query_string ? '&' : '') . $ENV{'QUERY_STRING'} if $ENV{'QUERY_STRING'}; + last METHOD; + } + + # If neither is set, assume we're being debugged offline. + # Check the command line and then the standard input for data. + # We use the shellwords package in order to behave the way that + # UN*X programmers expect. + $query_string = &read_from_cmdline; + } + + # We now have the query string in hand. We do slightly + # different things for keyword lists and parameter lists. + if ($query_string) { + if ($query_string =~ /=/) { + $self->parse_params($query_string); + } else { + $self->add_parameter('keywords'); + $self->{'keywords'} = [$self->parse_keywordlist($query_string)]; + } + } + + # Special case. Erase everything if there is a field named + # .defaults. + if ($self->param('.defaults')) { + undef %{$self}; + } + + # Associative array containing our defined fieldnames + $self->{'.fieldnames'} = {}; + foreach ($self->param('.cgifields')) { + $self->{'.fieldnames'}->{$_}++; + } + + # Clear out our default submission button flag if present + $self->delete('.submit'); + $self->delete('.cgifields'); + $self->save_request unless $initializer; + +} + + +# FUNCTIONS TO OVERRIDE: + +# Turn a string into a filehandle +sub to_filehandle { + my $string = shift; + if ($string && !ref($string)) { + my($package) = caller(1); + my($tmp) = $string=~/[':]/ ? $string : "$package\:\:$string"; + return $tmp if defined(fileno($tmp)); + } + return $string; +} + +# Create a new multipart buffer +sub new_MultipartBuffer { + my($self,$boundary,$length,$filehandle) = @_; + return MultipartBuffer->new($self,$boundary,$length,$filehandle); +} + +# Read data from a file handle +sub read_from_client { + my($self, $fh, $buff, $len, $offset) = @_; + local $^W=0; # prevent a warning + return read($fh, $$buff, $len, $offset); +} + +# put a filehandle into binary mode (DOS) +sub binmode { + binmode($_[1]); +} + +# send output to the browser +sub put { + my($self,@p) = self_or_default(@_); + $self->print(@p); +} + +# print to standard output (for overriding in mod_perl) +sub print { + shift; + CORE::print(@_); +} + +# unescape URL-encoded data +sub unescape { + my($todecode) = @_; + $todecode =~ tr/+/ /; # pluses become spaces + $todecode =~ s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge; + return $todecode; +} + +# URL-encode data +sub escape { + my($toencode) = @_; + $toencode=~s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg; + return $toencode; +} + +sub save_request { + my($self) = @_; + # We're going to play with the package globals now so that if we get called + # again, we initialize ourselves in exactly the same way. This allows + # us to have several of these objects. + @QUERY_PARAM = $self->param; # save list of parameters + foreach (@QUERY_PARAM) { + $QUERY_PARAM{$_}=$self->{$_}; + } +} + +sub parse_keywordlist { + my($self,$tosplit) = @_; + $tosplit = &unescape($tosplit); # unescape the keywords + $tosplit=~tr/+/ /; # pluses to spaces + my(@keywords) = split(/\s+/,$tosplit); + return @keywords; +} + +sub parse_params { + my($self,$tosplit) = @_; + my(@pairs) = split('&',$tosplit); + my($param,$value); + foreach (@pairs) { + ($param,$value) = split('='); + $param = &unescape($param); + $value = &unescape($value); + $self->add_parameter($param); + push (@{$self->{$param}},$value); + } +} + +sub add_parameter { + my($self,$param)=@_; + push (@{$self->{'.parameters'}},$param) + unless defined($self->{$param}); +} + +sub all_parameters { + my $self = shift; + return () unless defined($self) && $self->{'.parameters'}; + return () unless @{$self->{'.parameters'}}; + return @{$self->{'.parameters'}}; +} + + + +#### Method as_string +# +# synonym for "dump" +#### +sub as_string { + &dump(@_); +} + +sub AUTOLOAD { + print STDERR "CGI::AUTOLOAD for $AUTOLOAD\n" if $CGI::AUTOLOAD_DEBUG; + my($func) = $AUTOLOAD; + my($pack,$func_name) = $func=~/(.+)::([^:]+)$/; + $pack = ${"$pack\:\:AutoloadClass"} || $CGI::DefaultClass + unless defined(${"$pack\:\:AUTOLOADED_ROUTINES"}); + + my($sub) = \%{"$pack\:\:SUBS"}; + unless (%$sub) { + my($auto) = \${"$pack\:\:AUTOLOADED_ROUTINES"}; + eval "package $pack; $$auto"; + die $@ if $@; + } + my($code) = $sub->{$func_name}; + + $code = "sub $AUTOLOAD { }" if (!$code and $func_name eq 'DESTROY'); + if (!$code) { + if ($EXPORT{':any'} || + $EXPORT{$func_name} || + (%EXPORT_OK || grep(++$EXPORT_OK{$_},&expand_tags(':html'))) + && $EXPORT_OK{$func_name}) { + $code = $sub->{'HTML_FUNC'}; + $code=~s/func_name/$func_name/mg; + } + } + die "Undefined subroutine $AUTOLOAD\n" unless $code; + eval "package $pack; $code"; + if ($@) { + $@ =~ s/ at .*\n//; + die $@; + } + goto &{"$pack\:\:$func_name"}; +} + +# PRIVATE SUBROUTINE +# Smart rearrangement of parameters to allow named parameter +# calling. We do the rearangement if: +# 1. The first parameter begins with a - +# 2. The use_named_parameters() method returns true +sub rearrange { + my($self,$order,@param) = @_; + return () unless @param; + + return @param unless (defined($param[0]) && substr($param[0],0,1) eq '-') + || $self->use_named_parameters; + + my $i; + for ($i=0;$i<@param;$i+=2) { + $param[$i]=~s/^\-//; # get rid of initial - if present + $param[$i]=~tr/a-z/A-Z/; # parameters are upper case + } + + my(%param) = @param; # convert into associative array + my(@return_array); + + my($key)=''; + foreach $key (@$order) { + my($value); + # this is an awful hack to fix spurious warnings when the + # -w switch is set. + if (ref($key) && ref($key) eq 'ARRAY') { + foreach (@$key) { + last if defined($value); + $value = $param{$_}; + delete $param{$_}; + } + } else { + $value = $param{$key}; + delete $param{$key}; + } + push(@return_array,$value); + } + push (@return_array,$self->make_attributes(\%param)) if %param; + return (@return_array); +} + +############################################################################### +################# THESE FUNCTIONS ARE AUTOLOADED ON DEMAND #################### +############################################################################### +$AUTOLOADED_ROUTINES = ''; # get rid of -w warning +$AUTOLOADED_ROUTINES=<<'END_OF_AUTOLOAD'; + +%SUBS = ( + +'URL_ENCODED'=> <<'END_OF_FUNC', +sub URL_ENCODED { 'application/x-www-form-urlencoded'; } +END_OF_FUNC + +'MULTIPART' => <<'END_OF_FUNC', +sub MULTIPART { 'multipart/form-data'; } +END_OF_FUNC + +'HTML_FUNC' => <<'END_OF_FUNC', +sub func_name { + + # handle various cases in which we're called + # most of this bizarre stuff is to avoid -w errors + shift if $_[0] && + (!ref($_[0]) && $_[0] eq $CGI::DefaultClass) || + (ref($_[0]) && + (substr(ref($_[0]),0,3) eq 'CGI' || + eval "\$_[0]->isaCGI()")); + + my($attr) = ''; + if (ref($_[0]) && ref($_[0]) eq 'HASH') { + my(@attr) = CGI::make_attributes('',shift); + $attr = " @attr" if @attr; + } + my($tag,$untag) = ("\U","\U\E"); + return $tag unless @_; + if (ref($_[0]) eq 'ARRAY') { + my(@r); + foreach (@{$_[0]}) { + push(@r,"$tag$_$untag"); + } + return "@r"; + } else { + return "$tag@_$untag"; + } +} +END_OF_FUNC + +#### Method: keywords +# Keywords acts a bit differently. Calling it in a list context +# returns the list of keywords. +# Calling it in a scalar context gives you the size of the list. +#### +'keywords' => <<'END_OF_FUNC', +sub keywords { + my($self,@values) = self_or_default(@_); + # If values is provided, then we set it. + $self->{'keywords'}=[@values] if @values; + my(@result) = @{$self->{'keywords'}}; + @result; +} +END_OF_FUNC + +# These are some tie() interfaces for compatibility +# with Steve Brenner's cgi-lib.pl routines +'ReadParse' => <<'END_OF_FUNC', +sub ReadParse { + local(*in); + if (@_) { + *in = $_[0]; + } else { + my $pkg = caller(); + *in=*{"${pkg}::in"}; + } + tie(%in,CGI); +} +END_OF_FUNC + +'PrintHeader' => <<'END_OF_FUNC', +sub PrintHeader { + my($self) = self_or_default(@_); + return $self->header(); +} +END_OF_FUNC + +'HtmlTop' => <<'END_OF_FUNC', +sub HtmlTop { + my($self,@p) = self_or_default(@_); + return $self->start_html(@p); +} +END_OF_FUNC + +'HtmlBot' => <<'END_OF_FUNC', +sub HtmlBot { + my($self,@p) = self_or_default(@_); + return $self->end_html(@p); +} +END_OF_FUNC + +'SplitParam' => <<'END_OF_FUNC', +sub SplitParam { + my ($param) = @_; + my (@params) = split ("\0", $param); + return (wantarray ? @params : $params[0]); +} +END_OF_FUNC + +'MethGet' => <<'END_OF_FUNC', +sub MethGet { + return request_method() eq 'GET'; +} +END_OF_FUNC + +'MethPost' => <<'END_OF_FUNC', +sub MethPost { + return request_method() eq 'POST'; +} +END_OF_FUNC + +'TIEHASH' => <<'END_OF_FUNC', +sub TIEHASH { + return new CGI; +} +END_OF_FUNC + +'STORE' => <<'END_OF_FUNC', +sub STORE { + $_[0]->param($_[1],split("\0",$_[2])); +} +END_OF_FUNC + +'FETCH' => <<'END_OF_FUNC', +sub FETCH { + return $_[0] if $_[1] eq 'CGI'; + return undef unless defined $_[0]->param($_[1]); + return join("\0",$_[0]->param($_[1])); +} +END_OF_FUNC + +'FIRSTKEY' => <<'END_OF_FUNC', +sub FIRSTKEY { + $_[0]->{'.iterator'}=0; + $_[0]->{'.parameters'}->[$_[0]->{'.iterator'}++]; +} +END_OF_FUNC + +'NEXTKEY' => <<'END_OF_FUNC', +sub NEXTKEY { + $_[0]->{'.parameters'}->[$_[0]->{'.iterator'}++]; +} +END_OF_FUNC + +'EXISTS' => <<'END_OF_FUNC', +sub EXISTS { + exists $_[0]->{$_[1]}; +} +END_OF_FUNC + +'DELETE' => <<'END_OF_FUNC', +sub DELETE { + $_[0]->delete($_[1]); +} +END_OF_FUNC + +'CLEAR' => <<'END_OF_FUNC', +sub CLEAR { + %{$_[0]}=(); +} +#### +END_OF_FUNC + +#### +# Append a new value to an existing query +#### +'append' => <<'EOF', +sub append { + my($self,@p) = @_; + my($name,$value) = $self->rearrange([NAME,[VALUE,VALUES]],@p); + my(@values) = defined($value) ? (ref($value) ? @{$value} : $value) : (); + if (@values) { + $self->add_parameter($name); + push(@{$self->{$name}},@values); + } + return $self->param($name); +} +EOF + +#### Method: delete_all +# Delete all parameters +#### +'delete_all' => <<'EOF', +sub delete_all { + my($self) = self_or_default(@_); + undef %{$self}; +} +EOF + +#### Method: autoescape +# If you want to turn off the autoescaping features, +# call this method with undef as the argument +'autoEscape' => <<'END_OF_FUNC', +sub autoEscape { + my($self,$escape) = self_or_default(@_); + $self->{'dontescape'}=!$escape; +} +END_OF_FUNC + + +#### Method: version +# Return the current version +#### +'version' => <<'END_OF_FUNC', +sub version { + return $VERSION; +} +END_OF_FUNC + +'make_attributes' => <<'END_OF_FUNC', +sub make_attributes { + my($self,$attr) = @_; + return () unless $attr && ref($attr) && ref($attr) eq 'HASH'; + my(@att); + foreach (keys %{$attr}) { + my($key) = $_; + $key=~s/^\-//; # get rid of initial - if present + $key=~tr/a-z/A-Z/; # parameters are upper case + push(@att,$attr->{$_} ne '' ? qq/$key="$attr->{$_}"/ : qq/$key/); + } + return @att; +} +END_OF_FUNC + +#### Method: dump +# Returns a string in which all the known parameter/value +# pairs are represented as nested lists, mainly for the purposes +# of debugging. +#### +'dump' => <<'END_OF_FUNC', +sub dump { + my($self) = self_or_default(@_); + my($param,$value,@result); + return '
      ' unless $self->param; + push(@result,"
        "); + foreach $param ($self->param) { + my($name)=$self->escapeHTML($param); + push(@result,"
      • $param"); + push(@result,"
          "); + foreach $value ($self->param($param)) { + $value = $self->escapeHTML($value); + push(@result,"
        • $value"); + } + push(@result,"
        "); + } + push(@result,"
      \n"); + return join("\n",@result); +} +END_OF_FUNC + + +#### Method: save +# Write values out to a filehandle in such a way that they can +# be reinitialized by the filehandle form of the new() method +#### +'save' => <<'END_OF_FUNC', +sub save { + my($self,$filehandle) = self_or_default(@_); + my($param); + my($package) = caller; +# Check that this still works! +# $filehandle = $filehandle=~/[':]/ ? $filehandle : "$package\:\:$filehandle"; + $filehandle = to_filehandle($filehandle); + foreach $param ($self->param) { + my($escaped_param) = &escape($param); + my($value); + foreach $value ($self->param($param)) { + print $filehandle "$escaped_param=",escape($value),"\n"; + } + } + print $filehandle "=\n"; # end of record +} +END_OF_FUNC + + +#### Method: header +# Return a Content-Type: style header +# +#### +'header' => <<'END_OF_FUNC', +sub header { + my($self,@p) = self_or_default(@_); + my(@header); + + my($type,$status,$cookie,$target,$expires,$nph,@other) = + $self->rearrange([TYPE,STATUS,[COOKIE,COOKIES],TARGET,EXPIRES,NPH],@p); + + # rearrange() was designed for the HTML portion, so we + # need to fix it up a little. + foreach (@other) { + next unless my($header,$value) = /([^\s=]+)=(.+)/; + substr($header,1,1000)=~tr/A-Z/a-z/; + ($value)=$value=~/^"(.*)"$/; + $_ = "$header: $value"; + } + + $type = $type || 'text/html'; + + push(@header,'HTTP/1.0 ' . ($status || '200 OK')) if $nph || $NPH; + push(@header,"Status: $status") if $status; + push(@header,"Window-target: $target") if $target; + # push all the cookies -- there may be several + if ($cookie) { + my(@cookie) = ref($cookie) ? @{$cookie} : $cookie; + foreach (@cookie) { + push(@header,"Set-cookie: $_"); + } + } + # if the user indicates an expiration time, then we need + # both an Expires and a Date header (so that the browser is + # uses OUR clock) + push(@header,"Expires: " . &expires($expires)) if $expires; + push(@header,"Date: " . &expires(0)) if $expires; + push(@header,"Pragma: no-cache") if $self->cache(); + push(@header,@other); + push(@header,"Content-type: $type"); + + my $header = join($CRLF,@header); + return $header . "${CRLF}${CRLF}"; +} +END_OF_FUNC + + +#### Method: cache +# Control whether header() will produce the no-cache +# Pragma directive. +#### +'cache' => <<'END_OF_FUNC', +sub cache { + my($self,$new_value) = self_or_default(@_); + $new_value = '' unless $new_value; + if ($new_value ne '') { + $self->{'cache'} = $new_value; + } + return $self->{'cache'}; +} +END_OF_FUNC + + +#### Method: redirect +# Return a Location: style header +# +#### +'redirect' => <<'END_OF_FUNC', +sub redirect { + my($self,@p) = self_or_default(@_); + my($url,$target,$cookie,$nph,@other) = $self->rearrange([[URI,URL],TARGET,COOKIE,NPH],@p); + $url = $url || $self->self_url; + my(@o); + foreach (@other) { push(@o,split("=")); } + push(@o, + '-Status'=>'302 Found', + '-Location'=>$url, + '-URI'=>$url, + '-nph'=>($nph||$NPH)); + push(@o,'-Target'=>$target) if $target; + push(@o,'-Cookie'=>$cookie) if $cookie; + return $self->header(@o); +} +END_OF_FUNC + + +#### Method: start_html +# Canned HTML header +# +# Parameters: +# $title -> (optional) The title for this HTML document (-title) +# $author -> (optional) e-mail address of the author (-author) +# $base -> (optional) if set to true, will enter the BASE address of this document +# for resolving relative references (-base) +# $xbase -> (optional) alternative base at some remote location (-xbase) +# $target -> (optional) target window to load all links into (-target) +# $script -> (option) Javascript code (-script) +# $meta -> (optional) Meta information tags +# @other -> (optional) any other named parameters you'd like to incorporate into +# the tag. +#### +'start_html' => <<'END_OF_FUNC', +sub start_html { + my($self,@p) = &self_or_default(@_); + my($title,$author,$base,$xbase,$script,$target,$meta,@other) = + $self->rearrange([TITLE,AUTHOR,BASE,XBASE,SCRIPT,TARGET,META],@p); + + # strangely enough, the title needs to be escaped as HTML + # while the author needs to be escaped as a URL + $title = $self->escapeHTML($title || 'Untitled Document'); + $author = $self->escapeHTML($author); + my(@result); + push(@result,''); + push(@result,"$title"); + push(@result,"") if $author; + + if ($base || $xbase || $target) { + my $href = $xbase || $self->url(); + my $t = $target ? qq/ TARGET="$target"/ : ''; + push(@result,qq//); + } + + if ($meta && ref($meta) && (ref($meta) eq 'HASH')) { + foreach (keys %$meta) { push(@result,qq()); } + } + push(@result,< + + +END + ; + my($other) = @other ? " @other" : ''; + push(@result,""); + return join("\n",@result); +} +END_OF_FUNC + + +#### Method: end_html +# End an HTML document. +# Trivial method for completeness. Just returns "" +#### +'end_html' => <<'END_OF_FUNC', +sub end_html { + return ""; +} +END_OF_FUNC + + +################################ +# METHODS USED IN BUILDING FORMS +################################ + +#### Method: isindex +# Just prints out the isindex tag. +# Parameters: +# $action -> optional URL of script to run +# Returns: +# A string containing a tag +'isindex' => <<'END_OF_FUNC', +sub isindex { + my($self,@p) = self_or_default(@_); + my($action,@other) = $self->rearrange([ACTION],@p); + $action = qq/ACTION="$action"/ if $action; + my($other) = @other ? " @other" : ''; + return ""; +} +END_OF_FUNC + + +#### Method: startform +# Start a form +# Parameters: +# $method -> optional submission method to use (GET or POST) +# $action -> optional URL of script to run +# $enctype ->encoding to use (URL_ENCODED or MULTIPART) +'startform' => <<'END_OF_FUNC', +sub startform { + my($self,@p) = self_or_default(@_); + + my($method,$action,$enctype,@other) = + $self->rearrange([METHOD,ACTION,ENCTYPE],@p); + + $method = $method || 'POST'; + $enctype = $enctype || &URL_ENCODED; + $action = $action ? qq/ACTION="$action"/ : $method eq 'GET' ? + 'ACTION="'.$self->script_name.'"' : ''; + my($other) = @other ? " @other" : ''; + $self->{'.parametersToAdd'}={}; + return qq/
      \n/; +} +END_OF_FUNC + + +#### Method: start_form +# synonym for startform +'start_form' => <<'END_OF_FUNC', +sub start_form { + &startform; +} +END_OF_FUNC + + +#### Method: start_multipart_form +# synonym for startform +'start_multipart_form' => <<'END_OF_FUNC', +sub start_multipart_form { + my($self,@p) = self_or_default(@_); + if ($self->use_named_parameters || + (defined($param[0]) && substr($param[0],0,1) eq '-')) { + my(%p) = @p; + $p{'-enctype'}=&MULTIPART; + return $self->startform(%p); + } else { + my($method,$action,@other) = + $self->rearrange([METHOD,ACTION],@p); + return $self->startform($method,$action,&MULTIPART,@other); + } +} +END_OF_FUNC + + +#### Method: endform +# End a form +'endform' => <<'END_OF_FUNC', +sub endform { + my($self,@p) = self_or_default(@_); + return ($self->get_fields,"
      "); +} +END_OF_FUNC + + +#### Method: end_form +# synonym for endform +'end_form' => <<'END_OF_FUNC', +sub end_form { + &endform; +} +END_OF_FUNC + + +#### Method: textfield +# Parameters: +# $name -> Name of the text field +# $default -> Optional default value of the field if not +# already defined. +# $size -> Optional width of field in characaters. +# $maxlength -> Optional maximum number of characters. +# Returns: +# A string containing a field +# +'textfield' => <<'END_OF_FUNC', +sub textfield { + my($self,@p) = self_or_default(@_); + my($name,$default,$size,$maxlength,$override,@other) = + $self->rearrange([NAME,[DEFAULT,VALUE],SIZE,MAXLENGTH,[OVERRIDE,FORCE]],@p); + + my $current = $override ? $default : + (defined($self->param($name)) ? $self->param($name) : $default); + + $current = defined($current) ? $self->escapeHTML($current) : ''; + $name = defined($name) ? $self->escapeHTML($name) : ''; + my($s) = defined($size) ? qq/ SIZE=$size/ : ''; + my($m) = defined($maxlength) ? qq/ MAXLENGTH=$maxlength/ : ''; + my($other) = @other ? " @other" : ''; + return qq//; +} +END_OF_FUNC + + +#### Method: filefield +# Parameters: +# $name -> Name of the file upload field +# $size -> Optional width of field in characaters. +# $maxlength -> Optional maximum number of characters. +# Returns: +# A string containing a field +# +'filefield' => <<'END_OF_FUNC', +sub filefield { + my($self,@p) = self_or_default(@_); + + my($name,$default,$size,$maxlength,$override,@other) = + $self->rearrange([NAME,[DEFAULT,VALUE],SIZE,MAXLENGTH,[OVERRIDE,FORCE]],@p); + + $current = $override ? $default : + (defined($self->param($name)) ? $self->param($name) : $default); + + $name = defined($name) ? $self->escapeHTML($name) : ''; + my($s) = defined($size) ? qq/ SIZE=$size/ : ''; + my($m) = defined($maxlength) ? qq/ MAXLENGTH=$maxlength/ : ''; + $current = defined($current) ? $self->escapeHTML($current) : ''; + $other = ' ' . join(" ",@other); + return qq//; +} +END_OF_FUNC + + +#### Method: password +# Create a "secret password" entry field +# Parameters: +# $name -> Name of the field +# $default -> Optional default value of the field if not +# already defined. +# $size -> Optional width of field in characters. +# $maxlength -> Optional maximum characters that can be entered. +# Returns: +# A string containing a field +# +'password_field' => <<'END_OF_FUNC', +sub password_field { + my ($self,@p) = self_or_default(@_); + + my($name,$default,$size,$maxlength,$override,@other) = + $self->rearrange([NAME,[DEFAULT,VALUE],SIZE,MAXLENGTH,[OVERRIDE,FORCE]],@p); + + my($current) = $override ? $default : + (defined($self->param($name)) ? $self->param($name) : $default); + + $name = defined($name) ? $self->escapeHTML($name) : ''; + $current = defined($current) ? $self->escapeHTML($current) : ''; + my($s) = defined($size) ? qq/ SIZE=$size/ : ''; + my($m) = defined($maxlength) ? qq/ MAXLENGTH=$maxlength/ : ''; + my($other) = @other ? " @other" : ''; + return qq//; +} +END_OF_FUNC + + +#### Method: textarea +# Parameters: +# $name -> Name of the text field +# $default -> Optional default value of the field if not +# already defined. +# $rows -> Optional number of rows in text area +# $columns -> Optional number of columns in text area +# Returns: +# A string containing a tag +# +'textarea' => <<'END_OF_FUNC', +sub textarea { + my($self,@p) = self_or_default(@_); + + my($name,$default,$rows,$cols,$override,@other) = + $self->rearrange([NAME,[DEFAULT,VALUE],ROWS,[COLS,COLUMNS],[OVERRIDE,FORCE]],@p); + + my($current)= $override ? $default : + (defined($self->param($name)) ? $self->param($name) : $default); + + $name = defined($name) ? $self->escapeHTML($name) : ''; + $current = defined($current) ? $self->escapeHTML($current) : ''; + my($r) = $rows ? " ROWS=$rows" : ''; + my($c) = $cols ? " COLS=$cols" : ''; + my($other) = @other ? " @other" : ''; + return qq{}; +} +END_OF_FUNC + + +#### Method: button +# Create a javascript button. +# Parameters: +# $name -> (optional) Name for the button. (-name) +# $value -> (optional) Value of the button when selected (and visible name) (-value) +# $onclick -> (optional) Text of the JavaScript to run when the button is +# clicked. +# Returns: +# A string containing a tag +#### +'button' => <<'END_OF_FUNC', +sub button { + my($self,@p) = self_or_default(@_); + + my($label,$value,$script,@other) = $self->rearrange([NAME,[VALUE,LABEL], + [ONCLICK,SCRIPT]],@p); + + $label=$self->escapeHTML($label); + $value=$self->escapeHTML($value); + $script=$self->escapeHTML($script); + + my($name) = ''; + $name = qq/ NAME="$label"/ if $label; + $value = $value || $label; + my($val) = ''; + $val = qq/ VALUE="$value"/ if $value; + $script = qq/ ONCLICK="$script"/ if $script; + my($other) = @other ? " @other" : ''; + return qq//; +} +END_OF_FUNC + + +#### Method: submit +# Create a "submit query" button. +# Parameters: +# $name -> (optional) Name for the button. +# $value -> (optional) Value of the button when selected (also doubles as label). +# $label -> (optional) Label printed on the button(also doubles as the value). +# Returns: +# A string containing a tag +#### +'submit' => <<'END_OF_FUNC', +sub submit { + my($self,@p) = self_or_default(@_); + + my($label,$value,@other) = $self->rearrange([NAME,[VALUE,LABEL]],@p); + + $label=$self->escapeHTML($label); + $value=$self->escapeHTML($value); + + my($name) = ' NAME=".submit"'; + $name = qq/ NAME="$label"/ if $label; + $value = $value || $label; + my($val) = ''; + $val = qq/ VALUE="$value"/ if defined($value); + my($other) = @other ? " @other" : ''; + return qq//; +} +END_OF_FUNC + + +#### Method: reset +# Create a "reset" button. +# Parameters: +# $name -> (optional) Name for the button. +# Returns: +# A string containing a tag +#### +'reset' => <<'END_OF_FUNC', +sub reset { + my($self,@p) = self_or_default(@_); + my($label,@other) = $self->rearrange([NAME],@p); + $label=$self->escapeHTML($label); + my($value) = defined($label) ? qq/ VALUE="$label"/ : ''; + my($other) = @other ? " @other" : ''; + return qq//; +} +END_OF_FUNC + + +#### Method: defaults +# Create a "defaults" button. +# Parameters: +# $name -> (optional) Name for the button. +# Returns: +# A string containing a tag +# +# Note: this button has a special meaning to the initialization script, +# and tells it to ERASE the current query string so that your defaults +# are used again! +#### +'defaults' => <<'END_OF_FUNC', +sub defaults { + my($self,@p) = self_or_default(@_); + + my($label,@other) = $self->rearrange([[NAME,VALUE]],@p); + + $label=$self->escapeHTML($label); + $label = $label || "Defaults"; + my($value) = qq/ VALUE="$label"/; + my($other) = @other ? " @other" : ''; + return qq//; +} +END_OF_FUNC + + +#### Method: checkbox +# Create a checkbox that is not logically linked to any others. +# The field value is "on" when the button is checked. +# Parameters: +# $name -> Name of the checkbox +# $checked -> (optional) turned on by default if true +# $value -> (optional) value of the checkbox, 'on' by default +# $label -> (optional) a user-readable label printed next to the box. +# Otherwise the checkbox name is used. +# Returns: +# A string containing a field +#### +'checkbox' => <<'END_OF_FUNC', +sub checkbox { + my($self,@p) = self_or_default(@_); + + my($name,$checked,$value,$label,$override,@other) = + $self->rearrange([NAME,[CHECKED,SELECTED,ON],VALUE,LABEL,[OVERRIDE,FORCE]],@p); + + if (!$override && defined($self->param($name))) { + $value = $self->param($name) unless defined $value; + $checked = $self->param($name) eq $value ? ' CHECKED' : ''; + } else { + $checked = $checked ? ' CHECKED' : ''; + $value = defined $value ? $value : 'on'; + } + my($the_label) = defined $label ? $label : $name; + $name = $self->escapeHTML($name); + $value = $self->escapeHTML($value); + $the_label = $self->escapeHTML($the_label); + my($other) = @other ? " @other" : ''; + $self->register_parameter($name); + return <$the_label +END +} +END_OF_FUNC + + +#### Method: checkbox_group +# Create a list of logically-linked checkboxes. +# Parameters: +# $name -> Common name for all the check boxes +# $values -> A pointer to a regular array containing the +# values for each checkbox in the group. +# $defaults -> (optional) +# 1. If a pointer to a regular array of checkbox values, +# then this will be used to decide which +# checkboxes to turn on by default. +# 2. If a scalar, will be assumed to hold the +# value of a single checkbox in the group to turn on. +# $linebreak -> (optional) Set to true to place linebreaks +# between the buttons. +# $labels -> (optional) +# A pointer to an associative array of labels to print next to each checkbox +# in the form $label{'value'}="Long explanatory label". +# Otherwise the provided values are used as the labels. +# Returns: +# An ARRAY containing a series of fields +#### +'checkbox_group' => <<'END_OF_FUNC', +sub checkbox_group { + my($self,@p) = self_or_default(@_); + + my($name,$values,$defaults,$linebreak,$labels,$rows,$columns, + $rowheaders,$colheaders,$override,$nolabels,@other) = + $self->rearrange([NAME,[VALUES,VALUE],[DEFAULTS,DEFAULT], + LINEBREAK,LABELS,ROWS,[COLUMNS,COLS], + ROWHEADERS,COLHEADERS, + [OVERRIDE,FORCE],NOLABELS],@p); + + my($checked,$break,$result,$label); + + my(%checked) = $self->previous_or_default($name,$defaults,$override); + + $break = $linebreak ? "
      " : ''; + $name=$self->escapeHTML($name); + + # Create the elements + my(@elements); + my(@values) = $values ? @$values : $self->param($name); + my($other) = @other ? " @other" : ''; + foreach (@values) { + $checked = $checked{$_} ? ' CHECKED' : ''; + $label = ''; + unless (defined($nolabels) && $nolabels) { + $label = $_; + $label = $labels->{$_} if defined($labels) && $labels->{$_}; + $label = $self->escapeHTML($label); + } + $_ = $self->escapeHTML($_); + push(@elements,qq/${label} ${break}/); + } + $self->register_parameter($name); + return wantarray ? @elements : join('',@elements) unless $columns; + return _tableize($rows,$columns,$rowheaders,$colheaders,@elements); +} +END_OF_FUNC + + +# Escape HTML -- used internally +'escapeHTML' => <<'END_OF_FUNC', +sub escapeHTML { + my($self,$toencode) = @_; + return undef unless defined($toencode); + return $toencode if $self->{'dontescape'}; + $toencode=~s/&/&/g; + $toencode=~s/\"/"/g; + $toencode=~s/>/>/g; + $toencode=~s/ <<'END_OF_FUNC', +sub _tableize { + my($rows,$columns,$rowheaders,$colheaders,@elements) = @_; + my($result); + + $rows = int(0.99 + @elements/$columns) unless $rows; + # rearrange into a pretty table + $result = ""; + my($row,$column); + unshift(@$colheaders,'') if @$colheaders && @$rowheaders; + $result .= "" if @{$colheaders}; + foreach (@{$colheaders}) { + $result .= ""; + } + for ($row=0;$row<$rows;$row++) { + $result .= ""; + $result .= "" if @$rowheaders; + for ($column=0;$column<$columns;$column++) { + $result .= ""; + } + $result .= ""; + } + $result .= "
      $_
      $rowheaders->[$row]" . $elements[$column*$rows + $row] . "
      "; + return $result; +} +END_OF_FUNC + + +#### Method: radio_group +# Create a list of logically-linked radio buttons. +# Parameters: +# $name -> Common name for all the buttons. +# $values -> A pointer to a regular array containing the +# values for each button in the group. +# $default -> (optional) Value of the button to turn on by default. Pass '-' +# to turn _nothing_ on. +# $linebreak -> (optional) Set to true to place linebreaks +# between the buttons. +# $labels -> (optional) +# A pointer to an associative array of labels to print next to each checkbox +# in the form $label{'value'}="Long explanatory label". +# Otherwise the provided values are used as the labels. +# Returns: +# An ARRAY containing a series of fields +#### +'radio_group' => <<'END_OF_FUNC', +sub radio_group { + my($self,@p) = self_or_default(@_); + + my($name,$values,$default,$linebreak,$labels, + $rows,$columns,$rowheaders,$colheaders,$override,$nolabels,@other) = + $self->rearrange([NAME,[VALUES,VALUE],DEFAULT,LINEBREAK,LABELS, + ROWS,[COLUMNS,COLS], + ROWHEADERS,COLHEADERS, + [OVERRIDE,FORCE],NOLABELS],@p); + my($result,$checked); + + if (!$override && defined($self->param($name))) { + $checked = $self->param($name); + } else { + $checked = $default; + } + # If no check array is specified, check the first by default + $checked = $values->[0] unless $checked; + $name=$self->escapeHTML($name); + + my(@elements); + my(@values) = $values ? @$values : $self->param($name); + my($other) = @other ? " @other" : ''; + foreach (@values) { + my($checkit) = $checked eq $_ ? ' CHECKED' : ''; + my($break) = $linebreak ? '
      ' : ''; + my($label)=''; + unless (defined($nolabels) && $nolabels) { + $label = $_; + $label = $labels->{$_} if defined($labels) && $labels->{$_}; + $label = $self->escapeHTML($label); + } + $_=$self->escapeHTML($_); + push(@elements,qq/${label} ${break}/); + } + $self->register_parameter($name); + return wantarray ? @elements : join('',@elements) unless $columns; + return _tableize($rows,$columns,$rowheaders,$colheaders,@elements); +} +END_OF_FUNC + + +#### Method: popup_menu +# Create a popup menu. +# Parameters: +# $name -> Name for all the menu +# $values -> A pointer to a regular array containing the +# text of each menu item. +# $default -> (optional) Default item to display +# $labels -> (optional) +# A pointer to an associative array of labels to print next to each checkbox +# in the form $label{'value'}="Long explanatory label". +# Otherwise the provided values are used as the labels. +# Returns: +# A string containing the definition of a popup menu. +#### +'popup_menu' => <<'END_OF_FUNC', +sub popup_menu { + my($self,@p) = self_or_default(@_); + + my($name,$values,$default,$labels,$override,@other) = + $self->rearrange([NAME,[VALUES,VALUE],[DEFAULT,DEFAULTS],LABELS,[OVERRIDE,FORCE]],@p); + my($result,$selected); + + if (!$override && defined($self->param($name))) { + $selected = $self->param($name); + } else { + $selected = $default; + } + $name=$self->escapeHTML($name); + my($other) = @other ? " @other" : ''; + + my(@values) = $values ? @$values : $self->param($name); + $result = qq/\n"; + return $result; +} +END_OF_FUNC + + +#### Method: scrolling_list +# Create a scrolling list. +# Parameters: +# $name -> name for the list +# $values -> A pointer to a regular array containing the +# values for each option line in the list. +# $defaults -> (optional) +# 1. If a pointer to a regular array of options, +# then this will be used to decide which +# lines to turn on by default. +# 2. Otherwise holds the value of the single line to turn on. +# $size -> (optional) Size of the list. +# $multiple -> (optional) If set, allow multiple selections. +# $labels -> (optional) +# A pointer to an associative array of labels to print next to each checkbox +# in the form $label{'value'}="Long explanatory label". +# Otherwise the provided values are used as the labels. +# Returns: +# A string containing the definition of a scrolling list. +#### +'scrolling_list' => <<'END_OF_FUNC', +sub scrolling_list { + my($self,@p) = self_or_default(@_); + my($name,$values,$defaults,$size,$multiple,$labels,$override,@other) + = $self->rearrange([NAME,[VALUES,VALUE],[DEFAULTS,DEFAULT], + SIZE,MULTIPLE,LABELS,[OVERRIDE,FORCE]],@p); + + my($result); + my(@values) = $values ? @$values : $self->param($name); + $size = $size || scalar(@values); + + my(%selected) = $self->previous_or_default($name,$defaults,$override); + my($is_multiple) = $multiple ? ' MULTIPLE' : ''; + my($has_size) = $size ? " SIZE=$size" : ''; + my($other) = @other ? " @other" : ''; + + $name=$self->escapeHTML($name); + $result = qq/\n"; + $self->register_parameter($name); + return $result; +} +END_OF_FUNC + + +#### Method: hidden +# Parameters: +# $name -> Name of the hidden field +# @default -> (optional) Initial values of field (may be an array) +# or +# $default->[initial values of field] +# Returns: +# A string containing a +#### +'hidden' => <<'END_OF_FUNC', +sub hidden { + my($self,@p) = self_or_default(@_); + + # this is the one place where we departed from our standard + # calling scheme, so we have to special-case (darn) + my(@result,@value); + my($name,$default,$override,@other) = + $self->rearrange([NAME,[DEFAULT,VALUE,VALUES],[OVERRIDE,FORCE]],@p); + + my $do_override = 0; + if ( substr($p[0],0,1) eq '-' || $self->use_named_parameters ) { + @value = ref($default) ? @{$default} : $default; + $do_override = $override; + } else { + foreach ($default,$override,@other) { + push(@value,$_) if defined($_); + } + } + + # use previous values if override is not set + my @prev = $self->param($name); + @value = @prev if !$do_override && @prev; + + $name=$self->escapeHTML($name); + foreach (@value) { + $_=$self->escapeHTML($_); + push(@result,qq//); + } + return wantarray ? @result : join('',@result); +} +END_OF_FUNC + + +#### Method: image_button +# Parameters: +# $name -> Name of the button +# $src -> URL of the image source +# $align -> Alignment style (TOP, BOTTOM or MIDDLE) +# Returns: +# A string containing a +#### +'image_button' => <<'END_OF_FUNC', +sub image_button { + my($self,@p) = self_or_default(@_); + + my($name,$src,$alignment,@other) = + $self->rearrange([NAME,SRC,ALIGN],@p); + + my($align) = $alignment ? " ALIGN=\U$alignment" : ''; + my($other) = @other ? " @other" : ''; + $name=$self->escapeHTML($name); + return qq//; +} +END_OF_FUNC + + +#### Method: self_url +# Returns a URL containing the current script and all its +# param/value pairs arranged as a query. You can use this +# to create a link that, when selected, will reinvoke the +# script with all its state information preserved. +#### +'self_url' => <<'END_OF_FUNC', +sub self_url { + my($self) = self_or_default(@_); + my($query_string) = $self->query_string; + my $protocol = $self->protocol(); + my $name = "$protocol://" . $self->server_name; + $name .= ":" . $self->server_port + unless $self->server_port == 80; + $name .= $self->script_name; + $name .= $self->path_info if $self->path_info; + return $name unless $query_string; + return "$name?$query_string"; +} +END_OF_FUNC + + +# This is provided as a synonym to self_url() for people unfortunate +# enough to have incorporated it into their programs already! +'state' => <<'END_OF_FUNC', +sub state { + &self_url; +} +END_OF_FUNC + + +#### Method: url +# Like self_url, but doesn't return the query string part of +# the URL. +#### +'url' => <<'END_OF_FUNC', +sub url { + my($self) = self_or_default(@_); + my $protocol = $self->protocol(); + my $name = "$protocol://" . $self->server_name; + $name .= ":" . $self->server_port + unless $self->server_port == 80; + $name .= $self->script_name; + return $name; +} + +END_OF_FUNC + +#### Method: cookie +# Set or read a cookie from the specified name. +# Cookie can then be passed to header(). +# Usual rules apply to the stickiness of -value. +# Parameters: +# -name -> name for this cookie (optional) +# -value -> value of this cookie (scalar, array or hash) +# -path -> paths for which this cookie is valid (optional) +# -domain -> internet domain in which this cookie is valid (optional) +# -secure -> if true, cookie only passed through secure channel (optional) +# -expires -> expiry date in format Wdy, DD-Mon-YY HH:MM:SS GMT (optional) +#### +'cookie' => <<'END_OF_FUNC', +# temporary, for debugging. +sub cookie { + my($self,@p) = self_or_default(@_); + my($name,$value,$path,$domain,$secure,$expires) = + $self->rearrange([NAME,[VALUE,VALUES],PATH,DOMAIN,SECURE,EXPIRES],@p); + + + # if no value is supplied, then we retrieve the + # value of the cookie, if any. For efficiency, we cache the parsed + # cookie in our state variables. + unless (defined($value)) { + unless ($self->{'.cookies'}) { + my(@pairs) = split("; ",$self->raw_cookie); + foreach (@pairs) { + my($key,$value) = split("="); + my(@values) = map unescape($_),split('&',$value); + $self->{'.cookies'}->{unescape($key)} = [@values]; + } + } + + # If no name is supplied, then retrieve the names of all our cookies. + return () unless $self->{'.cookies'}; + return wantarray ? @{$self->{'.cookies'}->{$name}} : $self->{'.cookies'}->{$name}->[0] + if defined($name) && $name ne ''; + return keys %{$self->{'.cookies'}}; + } + my(@values); + + # Pull out our parameters. + if (ref($value)) { + if (ref($value) eq 'ARRAY') { + @values = @$value; + } elsif (ref($value) eq 'HASH') { + @values = %$value; + } + } else { + @values = ($value); + } + @values = map escape($_),@values; + + # I.E. requires the path to be present. + ($path = $ENV{'SCRIPT_NAME'})=~s![^/]+$!! unless $path; + + my(@constant_values); + push(@constant_values,"domain=$domain") if $domain; + push(@constant_values,"path=$path") if $path; + push(@constant_values,"expires=".&expires($expires)) if $expires; + push(@constant_values,'secure') if $secure; + + my($key) = &escape($name); + my($cookie) = join("=",$key,join("&",@values)); + return join("; ",$cookie,@constant_values); +} +END_OF_FUNC + + +# This internal routine creates an expires string exactly some number of +# hours from the current time in GMT. This is the format +# required by Netscape cookies, and I think it works for the HTTP +# Expires: header as well. +'expires' => <<'END_OF_FUNC', +sub expires { + my($time) = @_; + my(@MON)=qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/; + my(@WDAY) = qw/Sunday Monday Tuesday Wednesday Thursday Friday Saturday/; + my(%mult) = ('s'=>1, + 'm'=>60, + 'h'=>60*60, + 'd'=>60*60*24, + 'M'=>60*60*24*30, + 'y'=>60*60*24*365); + # format for time can be in any of the forms... + # "now" -- expire immediately + # "+180s" -- in 180 seconds + # "+2m" -- in 2 minutes + # "+12h" -- in 12 hours + # "+1d" -- in 1 day + # "+3M" -- in 3 months + # "+2y" -- in 2 years + # "-3m" -- 3 minutes ago(!) + # If you don't supply one of these forms, we assume you are + # specifying the date yourself + my($offset); + if (!$time || ($time eq 'now')) { + $offset = 0; + } elsif ($time=~/^([+-]?\d+)([mhdMy]?)/) { + $offset = ($mult{$2} || 1)*$1; + } else { + return $time; + } + my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+$offset); + $year += 1900 unless $year < 100; + return sprintf("%s, %02d-%s-%02d %02d:%02d:%02d GMT", + $WDAY[$wday],$mday,$MON[$mon],$year,$hour,$min,$sec); +} +END_OF_FUNC + + +############################################### +# OTHER INFORMATION PROVIDED BY THE ENVIRONMENT +############################################### + +#### Method: path_info +# Return the extra virtual path information provided +# after the URL (if any) +#### +'path_info' => <<'END_OF_FUNC', +sub path_info { + return $ENV{'PATH_INFO'}; +} +END_OF_FUNC + + +#### Method: request_method +# Returns 'POST', 'GET', 'PUT' or 'HEAD' +#### +'request_method' => <<'END_OF_FUNC', +sub request_method { + return $ENV{'REQUEST_METHOD'}; +} +END_OF_FUNC + +#### Method: path_translated +# Return the physical path information provided +# by the URL (if any) +#### +'path_translated' => <<'END_OF_FUNC', +sub path_translated { + return $ENV{'PATH_TRANSLATED'}; +} +END_OF_FUNC + + +#### Method: query_string +# Synthesize a query string from our current +# parameters +#### +'query_string' => <<'END_OF_FUNC', +sub query_string { + my($self) = self_or_default(@_); + my($param,$value,@pairs); + foreach $param ($self->param) { + my($eparam) = &escape($param); + foreach $value ($self->param($param)) { + $value = &escape($value); + push(@pairs,"$eparam=$value"); + } + } + return join("&",@pairs); +} +END_OF_FUNC + + +#### Method: accept +# Without parameters, returns an array of the +# MIME types the browser accepts. +# With a single parameter equal to a MIME +# type, will return undef if the browser won't +# accept it, 1 if the browser accepts it but +# doesn't give a preference, or a floating point +# value between 0.0 and 1.0 if the browser +# declares a quantitative score for it. +# This handles MIME type globs correctly. +#### +'accept' => <<'END_OF_FUNC', +sub accept { + my($self,$search) = self_or_CGI(@_); + my(%prefs,$type,$pref,$pat); + + my(@accept) = split(',',$self->http('accept')); + + foreach (@accept) { + ($pref) = /q=(\d\.\d+|\d+)/; + ($type) = m#(\S+/[^;]+)#; + next unless $type; + $prefs{$type}=$pref || 1; + } + + return keys %prefs unless $search; + + # if a search type is provided, we may need to + # perform a pattern matching operation. + # The MIME types use a glob mechanism, which + # is easily translated into a perl pattern match + + # First return the preference for directly supported + # types: + return $prefs{$search} if $prefs{$search}; + + # Didn't get it, so try pattern matching. + foreach (keys %prefs) { + next unless /\*/; # not a pattern match + ($pat = $_) =~ s/([^\w*])/\\$1/g; # escape meta characters + $pat =~ s/\*/.*/g; # turn it into a pattern + return $prefs{$_} if $search=~/$pat/; + } +} +END_OF_FUNC + + +#### Method: user_agent +# If called with no parameters, returns the user agent. +# If called with one parameter, does a pattern match (case +# insensitive) on the user agent. +#### +'user_agent' => <<'END_OF_FUNC', +sub user_agent { + my($self,$match)=self_or_CGI(@_); + return $self->http('user_agent') unless $match; + return $self->http('user_agent') =~ /$match/i; +} +END_OF_FUNC + + +#### Method: cookie +# Returns the magic cookie for the session. +# To set the magic cookie for new transations, +# try print $q->header('-Set-cookie'=>'my cookie') +#### +'raw_cookie' => <<'END_OF_FUNC', +sub raw_cookie { + my($self) = self_or_CGI(@_); + return $self->http('cookie') || $ENV{'COOKIE'} || ''; +} +END_OF_FUNC + +#### Method: virtual_host +# Return the name of the virtual_host, which +# is not always the same as the server +###### +'virtual_host' => <<'END_OF_FUNC', +sub virtual_host { + return http('host') || server_name(); +} +END_OF_FUNC + +#### Method: remote_host +# Return the name of the remote host, or its IP +# address if unavailable. If this variable isn't +# defined, it returns "localhost" for debugging +# purposes. +#### +'remote_host' => <<'END_OF_FUNC', +sub remote_host { + return $ENV{'REMOTE_HOST'} || $ENV{'REMOTE_ADDR'} + || 'localhost'; +} +END_OF_FUNC + + +#### Method: remote_addr +# Return the IP addr of the remote host. +#### +'remote_addr' => <<'END_OF_FUNC', +sub remote_addr { + return $ENV{'REMOTE_ADDR'} || '127.0.0.1'; +} +END_OF_FUNC + + +#### Method: script_name +# Return the partial URL to this script for +# self-referencing scripts. Also see +# self_url(), which returns a URL with all state information +# preserved. +#### +'script_name' => <<'END_OF_FUNC', +sub script_name { + return $ENV{'SCRIPT_NAME'} if $ENV{'SCRIPT_NAME'}; + # These are for debugging + return "/$0" unless $0=~/^\//; + return $0; +} +END_OF_FUNC + + +#### Method: referer +# Return the HTTP_REFERER: useful for generating +# a GO BACK button. +#### +'referer' => <<'END_OF_FUNC', +sub referer { + my($self) = self_or_CGI(@_); + return $self->http('referer'); +} +END_OF_FUNC + + +#### Method: server_name +# Return the name of the server +#### +'server_name' => <<'END_OF_FUNC', +sub server_name { + return $ENV{'SERVER_NAME'} || 'localhost'; +} +END_OF_FUNC + +#### Method: server_software +# Return the name of the server software +#### +'server_software' => <<'END_OF_FUNC', +sub server_software { + return $ENV{'SERVER_SOFTWARE'} || 'cmdline'; +} +END_OF_FUNC + +#### Method: server_port +# Return the tcp/ip port the server is running on +#### +'server_port' => <<'END_OF_FUNC', +sub server_port { + return $ENV{'SERVER_PORT'} || 80; # for debugging +} +END_OF_FUNC + +#### Method: server_protocol +# Return the protocol (usually HTTP/1.0) +#### +'server_protocol' => <<'END_OF_FUNC', +sub server_protocol { + return $ENV{'SERVER_PROTOCOL'} || 'HTTP/1.0'; # for debugging +} +END_OF_FUNC + +#### Method: http +# Return the value of an HTTP variable, or +# the list of variables if none provided +#### +'http' => <<'END_OF_FUNC', +sub http { + my ($self,$parameter) = self_or_CGI(@_); + return $ENV{$parameter} if $parameter=~/^HTTP/; + return $ENV{"HTTP_\U$parameter\E"} if $parameter; + my(@p); + foreach (keys %ENV) { + push(@p,$_) if /^HTTP/; + } + return @p; +} +END_OF_FUNC + +#### Method: https +# Return the value of HTTPS +#### +'https' => <<'END_OF_FUNC', +sub https { + local($^W)=0; + my ($self,$parameter) = self_or_CGI(@_); + return $ENV{HTTPS} unless $parameter; + return $ENV{$parameter} if $parameter=~/^HTTPS/; + return $ENV{"HTTPS_\U$parameter\E"} if $parameter; + my(@p); + foreach (keys %ENV) { + push(@p,$_) if /^HTTPS/; + } + return @p; +} +END_OF_FUNC + +#### Method: protocol +# Return the protocol (http or https currently) +#### +'protocol' => <<'END_OF_FUNC', +sub protocol { + local($^W)=0; + my $self = shift; + return 'https' if $self->https() eq 'ON'; + return 'https' if $self->server_port == 443; + my $prot = $self->server_protocol; + my($protocol,$version) = split('/',$prot); + return "\L$protocol\E"; +} +END_OF_FUNC + +#### Method: remote_ident +# Return the identity of the remote user +# (but only if his host is running identd) +#### +'remote_ident' => <<'END_OF_FUNC', +sub remote_ident { + return $ENV{'REMOTE_IDENT'}; +} +END_OF_FUNC + + +#### Method: auth_type +# Return the type of use verification/authorization in use, if any. +#### +'auth_type' => <<'END_OF_FUNC', +sub auth_type { + return $ENV{'AUTH_TYPE'}; +} +END_OF_FUNC + + +#### Method: remote_user +# Return the authorization name used for user +# verification. +#### +'remote_user' => <<'END_OF_FUNC', +sub remote_user { + return $ENV{'REMOTE_USER'}; +} +END_OF_FUNC + + +#### Method: user_name +# Try to return the remote user's name by hook or by +# crook +#### +'user_name' => <<'END_OF_FUNC', +sub user_name { + my ($self) = self_or_CGI(@_); + return $self->http('from') || $ENV{'REMOTE_IDENT'} || $ENV{'REMOTE_USER'}; +} +END_OF_FUNC + +#### Method: nph +# Set or return the NPH global flag +#### +'nph' => <<'END_OF_FUNC', +sub nph { + my ($self,$param) = self_or_CGI(@_); + $CGI::nph = $param if defined($param); + return $CGI::nph; +} +END_OF_FUNC + +# -------------- really private subroutines ----------------- +'previous_or_default' => <<'END_OF_FUNC', +sub previous_or_default { + my($self,$name,$defaults,$override) = @_; + my(%selected); + + if (!$override && ($self->{'.fieldnames'}->{$name} || + defined($self->param($name)) ) ) { + grep($selected{$_}++,$self->param($name)); + } elsif (defined($defaults) && ref($defaults) && + (ref($defaults) eq 'ARRAY')) { + grep($selected{$_}++,@{$defaults}); + } else { + $selected{$defaults}++ if defined($defaults); + } + + return %selected; +} +END_OF_FUNC + +'register_parameter' => <<'END_OF_FUNC', +sub register_parameter { + my($self,$param) = @_; + $self->{'.parametersToAdd'}->{$param}++; +} +END_OF_FUNC + +'get_fields' => <<'END_OF_FUNC', +sub get_fields { + my($self) = @_; + return $self->hidden('-name'=>'.cgifields', + '-values'=>[keys %{$self->{'.parametersToAdd'}}], + '-override'=>1); +} +END_OF_FUNC + +'read_from_cmdline' => <<'END_OF_FUNC', +sub read_from_cmdline { + require "shellwords.pl"; + my($input,@words); + my($query_string); + if (@ARGV) { + $input = join(" ",@ARGV); + } else { + print STDERR "(offline mode: enter name=value pairs on standard input)\n"; + chomp(@lines = <>); # remove newlines + $input = join(" ",@lines); + } + + # minimal handling of escape characters + $input=~s/\\=/%3D/g; + $input=~s/\\&/%26/g; + + @words = &shellwords($input); + if ("@words"=~/=/) { + $query_string = join('&',@words); + } else { + $query_string = join('+',@words); + } + return $query_string; +} +END_OF_FUNC + +##### +# subroutine: read_multipart +# +# Read multipart data and store it into our parameters. +# An interesting feature is that if any of the parts is a file, we +# create a temporary file and open up a filehandle on it so that the +# caller can read from it if necessary. +##### +'read_multipart' => <<'END_OF_FUNC', +sub read_multipart { + my($self,$boundary,$length) = @_; + my($buffer) = $self->new_MultipartBuffer($boundary,$length); + return unless $buffer; + my(%header,$body); + while (!$buffer->eof) { + %header = $buffer->readHeader; + + # In beta1 it was "Content-disposition". In beta2 it's "Content-Disposition" + # Sheesh. + my($key) = $header{'Content-disposition'} ? 'Content-disposition' : 'Content-Disposition'; + my($param)= $header{$key}=~/ name="([^\"]*)"/; + + # possible bug: our regular expression expects the filename= part to fall + # at the end of the line. Netscape doesn't escape quotation marks in file names!!! + my($filename) = $header{$key}=~/ filename="(.*)"$/; + + # add this parameter to our list + $self->add_parameter($param); + + # If no filename specified, then just read the data and assign it + # to our parameter list. + unless ($filename) { + my($value) = $buffer->readBody; + push(@{$self->{$param}},$value); + next; + } + + # If we get here, then we are dealing with a potentially large + # uploaded form. Save the data to a temporary file, then open + # the file for reading. + my($tmpfile) = new TempFile; + my $tmp = $tmpfile->as_string; + + open (OUT,">$tmp") || die "CGI open of $tmpfile: $!\n"; + $CGI::DefaultClass->binmode(OUT) if $CGI::needs_binmode; + chmod 0666,$tmp; # make sure anyone can delete it. + my $data; + while ($data = $buffer->read) { + print OUT $data; + } + close OUT; + + # Now create a new filehandle in the caller's namespace. + # The name of this filehandle just happens to be identical + # to the original filename (NOT the name of the temporary + # file, which is hidden!) + my($filehandle); + if ($filename=~/^[a-zA-Z_]/) { + my($frame,$cp)=(1); + do { $cp = caller($frame++); } until !eval("'$cp'->isaCGI()"); + $filehandle = "$cp\:\:$filename"; + } else { + $filehandle = "\:\:$filename"; + } + + open($filehandle,$tmp) || die "CGI open of $tmp: $!\n"; + $CGI::DefaultClass->binmode($filehandle) if $CGI::needs_binmode; + + push(@{$self->{$param}},$filename); + + # Under Unix, it would be safe to let the temporary file + # be deleted immediately. However, I fear that other operating + # systems are not so forgiving. Therefore we save a reference + # to the temporary file in the CGI object so that the file + # isn't unlinked until the CGI object itself goes out of + # scope. This is a bit hacky, but it has the interesting side + # effect that one can access the name of the tmpfile by + # asking for $query->{$query->param('foo')}, where 'foo' + # is the name of the file upload field. + $self->{'.tmpfiles'}->{$filename}= { + name=>$tmpfile, + info=>{%header} + } + } +} +END_OF_FUNC + +'tmpFileName' => <<'END_OF_FUNC', +sub tmpFileName { + my($self,$filename) = self_or_default(@_); + return $self->{'.tmpfiles'}->{$filename}->{name}->as_string; +} +END_OF_FUNC + +'uploadInfo' => <<'END_OF_FUNC' +sub uploadInfo { + my($self,$filename) = self_or_default(@_); + return $self->{'.tmpfiles'}->{$filename}->{info}; +} +END_OF_FUNC + +); +END_OF_AUTOLOAD +; + +# Globals and stubs for other packages that we use +package MultipartBuffer; + +# how many bytes to read at a time. We use +# a 5K buffer by default. +$FILLUNIT = 1024 * 5; +$TIMEOUT = 10*60; # 10 minute timeout +$SPIN_LOOP_MAX = 1000; # bug fix for some Netscape servers +$CRLF=$CGI::CRLF; + +#reuse the autoload function +*MultipartBuffer::AUTOLOAD = \&CGI::AUTOLOAD; + +############################################################################### +################# THESE FUNCTIONS ARE AUTOLOADED ON DEMAND #################### +############################################################################### +$AUTOLOADED_ROUTINES = ''; # prevent -w error +$AUTOLOADED_ROUTINES=<<'END_OF_AUTOLOAD'; +%SUBS = ( + +'new' => <<'END_OF_FUNC', +sub new { + my($package,$interface,$boundary,$length,$filehandle) = @_; + my $IN; + if ($filehandle) { + my($package) = caller; + # force into caller's package if necessary + $IN = $filehandle=~/[':]/ ? $filehandle : "$package\:\:$filehandle"; + } + $IN = "main::STDIN" unless $IN; + + $CGI::DefaultClass->binmode($IN) if $CGI::needs_binmode; + + # If the user types garbage into the file upload field, + # then Netscape passes NOTHING to the server (not good). + # We may hang on this read in that case. So we implement + # a read timeout. If nothing is ready to read + # by then, we return. + + # Netscape seems to be a little bit unreliable + # about providing boundary strings. + if ($boundary) { + + # Under the MIME spec, the boundary consists of the + # characters "--" PLUS the Boundary string + $boundary = "--$boundary"; + # Read the topmost (boundary) line plus the CRLF + my($null) = ''; + $length -= $interface->read_from_client($IN,\$null,length($boundary)+2,0); + + } else { # otherwise we find it ourselves + my($old); + ($old,$/) = ($/,$CRLF); # read a CRLF-delimited line + $boundary = <$IN>; # BUG: This won't work correctly under mod_perl + $length -= length($boundary); + chomp($boundary); # remove the CRLF + $/ = $old; # restore old line separator + } + + my $self = {LENGTH=>$length, + BOUNDARY=>$boundary, + IN=>$IN, + INTERFACE=>$interface, + BUFFER=>'', + }; + + $FILLUNIT = length($boundary) + if length($boundary) > $FILLUNIT; + + return bless $self,ref $package || $package; +} +END_OF_FUNC + +'readHeader' => <<'END_OF_FUNC', +sub readHeader { + my($self) = @_; + my($end); + my($ok) = 0; + do { + $self->fillBuffer($FILLUNIT); + $ok++ if ($end = index($self->{BUFFER},"${CRLF}${CRLF}")) >= 0; + $ok++ if $self->{BUFFER} eq ''; + $FILLUNIT *= 2 if length($self->{BUFFER}) >= $FILLUNIT; + } until $ok; + + my($header) = substr($self->{BUFFER},0,$end+2); + substr($self->{BUFFER},0,$end+4) = ''; + my %return; + while ($header=~/^([\w-]+): (.*)$CRLF/mog) { + $return{$1}=$2; + } + return %return; +} +END_OF_FUNC + +# This reads and returns the body as a single scalar value. +'readBody' => <<'END_OF_FUNC', +sub readBody { + my($self) = @_; + my($data); + my($returnval)=''; + while (defined($data = $self->read)) { + $returnval .= $data; + } + return $returnval; +} +END_OF_FUNC + +# This will read $bytes or until the boundary is hit, whichever happens +# first. After the boundary is hit, we return undef. The next read will +# skip over the boundary and begin reading again; +'read' => <<'END_OF_FUNC', +sub read { + my($self,$bytes) = @_; + + # default number of bytes to read + $bytes = $bytes || $FILLUNIT; + + # Fill up our internal buffer in such a way that the boundary + # is never split between reads. + $self->fillBuffer($bytes); + + # Find the boundary in the buffer (it may not be there). + my $start = index($self->{BUFFER},$self->{BOUNDARY}); + + # If the boundary begins the data, then skip past it + # and return undef. The +2 here is a fiendish plot to + # remove the CR/LF pair at the end of the boundary. + if ($start == 0) { + + # clear us out completely if we've hit the last boundary. + if (index($self->{BUFFER},"$self->{BOUNDARY}--")==0) { + $self->{BUFFER}=''; + $self->{LENGTH}=0; + return undef; + } + + # just remove the boundary. + substr($self->{BUFFER},0,length($self->{BOUNDARY})+2)=''; + return undef; + } + + my $bytesToReturn; + if ($start > 0) { # read up to the boundary + $bytesToReturn = $start > $bytes ? $bytes : $start; + } else { # read the requested number of bytes + # leave enough bytes in the buffer to allow us to read + # the boundary. Thanks to Kevin Hendrick for finding + # this one. + $bytesToReturn = $bytes - (length($self->{BOUNDARY})+1); + } + + my $returnval=substr($self->{BUFFER},0,$bytesToReturn); + substr($self->{BUFFER},0,$bytesToReturn)=''; + + # If we hit the boundary, remove the CRLF from the end. + return ($start > 0) ? substr($returnval,0,-2) : $returnval; +} +END_OF_FUNC + + +# This fills up our internal buffer in such a way that the +# boundary is never split between reads +'fillBuffer' => <<'END_OF_FUNC', +sub fillBuffer { + my($self,$bytes) = @_; + return unless $self->{LENGTH}; + + my($boundaryLength) = length($self->{BOUNDARY}); + my($bufferLength) = length($self->{BUFFER}); + my($bytesToRead) = $bytes - $bufferLength + $boundaryLength + 2; + $bytesToRead = $self->{LENGTH} if $self->{LENGTH} < $bytesToRead; + + # Try to read some data. We may hang here if the browser is screwed up. + my $bytesRead = $self->{INTERFACE}->read_from_client($self->{IN}, + \$self->{BUFFER}, + $bytesToRead, + $bufferLength); + + # An apparent bug in the Netscape Commerce server causes the read() + # to return zero bytes repeatedly without blocking if the + # remote user aborts during a file transfer. I don't know how + # they manage this, but the workaround is to abort if we get + # more than SPIN_LOOP_MAX consecutive zero reads. + if ($bytesRead == 0) { + die "CGI.pm: Server closed socket during multipart read (client aborted?).\n" + if ($self->{ZERO_LOOP_COUNTER}++ >= $SPIN_LOOP_MAX); + } else { + $self->{ZERO_LOOP_COUNTER}=0; + } + + $self->{LENGTH} -= $bytesRead; +} +END_OF_FUNC + + +# Return true when we've finished reading +'eof' => <<'END_OF_FUNC' +sub eof { + my($self) = @_; + return 1 if (length($self->{BUFFER}) == 0) + && ($self->{LENGTH} <= 0); + undef; +} +END_OF_FUNC + +); +END_OF_AUTOLOAD + +#################################################################################### +################################## TEMPORARY FILES ################################# +#################################################################################### +package TempFile; + +$SL = $CGI::SL; +unless ($TMPDIRECTORY) { + @TEMP=("${SL}usr${SL}tmp","${SL}var${SL}tmp","${SL}tmp","${SL}temp","${SL}Temporary Items"); + foreach (@TEMP) { + do {$TMPDIRECTORY = $_; last} if -d $_ && -w _; + } +} + +$TMPDIRECTORY = "." unless $TMPDIRECTORY; +$SEQUENCE="CGItemp${$}0000"; + +# cute feature, but overload implementation broke it +# %OVERLOAD = ('""'=>'as_string'); +*TempFile::AUTOLOAD = \&CGI::AUTOLOAD; + +############################################################################### +################# THESE FUNCTIONS ARE AUTOLOADED ON DEMAND #################### +############################################################################### +$AUTOLOADED_ROUTINES = ''; # prevent -w error +$AUTOLOADED_ROUTINES=<<'END_OF_AUTOLOAD'; +%SUBS = ( + +'new' => <<'END_OF_FUNC', +sub new { + my($package) = @_; + $SEQUENCE++; + my $directory = "${TMPDIRECTORY}${SL}${SEQUENCE}"; + return bless \$directory; +} +END_OF_FUNC + +'DESTROY' => <<'END_OF_FUNC', +sub DESTROY { + my($self) = @_; + unlink $$self; # get rid of the file +} +END_OF_FUNC + +'as_string' => <<'END_OF_FUNC' +sub as_string { + my($self) = @_; + return $$self; +} +END_OF_FUNC + +); +END_OF_AUTOLOAD + +package CGI; + +# We get a whole bunch of warnings about "possibly uninitialized variables" +# when running with the -w switch. Touch them all once to get rid of the +# warnings. This is ugly and I hate it. +if ($^W) { + $CGI::CGI = ''; + $CGI::CGI=<. +It redefines the die(), warn(), confess() and croak() error routines +so that they write nicely formatted error messages into the server's +error log (or to the output stream of your choice). This avoids long +hours of groping through the error and access logs, trying to figure +out which CGI script is generating error messages. If you choose, +you can even have fatal error messages echoed to the browser to avoid +the annoying and uninformative "Server Error" message. + +=head1 DESCRIPTION + +=head2 CREATING A NEW QUERY OBJECT: + + $query = new CGI; + +This will parse the input (from both POST and GET methods) and store +it into a perl5 object called $query. + +=head2 CREATING A NEW QUERY OBJECT FROM AN INPUT FILE + + $query = new CGI(INPUTFILE); + +If you provide a file handle to the new() method, it +will read parameters from the file (or STDIN, or whatever). The +file can be in any of the forms describing below under debugging +(i.e. a series of newline delimited TAG=VALUE pairs will work). +Conveniently, this type of file is created by the save() method +(see below). Multiple records can be saved and restored. + +Perl purists will be pleased to know that this syntax accepts +references to file handles, or even references to filehandle globs, +which is the "official" way to pass a filehandle: + + $query = new CGI(\*STDIN); + +You can also initialize the query object from an associative array +reference: + + $query = new CGI( {'dinosaur'=>'barney', + 'song'=>'I love you', + 'friends'=>[qw/Jessica George Nancy/]} + ); + +or from a properly formatted, URL-escaped query string: + + $query = new CGI('dinosaur=barney&color=purple'); + +To create an empty query, initialize it from an empty string or hash: + + $empty_query = new CGI(""); + -or- + $empty_query = new CGI({}); + +=head2 FETCHING A LIST OF KEYWORDS FROM THE QUERY: + + @keywords = $query->keywords + +If the script was invoked as the result of an search, the +parsed keywords can be obtained as an array using the keywords() method. + +=head2 FETCHING THE NAMES OF ALL THE PARAMETERS PASSED TO YOUR SCRIPT: + + @names = $query->param + +If the script was invoked with a parameter list +(e.g. "name1=value1&name2=value2&name3=value3"), the param() +method will return the parameter names as a list. If the +script was invoked as an script, there will be a +single parameter named 'keywords'. + +NOTE: As of version 1.5, the array of parameter names returned will +be in the same order as they were submitted by the browser. +Usually this order is the same as the order in which the +parameters are defined in the form (however, this isn't part +of the spec, and so isn't guaranteed). + +=head2 FETCHING THE VALUE OR VALUES OF A SINGLE NAMED PARAMETER: + + @values = $query->param('foo'); + + -or- + + $value = $query->param('foo'); + +Pass the param() method a single argument to fetch the value of the +named parameter. If the parameter is multivalued (e.g. from multiple +selections in a scrolling list), you can ask to receive an array. Otherwise +the method will return a single value. + +=head2 SETTING THE VALUE(S) OF A NAMED PARAMETER: + + $query->param('foo','an','array','of','values'); + +This sets the value for the named parameter 'foo' to an array of +values. This is one way to change the value of a field AFTER +the script has been invoked once before. (Another way is with +the -override parameter accepted by all methods that generate +form elements.) + +param() also recognizes a named parameter style of calling described +in more detail later: + + $query->param(-name=>'foo',-values=>['an','array','of','values']); + + -or- + + $query->param(-name=>'foo',-value=>'the value'); + +=head2 APPENDING ADDITIONAL VALUES TO A NAMED PARAMETER: + + $query->append(-name=>;'foo',-values=>['yet','more','values']); + +This adds a value or list of values to the named parameter. The +values are appended to the end of the parameter if it already exists. +Otherwise the parameter is created. Note that this method only +recognizes the named argument calling syntax. + +=head2 IMPORTING ALL PARAMETERS INTO A NAMESPACE: + + $query->import_names('R'); + +This creates a series of variables in the 'R' namespace. For example, +$R::foo, @R:foo. For keyword lists, a variable @R::keywords will appear. +If no namespace is given, this method will assume 'Q'. +WARNING: don't import anything into 'main'; this is a major security +risk!!!! + +In older versions, this method was called B. As of version 2.20, +this name has been removed completely to avoid conflict with the built-in +Perl module B operator. + +=head2 DELETING A PARAMETER COMPLETELY: + + $query->delete('foo'); + +This completely clears a parameter. It sometimes useful for +resetting parameters that you don't want passed down between +script invocations. + +=head2 DELETING ALL PARAMETERS: + +$query->delete_all(); + +This clears the CGI object completely. It might be useful to ensure +that all the defaults are taken when you create a fill-out form. + +=head2 SAVING THE STATE OF THE FORM TO A FILE: + + $query->save(FILEHANDLE) + +This will write the current state of the form to the provided +filehandle. You can read it back in by providing a filehandle +to the new() method. Note that the filehandle can be a file, a pipe, +or whatever! + +The format of the saved file is: + + NAME1=VALUE1 + NAME1=VALUE1' + NAME2=VALUE2 + NAME3=VALUE3 + = + +Both name and value are URL escaped. Multi-valued CGI parameters are +represented as repeated names. A session record is delimited by a +single = symbol. You can write out multiple records and read them +back in with several calls to B. You can do this across several +sessions by opening the file in append mode, allowing you to create +primitive guest books, or to keep a history of users' queries. Here's +a short example of creating multiple session records: + + use CGI; + + open (OUT,">>test.out") || die; + $records = 5; + foreach (0..$records) { + my $q = new CGI; + $q->param(-name=>'counter',-value=>$_); + $q->save(OUT); + } + close OUT; + + # reopen for reading + open (IN,"test.out") || die; + while (!eof(IN)) { + my $q = new CGI(IN); + print $q->param('counter'),"\n"; + } + +The file format used for save/restore is identical to that used by the +Whitehead Genome Center's data exchange format "Boulderio", and can be +manipulated and even databased using Boulderio utilities. See + + http://www.genome.wi.mit.edu/genome_software/other/boulder.html + +for further details. + +=head2 CREATING A SELF-REFERENCING URL THAT PRESERVES STATE INFORMATION: + + $myself = $query->self_url; + print "I'm talking to myself."; + +self_url() will return a URL, that, when selected, will reinvoke +this script with all its state information intact. This is most +useful when you want to jump around within the document using +internal anchors but you don't want to disrupt the current contents +of the form(s). Something like this will do the trick. + + $myself = $query->self_url; + print "See table 1"; + print "See table 2"; + print "See for yourself"; + +If you don't want to get the whole query string, call +the method url() to return just the URL for the script: + + $myself = $query->url; + print "No query string in this baby!\n"; + +You can also retrieve the unprocessed query string with query_string(): + + $the_string = $query->query_string; + +=head2 COMPATIBILITY WITH CGI-LIB.PL + +To make it easier to port existing programs that use cgi-lib.pl +the compatibility routine "ReadParse" is provided. Porting is +simple: + +OLD VERSION + require "cgi-lib.pl"; + &ReadParse; + print "The value of the antique is $in{antique}.\n"; + +NEW VERSION + use CGI; + CGI::ReadParse + print "The value of the antique is $in{antique}.\n"; + +CGI.pm's ReadParse() routine creates a tied variable named %in, +which can be accessed to obtain the query variables. Like +ReadParse, you can also provide your own variable. Infrequently +used features of ReadParse, such as the creation of @in and $in +variables, are not supported. + +Once you use ReadParse, you can retrieve the query object itself +this way: + + $q = $in{CGI}; + print $q->textfield(-name=>'wow', + -value=>'does this really work?'); + +This allows you to start using the more interesting features +of CGI.pm without rewriting your old scripts from scratch. + +=head2 CALLING CGI FUNCTIONS THAT TAKE MULTIPLE ARGUMENTS + +In versions of CGI.pm prior to 2.0, it could get difficult to remember +the proper order of arguments in CGI function calls that accepted five +or six different arguments. As of 2.0, there's a better way to pass +arguments to the various CGI functions. In this style, you pass a +series of name=>argument pairs, like this: + + $field = $query->radio_group(-name=>'OS', + -values=>[Unix,Windows,Macintosh], + -default=>'Unix'); + +The advantages of this style are that you don't have to remember the +exact order of the arguments, and if you leave out a parameter, in +most cases it will default to some reasonable value. If you provide +a parameter that the method doesn't recognize, it will usually do +something useful with it, such as incorporating it into the HTML form +tag. For example if Netscape decides next week to add a new +JUSTIFICATION parameter to the text field tags, you can start using +the feature without waiting for a new version of CGI.pm: + + $field = $query->textfield(-name=>'State', + -default=>'gaseous', + -justification=>'RIGHT'); + +This will result in an HTML tag that looks like this: + + + +Parameter names are case insensitive: you can use -name, or -Name or +-NAME. You don't have to use the hyphen if you don't want to. After +creating a CGI object, call the B method with +a nonzero value. This will tell CGI.pm that you intend to use named +parameters exclusively: + + $query = new CGI; + $query->use_named_parameters(1); + $field = $query->radio_group('name'=>'OS', + 'values'=>['Unix','Windows','Macintosh'], + 'default'=>'Unix'); + +Actually, CGI.pm only looks for a hyphen in the first parameter. So +you can leave it off subsequent parameters if you like. Something to +be wary of is the potential that a string constant like "values" will +collide with a keyword (and in fact it does!) While Perl usually +figures out when you're referring to a function and when you're +referring to a string, you probably should put quotation marks around +all string constants just to play it safe. + +=head2 CREATING THE HTTP HEADER: + + print $query->header; + + -or- + + print $query->header('image/gif'); + + -or- + + print $query->header('text/html','204 No response'); + + -or- + + print $query->header(-type=>'image/gif', + -nph=>1, + -status=>'402 Payment required', + -expires=>'+3d', + -cookie=>$cookie, + -Cost=>'$2.00'); + +header() returns the Content-type: header. You can provide your own +MIME type if you choose, otherwise it defaults to text/html. An +optional second parameter specifies the status code and a human-readable +message. For example, you can specify 204, "No response" to create a +script that tells the browser to do nothing at all. If you want to +add additional fields to the header, just tack them on to the end: + + print $query->header('text/html','200 OK','Content-Length: 3002'); + +The last example shows the named argument style for passing arguments +to the CGI methods using named parameters. Recognized parameters are +B<-type>, B<-status>, B<-expires>, and B<-cookie>. Any other +parameters will be stripped of their initial hyphens and turned into +header fields, allowing you to specify any HTTP header you desire. + +Most browsers will not cache the output from CGI scripts. Every time +the browser reloads the page, the script is invoked anew. You can +change this behavior with the B<-expires> parameter. When you specify +an absolute or relative expiration interval with this parameter, some +browsers and proxy servers will cache the script's output until the +indicated expiration date. The following forms are all valid for the +-expires field: + + +30s 30 seconds from now + +10m ten minutes from now + +1h one hour from now + -1d yesterday (i.e. "ASAP!") + now immediately + +3M in three months + +10y in ten years time + Thursday, 25-Apr-96 00:40:33 GMT at the indicated time & date + +(CGI::expires() is the static function call used internally that turns +relative time intervals into HTTP dates. You can call it directly if +you wish.) + +The B<-cookie> parameter generates a header that tells the browser to provide +a "magic cookie" during all subsequent transactions with your script. +Netscape cookies have a special format that includes interesting attributes +such as expiration time. Use the cookie() method to create and retrieve +session cookies. + +The B<-nph> parameter, if set to a true value, will issue the correct +headers to work with a NPH (no-parse-header) script. This is important +to use with certain servers, such as Microsoft Internet Explorer, which +expect all their scripts to be NPH. + +=head2 GENERATING A REDIRECTION INSTRUCTION + + print $query->redirect('http://somewhere.else/in/movie/land'); + +redirects the browser elsewhere. If you use redirection like this, +you should B print out a header as well. As of version 2.0, we +produce both the unofficial Location: header and the official URI: +header. This should satisfy most servers and browsers. + +One hint I can offer is that relative links may not work correctly +when when you generate a redirection to another document on your site. +This is due to a well-intentioned optimization that some servers use. +The solution to this is to use the full URL (including the http: part) +of the document you are redirecting to. + +You can use named parameters: + + print $query->redirect(-uri=>'http://somewhere.else/in/movie/land', + -nph=>1); + +The B<-nph> parameter, if set to a true value, will issue the correct +headers to work with a NPH (no-parse-header) script. This is important +to use with certain servers, such as Microsoft Internet Explorer, which +expect all their scripts to be NPH. + + +=head2 CREATING THE HTML HEADER: + + print $query->start_html(-title=>'Secrets of the Pyramids', + -author=>'fred@capricorn.org', + -base=>'true', + -target=>'_blank', + -meta=>{'keywords'=>'pharaoh secret mummy', + 'copyright'=>'copyright 1996 King Tut'}, + -BGCOLOR=>'blue'); + + -or- + + print $query->start_html('Secrets of the Pyramids', + 'fred@capricorn.org','true', + 'BGCOLOR="blue"'); + +This will return a canned HTML header and the opening tag. +All parameters are optional. In the named parameter form, recognized +parameters are -title, -author, -base, -xbase and -target (see below for the +explanation). Any additional parameters you provide, such as the +Netscape unofficial BGCOLOR attribute, are added to the tag. + +The argument B<-xbase> allows you to provide an HREF for the tag +different from the current location, as in + + -xbase=>"http://home.mcom.com/" + +All relative links will be interpreted relative to this tag. + +The argument B<-target> allows you to provide a default target frame +for all the links and fill-out forms on the page. See the Netscape +documentation on frames for details of how to manipulate this. + + -target=>"answer_window" + +All relative links will be interpreted relative to this tag. +You add arbitrary meta information to the header with the B<-meta> +argument. This argument expects a reference to an associative array +containing name/value pairs of meta information. These will be turned +into a series of header tags that look something like this: + + + + +There is no support for the HTTP-EQUIV type of tag. This is +because you can modify the HTTP header directly with the B +method. + +JAVASCRIPTING: The B<-script>, B<-onLoad> and B<-onUnload> parameters +are used to add Netscape JavaScript calls to your pages. B<-script> +should point to a block of text containing JavaScript function +definitions. This block will be placed within a