This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
integrate changes#7472,7474..7478,7481,7485,7489,7493,7494,7496,
authorGurusamy Sarathy <gsar@cpan.org>
Mon, 18 Dec 2000 03:37:02 +0000 (03:37 +0000)
committerGurusamy Sarathy <gsar@cpan.org>
Mon, 18 Dec 2000 03:37:02 +0000 (03:37 +0000)
7497,7499..7503,7505..7507,7509..7513,7515..7523,7526..7534,
7536,7540,7542,7544..7546,7549,7553,7556,7557,7559,7561..7563,
7565,7568..7572,7576,7578..7589,9592..7594,7596..7601 from mainline

Better create a true mailing list for the repository keepers.

Subject: [ID 20001027.007] uniq array in perlfaq

De-quoted-unreadable to ISO Latin 1.
(There's one ISO-2022-JP name in Changes5.004.)

Have only one master list of AUTHORS, drop unmaintained MAINTAIN.

The #7476 needs a MANIFEST change, too.

Add also emailless people.

UTF-8 decoder tweak.

Make \x{...} consistently produce UTF-8.
Subject: Re: \x{...} is confused

Subject: [Chris Winters <cwinters@intes.net>] patch to ExtUtils::Manifest

Add a perlbug flag, -A, to avoid acknowledgement messages.
Subject: PATCH (Re: [ID 20001030.008] OK: perl v5.7.0 +DEVEL7445 on i586-linux 2.2.16 (UNINSTALLED))

Use Errno magic.
Subject: [ID 20001030.009] [PATCH] ftmp-mktemp failing

Subject: [PATCH: perl@7483] CRLF fix for cgi-function.t tests

Subject: [PATCH: perl@7483] fix coded control chars in cgi-html.t

Subject: [ID 20001030.001] 5.7.0-7489: Null-Pointer reference in mg.c

Be more lenient on bad UTF-8 when doing bit arithmetics.
Subject: Re: [ID 20000918.005] ~ on wide chars
(The ord() part of the patch skipped.)

Subject: perlfaq style changes

AUTHORS tweaks.

Whitespace style tweak.  Was originally going to see to
Subject: PATCH (Re: PerlIO - Configure tweak for Linux/glibc?)
but that had already been taken care of.

The compiler is either gcc or cc, from Tom Bates.

The osname has been lowercased by now, from Tom Bates.

The NonStop-UX libraries have a novel way to say NaN.

printf UVs the correct way, noticed by Robin Barker.

Subject: [PATCH] startperl to respect versiononly

AUTHORS updates.

Subject: [ID 20001031.004] Uninitialized auto variable in regcomp.c

Subject: [ID 20001101.001] Net::Ping icmp odd $bytes

Subject: [ID 20001005.004] doc bug: perlsec misleading re file output

Generalize the Camel wording.
Subject: Re: perlfaq style changes

Subject: [ID 20001005.006] Documentation -- description of qr//

C.pm part of
Subject: [ID 20001010.001] [Daniel.Stutz@astaro.de: perlcc and C.pm in perl-5.7.0]

Locale warning explanation tweak.

Subject: [ID 20000904.004] perlsec Manual Page Incorrect Doing "Safe Backticks"

Make the POSIX::setuid and POSIX::setgid to really call setuid()
and setgid() because they were just changing $< and $( which means
only changing the real uid/gid, as opposed to changing both
real and effective ids.  (The alternative way could have been
in POSIX.pm to change $> and $), too, but making a direct call
to the C API feels cleaner.)  Fixes the bug
Subject: [ID 20000904.005] POSIX::setuid() Doesn't Call setuid()

Expand %Config variables and %ENV variables only if
so requested during build time using the
PERL_BUILD_EXPAND_CONFIG_VARS and PERL_BUILD_EXPAND_ENV_VARS.
Not expanding makes relocating distributions easier.

More tweaking on the #7522 theme.

Test::Harness revealed buglets in the new DynaLoader.
Subject: [ID 20001102.001] Not OK: perl v5.7.0 +DEVEL7523 on i686-linux 2.2.16a (UNINSTALLED)

Add Tie::RefHash::Nestable (lives in Tie/RefHash.pm),
fix a autovivification bug in Tie::RefHash, add tests for both.
Subject: Re: Tie::RefHash: use hash refs as keys in nested hashes

Detpyo.

recv() can fail and return undef.
Subject: [ID 20001102.003] Net::Ping patch: "Bad arg lenght" error appears if host is unreachable

Fix the problem discussed in
Subject: [ID 20001015.004] Fwd: Tie::SubstrHash -- bug & fix (all Perl versions)
originally from Linc Madison.  Also Andreas König's comments
taken into account.  Some other problems with Tie::SubstrHash
fixed: didn't croak when the table exceeded the requested number
of entries (as documented) but instead when the number of entries
exceeded the size of the table, a croak() had an unnecessary \n,
didn't have a CLEAR method, documented that there is no exists().
Didn't fix to be strict-proof because the module uses &foo; and
dynamic scope.  Added a test script exercizing both first tamely
the basic functionality, and then the failure cases reported by
Linc Madison.

Subject:  [PATCH] Perl@7504, vms/gen_shrfls.pl

The #7521 touched things it shouldn't have.

Subject: [PATCH 5.7.0] better messages from malloc()

Subject: Re: README.aix

Add FCNTL_CAN_LOCK.
Subject: Re: [ID 20001030.011] Not OK: perl v5.7.0 +DEVEL7481 on VMS_AXP V7.1 (UNINSTALLED)
Subject: Re: [ID 20001030.011] Not OK: perl v5.7.0 +DEVEL7481 on VMS_AXP V7.1 (UNINSTALLED)

Locale tweakery.  Add test case for bug id 20000809.003 to op/misc,
create a "fast path" for locale name probing using "locale -a"
if available, squash finally hopefully the s?printf resetting
the numeric locale (since, IIUC perllocale, it never shouldn't).

More Changes tweakery.

Dying is too strict here, better just skip.

Subject: Locales support (setlocale) fixes
Modified quite a bit to be more portable.

Configure would use a bad $myuname from an old config.sh.
Subject: [PATCH 5.6.1-to-be and 5.7.x] Very old Configure myuname bug

Fix for
Subject: [ID 20001004.006] undef is never tainted
An undef read from a slurped file was not tainted.

Fix for
Subject: [ID 20001004.007] taint propogation is inconsistent
The culprit was sv_setsv() which was rather blindly
propagating taint, which lead to behaviour where if
a tainted anon hash value was seen all the hash values
from then on at that level became tainted, or at any
upper levels in the case of nested anon hashes.

Test tweak: show also the failed locales.
Subject: [ID 20001105.001] Not OK: perl v5.7.0 +DEVEL7523 on i86pc-solaris 2.8

A fix of sorts for 20000329.026, a better error message
for a missing "use charnames" when using the \N{...}.

Subject: [Corrected/tested PATCH] Re: [ID 20001102.008] Not OK: perl v5.7.0 +DEVEL7503 on i686-linux 2.2.16

Add =pod to be tidy.

Fix for bug id 19990615.008, pos() unset during s///ge.

Add a note for future generations about bug id 20000229.006.

Use -dM for gcc (the suggested patch did it only for Linux,
but I think it can be generalized).
Subject: Re: connect and $!{EINPROGRESS} pb (was [ID 20001030.010] [PATCH] io_multihomed.t failing)

opmini.o can linger from Configures past.

Document that the evaled syntax errors cause scalar leaks.

Fix for
Subject: [ID 20000728.005] perl -P broken
(hopefully).  The fix is also not complete, it seems to break
BOM swallowing for libc5 systems, but until someone figures
out a way to do this without ftell(), this will do.

AUTHORS updates.

Subject: Re: rsync'ed patches vs. rsync'ed source

Admit that the test leaks scalars.

Sanitize the environment further.

VOS updates from Paul Green.

Document %ENV = () portability issues.

Make the stdio test program of 7427 less noisy while being
compiled so that Digital UNIX wouldn't get both
d_stdio_ptr_lval_nochange_cnt and d_stdio_ptr_lval_sets_cnt
undefined.  This makes perlio happy.

glibc5 detection by __GNU_LIBRARY__.

%ENV note tweaks from Dan Sugalski.

Varargs don't always work too well if one puts an unsigned
char on the stack and pop an unsigned quad off the stack.
Subject: Re: [ID 20001103.002] Not OK: perl v5.7.0 +DEVEL7523 on os2-64int-ld-2.30 (UNINSTALLED)

Subject: Pod updates

Fake support of holey files in win/dosish platforms.
Subject: SDBM_File under MS-Windows95/98 does not work correctly. (APR#1302)

A doc addition for bug id 20001105.019, beware \p.

Tweak #7587.

Subject: [PATCH perl@7573] configure.com and st-lock.t changes for

perlhack updates from H.Merijn Brand.

Subject: [PATCH perl@7573] cygwin port
Synchronize with Cygwin 1.1.5.

Bad thinko in #7581 (I used the test program with the expanded
values as-is).

Make perlbug not insist on dumping to a file when stdout isn't a tty.
Subject: [PATCH] perlbug.PL

Overrideable keys, each, pop, push, shift, splice, unshift.
Subject: [PATCH] prototyped functions that should be overrideable

Try to avoid flockless and emulationless places.

p4raw-link: @7485 on //depot/perl: 89491803eada141bfe112702c189849c457eac87
p4raw-link: @7481 on //depot/perl: aa5452176994532eebece21dc5c8d01fe419c73f
p4raw-link: @7478 on //depot/perl: 0169df56891b9c66f66b71f4011afc0aea9dc534
p4raw-link: @7474 on //depot/perl: 3bc5ef3eb693992b74dc57b15c2a80e4e456a97e
p4raw-link: @7472 on //depot/perl: b09defb630396853401b22a46e423bde3280c5f0

p4raw-id: //depot/maint-5.6/perl@8173
p4raw-deleted: from //depot/perl@8171 'delete in' MAINTAIN (@6958..)
p4raw-integrated: from //depot/perl@8171 'copy in' t/op/pos.t (@969..)
ext/SDBM_File/sdbm/sdbm.c (@5146..) pod/perl5005delta.pod
(@5493..) pod/perlnumber.pod pod/perlopentut.pod
pod/perltootc.pod (@5959..) pod/perlfilter.pod (@6344..)
ext/POSIX/POSIX.pm (@6363..) pod/perlsub.pod (@6366..)
pod/perlvar.pod (@6518..) pod/perlembed.pod (@6522..)
hints/cygwin.sh (@6638..) lib/Math/Complex.pm (@6857..)
pod/perllexwarn.pod (@6869..) pod/perl5004delta.pod (@6872..)
t/lib/cgi-function.t (@6874..) pod/perldebtut.pod
pod/perldebug.pod (@6917..) pod/perlhist.pod (@7011..)
pod/perldebguts.pod (@7169..) t/lib/cgi-html.t (@7199..)
hints/nonstopux.sh (@7371..) vms/gen_shrfls.pl (@7376..)
README.aix (@7411..) README.os2 (@7467..) README.dos (@7469..)
Porting/repository.pod (@7471..) pod/perlfaq4.pod (@7474..)
pod/perlfaq2.pod pod/perlfaq3.pod pod/perlfaq5.pod (@7501..)
pod/perlsec.pod (@7515..) pod/perlfaq8.pod (@7516..)
ext/POSIX/POSIX.xs ext/POSIX/typemap (@7521..)
ext/DynaLoader/DynaLoader_pm.PL (@7526..) t/op/taint.t
(@7549..) vms/perlvms.pod (@7580..) pod/perlport.pod (@7585..)
'merge in' pod/perl56delta.pod (@7001..) Changes5.6 (@7109..)
unixish.h (@7126..)
p4raw-integrated: from //depot/perl@7601 'merge in'
t/pragma/warn/pp_sys (@6847..)
p4raw-integrated: from //depot/perl@7600 'edit in' toke.c (@7582..)
p4raw-integrated: from //depot/perl@7598 'edit in' Configure (@7581..)
p4raw-integrated: from //depot/perl@7597 'copy in' cygwin/cygwin.c
(@6094..) README.cygwin (@6638..) AUTHORS (@7593..) 'edit in'
util.c (@7545..) 'merge in' mg.c (@7204..)
p4raw-integrated: from //depot/perl@7596 'copy in' pod/perlhack.pod
(@7585..)
p4raw-integrated: from //depot/perl@7589 'copy in' configure.com
(@7448..)
p4raw-integrated: from //depot/perl@7588 'edit in' pod/perldiag.pod
(@7587..)
p4raw-integrated: from //depot/perl@7585 'copy in' pod/perltoot.pod
(@5493..) pod/perlre.pod (@6756..) pod/perllocale.pod (@6894..)
pod/perlmodlib.pod (@6917..) pod/perltie.pod (@7023..)
pod/perlipc.pod (@7036..) pod/buildtoc.PL pod/perl.pod
(@7429..) pod/perlunicode.pod (@7439..) README.win32 (@7452..)
pod/perlfaq.pod pod/perlfaq1.pod pod/perlfaq7.pod (@7501..)
pod/perlop.pod (@7528..) 'merge in' pod/perlguts.pod (@7243..)
pod/perlfunc.pod (@7470..)
p4raw-integrated: from //depot/perl@7584 'edit in' utf8.c (@7509..)
p4raw-integrated: from //depot/perl@7581 'ignore' config_h.SH (@7546..)
p4raw-integrated: from //depot/perl@7579 'copy in' vos/config.alpha.h
vos/config.ga.def vos/config.ga.h (@7536..)
p4raw-integrated: from //depot/perl@7578 'copy in' t/pragma/locale.t
(@7556..)
p4raw-integrated: from //depot/perl@7576 'copy in' t/comp/proto.t
(@7569..)
p4raw-integrated: from //depot/perl@7568 'merge in' Makefile.SH
(@7493..)
p4raw-integrated: from //depot/perl@7565 'copy in'
ext/Errno/Errno_pm.PL (@7067..)
p4raw-integrated: from //depot/perl@7562 'merge in' pp_ctl.c (@7444..)
p4raw-integrated: from //depot/perl@7559 'copy in' t/lib/syslog.t
(@7440..)
p4raw-integrated: from //depot/perl@7553 'edit in' sv.c (@7540..)
p4raw-integrated: from //depot/perl@7549 'merge in' pp_hot.c (@7385..)
p4raw-integrated: from //depot/perl@7545 'merge in' embed.h embed.pl
perl.h proto.h (@7465..)
p4raw-integrated: from //depot/perl@7544 'copy in' t/op/misc.t
(@7540..)
p4raw-integrated: from //depot/perl@7542 'copy in' Porting/genlog
(@7347..)
p4raw-integrated: from //depot/perl@7536 'copy in' Porting/Glossary
Porting/config.sh Porting/config_H epoc/config.sh
win32/config.bc win32/config.gc win32/config.vc (@7427..)
vos/config.alpha.def (@7428..) 'merge in' pp_sys.c (@7443..)
p4raw-branched: from //depot/perl@7530 'branch in'
t/lib/tie-substrhash.t
p4raw-integrated: from //depot/perl@7530 'copy in'
lib/Tie/SubstrHash.pm (@2620..) 'edit in' MANIFEST (@7527..)
p4raw-integrated: from //depot/perl@7529 'copy in' lib/Net/Ping.pm
(@7513..)
p4raw-branched: from //depot/perl@7527 'branch in' t/lib/tie-refhash.t
p4raw-integrated: from //depot/perl@7527 'copy in' lib/Tie/RefHash.pm
(@3547..)
p4raw-integrated: from //depot/perl@7521 'copy in' ext/POSIX/POSIX.pod
(@6373..)
p4raw-integrated: from //depot/perl@7518 'copy in' ext/B/B/C.pm
(@7398..)
p4raw-integrated: from //depot/perl@7516 'copy in' pod/perlfaq9.pod
(@7501..)
p4raw-integrated: from //depot/perl@7507 'copy in' t/lib/bigfltpm.t
(@6773..)
p4raw-integrated: from //depot/perl@7501 'copy in' pod/perlfaq6.pod
(@7027..)
p4raw-integrated: from //depot/perl@7500 'merge in' doop.c (@7439..)
p4raw-integrated: from //depot/perl@7499 'copy in' av.c (@6438..)
p4raw-integrated: from //depot/perl@7494 'copy in' lib/File/Temp.pm
(@7208..)
p4raw-integrated: from //depot/perl@7489 'copy in'
lib/ExtUtils/Manifest.pm (@7175..)
p4raw-integrated: from //depot/perl@7485 'copy in' t/pragma/utf8.t
(@7438..)

114 files changed:
AUTHORS
Changes
Configure
MAINTAIN [deleted file]
MANIFEST
Makefile.SH
Porting/Glossary
Porting/config.sh
Porting/config_H
Porting/genlog
Porting/repository.pod
README.aix
README.cygwin
README.dos
README.os2
README.win32
av.c
config_h.SH
configure.com
cygwin/cygwin.c
doop.c
embed.h
embed.pl
epoc/config.sh
ext/B/B/C.pm
ext/DynaLoader/DynaLoader_pm.PL
ext/Errno/Errno_pm.PL
ext/POSIX/POSIX.pm
ext/POSIX/POSIX.pod
ext/POSIX/POSIX.xs
ext/POSIX/typemap
ext/SDBM_File/sdbm/sdbm.c
hints/cygwin.sh
hints/nonstopux.sh
lib/ExtUtils/Manifest.pm
lib/File/Temp.pm
lib/Math/Complex.pm
lib/Net/Ping.pm
lib/Tie/RefHash.pm
lib/Tie/SubstrHash.pm
mg.c
perl.h
pod/buildtoc.PL
pod/perl.pod
pod/perl5004delta.pod
pod/perl5005delta.pod
pod/perldebguts.pod
pod/perldebtut.pod
pod/perldebug.pod
pod/perldelta.pod
pod/perldiag.pod
pod/perlembed.pod
pod/perlfaq.pod
pod/perlfaq1.pod
pod/perlfaq2.pod
pod/perlfaq3.pod
pod/perlfaq4.pod
pod/perlfaq5.pod
pod/perlfaq6.pod
pod/perlfaq7.pod
pod/perlfaq8.pod
pod/perlfaq9.pod
pod/perlfilter.pod
pod/perlfunc.pod
pod/perlguts.pod
pod/perlhack.pod
pod/perlhist.pod
pod/perlipc.pod
pod/perllexwarn.pod
pod/perllocale.pod
pod/perlmodlib.pod
pod/perlnumber.pod
pod/perlop.pod
pod/perlopentut.pod
pod/perlport.pod
pod/perlre.pod
pod/perlsec.pod
pod/perlsub.pod
pod/perltie.pod
pod/perltoot.pod
pod/perltootc.pod
pod/perlunicode.pod
pod/perlvar.pod
pp_ctl.c
pp_hot.c
pp_sys.c
proto.h
sv.c
t/comp/proto.t
t/lib/bigfltpm.t
t/lib/cgi-function.t
t/lib/cgi-html.t
t/lib/syslog.t
t/lib/tie-refhash.t [new file with mode: 0644]
t/lib/tie-substrhash.t [new file with mode: 0644]
t/op/misc.t
t/op/pos.t
t/op/taint.t
t/pragma/locale.t
t/pragma/utf8.t
t/pragma/warn/pp_sys
toke.c
unixish.h
utf8.c
util.c
vms/gen_shrfls.pl
vms/perlvms.pod
vos/config.alpha.def
vos/config.alpha.h
vos/config.ga.def
vos/config.ga.h
win32/config.bc
win32/config.gc
win32/config.vc

diff --git a/AUTHORS b/AUTHORS
index b3d240c..1b80418 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
-# Two sections: the real one and the virtual one.
-# The real section has three \t+ fields: alias, name, email.
-# The sections are separated by one or more empty lines.
-# The virtual section (each record two \t+ separated fields) builds
-# meta-aliases based on the real section.
-
-alan.burlison  Alan Burlison           Alan.Burlison@UK.Sun.com
-allen          Norton T. Allen         allen@huarp.harvard.edu
-bradapp                Brad Appleton           bradapp@enteract.com
-cbail          Charles Bailey          bailey@newman.upenn.edu
-dgris          Daniel Grisinger        dgris@dimensional.com
-dmulholl       Daniel Yacob            dmulholl@cs.indiana.edu
-dogcow         Tom Spindler            dogcow@merit.edu
-domo           Dominic Dunlop          domo@computer.org
-doug           Doug MacEachern         dougm@covalent.net
-doughera       Andy Dougherty          doughera@lafcol.lafayette.edu
-efifer         Eric Fifer              EFifer@sanwaint.com
-francois       Francois Desarmenien    desar@club-internet.fr
-gbarr          Graham Barr             gbarr@ti.com
-gerben         Gerben Wierda           Gerben_Wierda@RnA.nl
-gerti          Gerd Knops              gerti@BITart.com
-gibreel                Stephen Zander          gibreel@pobox.com
-gnat           Nathan Torkington       gnat@frii.com
-gsar           Gurusamy Sarathy        gsar@activestate.com
-hansmu         Hans Mulder             hansmu@xs4all.nl
-hops           Mike Hopkirk            hops@sco.com
-hugo           Hugo van der Sanden     hv@crypt.demon.co.uk
-ilya           Ilya Zakharevich        ilya@math.ohio-state.edu
-jbuehler       Joe Buehler             jbuehler@hekimian.com
-jfs            John Stoffel            jfs@fluent.com
-jhi            Jarkko Hietaniemi       jhi@iki.fi
-jon            Jon Orwant              orwant@oreilly.com
-jvromans       Johan Vromans           jvromans@squirrel.nl
-k              Andreas König           a.koenig@mind.de
-kjahds         Kenneth Albanowski      kjahds@kjahds.com
-krishna                Krishna Sethuraman      krishna@sgi.com
-kstar          Kurt D. Starsinic       kstar@chapin.edu
-lane           Charles Lane            lane@DUPHY4.Physics.Drexel.Edu
-lstein         Lincoln D. Stein        lstein@genome.wi.mit.edu
-lutherh                Luther Huffman          lutherh@stratcom.com
-lutz           Mark P. Lutz            mark.p.lutz@boeing.com
-lwall          Larry Wall              larry@wall.org
-makemaker      MakeMaker list          makemaker@franz.ww.tu-berlin.de
-mbiggar                Mark A Biggar           mab@wdl.loral.com
-mbligh         Martin J. Bligh         mbligh@sequent.com
-mikestok       Mike Stok               mike@stok.co.uk
-millert                Todd Miller             millert@openbsd.org
-mkvale         Mark Kvale              kvale@phy.ucsf.edu
-mjd            Mark-Jason Dominus      mjd@plover.com
-mjtg           Mike Guy                mjtg@cam.ac.uk
-laszlo.molnar  Laszlo Molnar           Laszlo.Molnar@eth.ericsson.se
-mpeix          Mark Bixby              markb@cccd.edu
-muir           David Muir Sharnoff     muir@idiom.com
-neale          Neale Ferguson          neale@VMA.TABNSW.COM.AU
-nik            Nick Ing-Simmons        nik@tiuk.ti.com
-okamoto                Jeff Okamoto            okamoto@corp.hp.com
-paul_green     Paul Green              Paul_Green@stratus.com
-pmarquess      Paul Marquess           Paul.Marquess@btinternet.com
-pomeranz       Hal Pomeranz            pomeranz@netcom.com
-pudge          Chris Nandor            pudge@pobox.com
-pueschel       Norbert Pueschel        pueschel@imsdd.meb.uni-bonn.de
-pvhp           Peter Prymmer           pvhp@forte.com
-raphael                Raphael Manfredi        Raphael.Manfredi@pobox.com
-rdieter                Rex Dieter              rdieter@math.unl.edu
-richard                Richard Foley           Richard.Foley@m.dasa.de
-rra            Russ Allbery            rra@stanford.edu
-rsanders       Robert Sanders          Robert.Sanders@linux.org        
-roberto                Ollivier Robert         roberto@keltia.freenix.fr
-roderick       Roderick Schertler      roderick@argon.org
-roehrich       Dean Roehrich           roehrich@cray.com
-tsanders       Tony Sanders            sanders@bsdi.com
-schinder       Paul Schinder           schinder@pobox.com
-scotth         Scott Henry             scotth@sgi.com
-seibert                Greg Seibert            seibert@Lynx.COM
-simon          Simon Cozens            simon@brecon.co.uk
-spider         Spider Boardman         spider@Orb.Nashua.NH.US
-smccam         Stephen McCamant        smccam@uclink4.berkeley.edu
-sthoenna       Yitzchak Scott-Thoennes sthoenna@efn.org
-sugalskd       Dan Sugalski            dan@sidhe.org
-sundstrom      David Sundstrom         sunds@asictest.sc.ti.com
-tchrist                Tom Christiansen        tchrist@perl.com
-thomas.dorner  Dorner Thomas           Thomas.Dorner@start.de
-tjenness       Tim Jenness             t.jenness@jach.hawaii.edu
-timb           Tim Bunce               Tim.Bunce@ig.co.uk
-tom.horsley    Tom Horsley             Tom.Horsley@mail.ccur.com
-tye            Tye McQueen             tye@metronet.com
-wayne.thompson Wayne Thompson          Wayne.Thompson@Ebay.sun.com
-wilfredo       Wilfredo Sánchez        wsanchez@apple.com
-
-PUMPKING       jhi
-aix            jhi
-amiga          pueschel
-beos           dogcow
-bsdos          tsanders
-cfg            jhi
-cgi            lstein
-complex                jhi,raphael
-cpan           k
-cxux           tom.horsley
-cygwin         win32
-dec_osf                jhi,spider
-dgux           roderick
-doc            tchrist
-dos            laszlo.molnar
-dynix/ptx      mbligh
-ebcdic         os390,vmesa,posix-bc
-filespec       kjahds
-freebsd                roberto
-hpux           okamoto,jhi
-irix           scotth,krishna,jfs,kstar
-jpl            gibreel
-lexwarn                pmarquess
-linux          kjahds,kstar
-locale         jhi,domo
-machten                domo
-mm             makemaker
-netbsd         jhi
-next           gerben,hansmu
-openbsd                millert
-os2            ilya
-os390          pvhp
-plan9          lutherl
-posix-bc       thomas.dorner
-powerux                tom.horsley
-qnx            allen
-regex          ilya,jfriedl,hugo,mjd
-sco            francois,hops
-solaris                doughera,alan.burlison
-step           gerti,hansmu,rdieter
-sunos4         doughera
-svr4           tye
-unicos         jhi,lutz
-uwin           jbuehler
-vmesa          neale
-vms            sugalskd,cbail
-vos            paul_green
-warn           pmarquess
-win32          gsar
+# To give due honor to those who have made Perl 5 what is is today,
+# here are easily-from-changelogs-extractable people and their
+# (hopefully) current and preferred email addresses (as of late 2000
+# if known) from the Changes files.  These people have either submitted
+# patches or suggestions, or their bug reports or comments have inspired
+# the appropriate patches.  Corrections and additions welcome.
+#
+-- 
+Aaron B. Dossett               <aaron@iglou.com>
+Abigail                        <abigail@foad.org>
+Achim Bohnet                   <ach@mpe.mpg.de>
+Adam Krolnik                   <adamk@gypsy.cyrix.com>
+Akim Demaille                  <akim@epita.fr>
+Alan Burlison                  <Alan.Burlison@uk.sun.com>
+Alan Champion                  <achampio@lehman.com>
+Alan Harder                    <Alan.Harder@Ebay.Sun.COM>
+Alan Modra
+Albert Dvornik                 <bert@genscan.com>
+Alexander Smishlajev           <als@turnhere.com>
+Ambrose Kofi Laing
+Andreas Klussmann              <andreas@infosys.heitec.de>
+Andreas König                  <a.koenig@mind.de>
+Andreas Schwab                 <schwab@suse.de>
+Andrew Bettison                <andrewb@zip.com.au>
+Andrew Cohen                   <cohen@andy.bu.edu>
+Andrew M. Langmead             <aml@world.std.com>
+Andrew Pimlott                 <pimlott@abel.math.harvard.edu>
+Andrew Vignaux
+Andrew Wilcox
+Andy Dougherty                 <doughera@lafayette.edu>
+Anno Siegel                    <anno4000@lublin.zrz.tu-berlin.de>
+Anthony David                  <adavid@netinfo.com.au>
+Anton Berezin                  <tobez@plab.ku.dk>
+Art Green                      <Art_Green@mercmarine.com>
+Artur                          <artur@vogon-solutions.com>
+Barrie Slaymaker               <barries@slaysys.com>
+Barry Friedman
+Ben Tilly                      <ben_tilly@hotmail.com>
+Benjamin Low                   <b.d.low@unsw.edu.au>
+Benjamin Stuhl                 <sho_pi@hotmail.com>
+Benjamin Sugars                <bsugars@canoe.ca>
+Bernard Quatermass             <bernard@quatermass.co.uk>
+Bill Campbell                  <bill@celestial.com>
+Bill Glicker                   <billg@burrelles.com>
+Billy Constantine              <wdconsta@cs.adelaide.edu.au>
+Blair Zajac                    <bzajac@geostaff.com>
+Boyd Gerber                    <gerberb@zenez.com>
+Brad Appleton                  <bradapp@enteract.com>
+Brad Hughes                    <brad@tgsmc.com>
+Brad Lanam                     <bll@gentoo.com>
+Brent B. Powers                <powers@ml.com>
+Brian Callaghan                <callagh@itginc.com>
+Brian Clarke                   <clarke@appliedmeta.com>
+Brian Grossman
+Brian Harrison                 <brie@corp.home.net>
+Brian Jepson                   <bjepson@home.com>
+Brian Katzung
+Brian Reichert
+Brian S. Cashman               <bsc@umich.edu>
+Bruce Barnett                  <barnett@grymoire.crd.ge.com>
+Bruce J. Keeler                <bkeelerx@iwa.dp.intel.com>
+Bruce P. Schuck                <bruce@aps.org>
+Byron Brummer                  <byron@omix.com>
+Calle Dybedahl                 <calle@lysator.liu.se>
+Carl Witty
+Cary D. Renzema                <caryr@mxim.com>
+Casey R. Tweten                <crt@kiski.net>
+Castor Fu
+Chaim Frenkel                  <chaimf@pobox.com> 
+Charles Bailey                 <bailey@newman.upenn.edu>
+Charles F. Randall             <crandall@free.click-n-call.com>
+Charles Lane                   <lane@DUPHY4.Physics.Drexel.Edu>
+Chip Salzenberg                <chip@pobox.com>
+Chris Faylor                   <cgf@bbc.com>
+Chris Nandor                   <pudge@pobox.com>
+Chris Wick                     <cwick@lmc.com>
+Christian Kirsch               <ck@held.mind.de>
+Christopher Davis              <ckd@loiosh.kei.com>
+Chuck D. Phillips              <cdp@hpescdp.fc.hp.com>
+Chunhui Teng                   <cteng@nortel.ca>
+Clark Cooper                   <coopercc@netheaven.com>
+Clinton Pierce                 <cpierce1@ford.com>
+Colin Kuskie                   <ckuskie@cadence.com>
+Conrad Augustin
+Conrad E. Kimball              <cek@tblv021.ca.boeing.com>
+Craig A. Berry                 <craig.berry@psinetcs.com>
+Dale Amon
+Damian Conway                  <damian@cs.monash.edu.au>
+Damon Atkins                   <Damon.Atkins@nabaus.com.au>
+Dan Boorstein                  <dan_boo@bellsouth.net>
+Dan Carson
+Dan Schmidt                    <dfan@harmonixmusic.com>
+Dan Sugalski                   <dan@sidhe.org>
+Daniel Chetlin                 <daniel@chetlin.com>
+Daniel Grisinger               <dgris@dimensional.com>
+Daniel Muiño                   <dmuino@afip.gov.ar>
+Daniel S. Lewart               <lewart@vadds.cvm.uiuc.edu>
+Daniel Yacob                   <dmulholl@cs.indiana.edu>
+Danny R. Faught                <faught@mailhost.rsn.hp.com>
+Danny Sadinoff                 <sadinoff@olf.com>
+Darrell Kindred                <dkindred+@cmu.edu>
+Darrell Schiebel
+Darren/Torin/Who Ever...       <torin@daft.com>
+Dave Bianchi
+Dave Hartnoll                  <Dave_Hartnoll@3b2.com>
+Dave Nelson                    <David.Nelson@bellcow.com>
+Dave Schweisguth
+David Billinghurst             <David.Billinghurst@riotinto.com.au>
+David Campbell
+David Couture
+David Dyck                     <dcd@tc.fluke.com>
+David F. Haertig               <dfh@dwroll.lucent.com>
+David Filo
+David Glasser                  <me@davidglasser.net>
+David Hammen                   <hammen@gothamcity.jsc.nasa.gov>
+David J. Fiander               <davidf@mks.com>
+David Kerry                    <davidk@tor.securecomputing.com>
+David Muir Sharnoff            <muir@idiom.com>
+David R. Favor                 <dfavor@austin.ibm.com>
+David Sparks                   <daves@ActiveState.com>
+David Sundstrom                <sunds@asictest.sc.ti.com>
+Davin Milun                    <milun@cs.Buffalo.EDU>
+Dean Roehrich                  <roehrich@cray.com>
+Dennis Marsa                   <dennism@cyrix.com>
+dive                           <dive@ender.com>
+Dominic Dunlop                 <domo@computer.org>
+Dominique Dumont               <Dominique_Dumont@grenoble.hp.com>
+Doug Campbell
+Doug MacEachern                <dougm@covalent.net>
+Douglas E. Wegscheid           <wegscd@whirlpool.com>
+Douglas Lankshear              <dougl@activestate.com>
+Dov Grobgeld
+Drago Goricanec                <drago@raptor.otsd.ts.fujitsu.co.jp>
+Ed Peschko                     <epeschko@den-mdev1>
+Elaine -HFB- Ashton            <elaine@chaos.wustl.edu>
+Eric Arnold                    <eric.arnold@sun.com>
+Eric Bartley                   <bartley@icd.cc.purdue.edu>
+Eric E. Coe                    <Eric.Coe@oracle.com>
+Eric Fifer                     <egf7@columbia.edu>
+Erich Rickheit
+Eryq                           <eryq@zeegee.com>
+Eugene Alterman                <Eugene.Alterman@bremer-inc.com>
+Fabien Tassin                  <tassin@eerie.fr>
+Felix Gallo                    <fgallo@etoys.com>
+Florent Guillaume
+Frank Crawford
+Frank Ridderbusch              <Frank.Ridderbusch@pdb.siemens.de>
+Frank Tobin                    <ftobin@uiuc.edu>
+François Désarménien           <desar@club-internet.fr>
+Fréderic Chauveau              <fmc@pasteur.fr>
+G. Del Merritt                 <del@intranetics.com>
+Gabe Schaffer
+Gary Clark                     <GaryC@mail.jeld-wen.com>
+Gary Ng                        <71564.1743@compuserve.com>
+Gerben Wierda                  <G.C.Th.Wierda@AWT.nl>
+Gerd Knops                     <gerti@BITart.com>
+Giles Lean                     <giles@nemeton.com.au>
+Gisle Aas                      <gisle@aas.no>
+Grace Lee
+Graham Barr                    <gbarr@pobox.com>
+Graham TerMarsch               <grahamt@ActiveState.com>
+Greg Bacon                     <gbacon@itsc.uah.edu>
+Greg Chapman                   <glc@well.com>
+Greg Earle
+Greg Kuperberg
+Greg Seibert                   <seibert@Lynx.COM>
+Greg Ward                      <gward@ase.com>
+Gregory Martin Pfeil           <pfeilgm@technomadic.org>
+Gurusamy Sarathy               <gsar@activestate.com>
+Gustaf Neumann
+Guy Decoux                     <decoux@moulon.inra.fr>
+H.Merijn Brand                 <h.m.brand@hccnet.nl>
+Hal Pomeranz                   <pomeranz@netcom.com>
+Hallvard B Furuseth            <h.b.furuseth@usit.uio.no>
+Hans Mulder                    <hansmu@xs4all.nl>
+Hans de Graaff
+Harold O Morris
+Harry Edmon
+Helmut Jarausch                <jarausch@numa1.igpm.rwth-aachen.de>
+Henrik Tougaard                <ht.000@foa.dk>
+Holger Bechtold
+Horst von Brand                <vonbrand@sleipnir.valparaiso.cl>
+Hubert Feyrer                  <hubert.feyrer@informatik.fh-regensburg.de>
+Hugo van der Sanden            <hv@crypt0.demon.co.uk>
+Hunter Kelly                   <retnuh@zule.pixar.com>
+Huw Rogers
+Ian Maloney                    <ian.malonet@ubs.com>
+Ian Phillipps                  <ian@dial.pipex.com>
+Ignasi Roca                    <ignasi.roca@fujitsu.siemens.es>
+Ilya Sandler                   <Ilya.Sandler@etak.com>
+Ilya Zakharevich               <ilya@math.ohio-state.edu>
+Inaba Hiroto                   <inaba@st.rim.or.jp>
+Irving Reid                    <irving@tor.securecomputing.com>
+J. David Blackstone            <jdb@dfwnet.sbms.sbc.com>
+J. van Krieken                 <John.van.Krieken@ATComputing.nl>
+JD Laub                        <jdl@access-health.com>
+Jack Shirazi                   <JackS@GemStone.com>
+Jacqui Caren                   <Jacqui.Caren@ig.co.uk>
+James FitzGibbon               <james@ican.net>
+Jamshid Afshar
+Jan D.                         <jan.djarv@mbox200.swipnet.se>
+Jan Dubois                     <jand@activestate.com>
+Jan Pazdziora                  <adelton@fi.muni.cz>
+Jan-Pieter Cornet              <johnpc@xs4all.nl>
+Jared Rhine                    <jared@organic.com>
+Jarkko Hietaniemi              <jhi@iki.fi>
+Jason A. Smith                 <smithj4@rpi.edu>
+Jason Shirk
+Jason Stewart                  <jasons@cs.unm.edu>
+Jason Varsoke                  <jjv@caesun10.msd.ray.com>
+Jay Rogers                     <jay@rgrs.com>
+Jeff Bouis
+Jeff McDougal                  <jmcdo@cris.com>
+Jeff Okamoto                   <okamoto@corp.hp.com>
+Jeff Pinyan                    <jeffp@crusoe.net>
+Jeff Urlwin                    <jurlwin@access.digex.net>
+Jeffrey Friedl                 <jfriedl@yahoo-inc.com>
+Jeffrey S. Haemer              <jsh@woodcock.boulder.qms.com>
+Jens Hamisch                   <jens@Strawberry.COM>
+Jens T. Berger Thielemann      <jensthi@ifi.uio.no>
+Jens Thomsen                   <jens@fiend.cis.com>
+Jens-Uwe Mager                 <jum@helios.de>
+Jeremy D. Zawodny              <jzawodn@wcnet.org>
+Jerome Abela                   <abela@hsc.fr>
+Jim Anderson                   <jander@ml.com>
+Jim Avera                      <avera@hal.com>
+Jim Balter
+Jim Meyering                   <meyering@asic.sc.ti.com>
+Jim Miner                      <jfm@winternet.com>
+Jim Richardson
+Joachim Huober
+Jochen Wiedmann                <joe@ispsoft.de>
+Joe Buehler                    <jhpb@hekimian.com>
+Joe Smith                      <jsmith@inwap.com>
+Joerg Porath                   <Joerg.Porath@informatik.tu-chemnitz.de>
+Joergen Haegg
+Johan Holtman
+Johan Vromans                  <jvromans@squirrel.nl>
+Johann Klasek                  <jk@auto.tuwien.ac.at>
+John Bley                      <jbb6@acpub.duke.edu>
+John Borwick                   <jhborwic@unity.ncsu.edu>
+John Cerney                    <j-cerney1@ti.com>
+John D Groenveld               <groenvel@cse.psu.edu>
+John Hughes                    <john@AtlanTech.COM>
+John L. Allen                  <allen@grumman.com>
+John Macdonald                 <jmm@revenge.elegant.com>
+John Nolan                     <jpnolan@Op.Net>
+John Peacock                   <jpeacock@rowman.com>
+John Rowe
+John Stoffel                   <jfs@fluent.com>
+John Tobey                     <jtobey@john-edwin-tobey.org>
+Jon Orwant                     <orwant@oreilly.com>
+Jonathan Biggar                <jon@sems.com>
+Jonathan D Johnston            <jdjohnston2@juno.com>
+Jonathan Fine                  <jfine@borders.com>
+Jonathan I. Kamens             <jik@kamens.brookline.ma.us>
+Jonathan Roy                   <roy@idle.com>
+Joseph N. Hall                 <joseph@cscaper.com>
+Joseph S. Myers                <jsm28@hermes.cam.ac.uk>
+Joshua Pritikin                <joshua.pritikin@db.com>
+Juan Gallego                   <Little.Boss@physics.mcgill.ca>
+Julian Yip                     <julian@imoney.com>
+Ka-Ping Yee
+Karl Glazebrook                <kgb@aaossz.aao.GOV.AU>
+Karl Heuer                     <kwzh@gnu.org>
+Karl Simon Berg
+Karsten Sperling               <spiff@phreax.net>
+Keith Neufeld                  <neufeld@fast.pvi.org>
+Keith Thompson
+Ken Estes                      <estes@ms.com>
+Ken Fox                        <kfox@ford.com>
+Ken MacLeod                    <ken@bitsko.slc.ut.us>
+Ken Shan                       <ken@digitas.harvard.edu>
+Kenneth Albanowski             <kjahds@kjahds.com>
+Kenneth Duda                   <kjd@cisco.com>
+Keong Lim                      <Keong.Lim@sr.com.au>
+Kim Frutiger
+Kragen Sitaker                 <kragen@dnaco.net>
+Krishna Sethuraman             <krishna@sgi.com>
+Kurt D. Starsinic              <kstar@smithrenaud.com>
+Kyriakos Georgiou
+Larry Parmelee                 <parmelee@CS.Cornell.EDU>
+Larry Schuler
+Larry Schwimmer                <rosebud@cyclone.Stanford.EDU>
+Larry W. Virden                <lvirden@cas.org>
+Larry Wall                     <larry@wall.org>
+Lars Hecking                   <lhecking@nmrc.ucc.ie>
+Laszlo Molnar                  <laszlo.molnar@eth.ericsson.se>
+Les Peters                     <lpeters@aol.net>
+Lincoln D. Stein               <lstein@cshl.org>
+Lionel Cons                    <lionel.cons@cern.ch>
+Luca Fini
+Lupe Christoph                 <lupe@lupe-christoph.de>
+Luther Huffman                 <lutherh@stratcom.com>
+M. J. T. Guy                   <mjtg@cam.ac.uk>
+Major Sébastien                <sebastien.major@crdp.ac-caen.fr>
+Makoto MATSUSHITA              <matusita@ics.es.osaka-u.ac.jp>
+Malcolm Beattie                <mbeattie@sable.ox.ac.uk>
+Marc Lehmann                   <pcg@goof.com>
+Marc Paquette
+Marcel Grunauer                <marcel@codewerk.com>
+Mark A Biggar                  <mab@wdl.loral.com>
+Mark Bixby                     <mark@bixby.org>
+Mark Dickinson                 <dickins3@fas.harvard.edu>
+Mark Hanson
+Mark K Trettin                 <mkt@lucent.com>
+Mark Kaehny
+Mark Kettenis                  <kettenis@wins.uva.nl>
+Mark Knutsen
+Mark Kvale                     <kvale@phy.ucsf.edu>
+Mark Leighton Fisher           <fisherm@tce.com>
+Mark P. Lutz                   <mark.p.lutz@boeing.com>
+Mark R. Levinson               <mrl@isc.upenn.edu>
+Mark-Jason Dominus             <mjd@plover.com>
+Martijn Koster                 <mak@excitecorp.com>
+Martin J. Bligh                <mbligh@sequent.com>
+Martin Jost
+Martin Lichtin                 <lichtin@bivio.com>
+Martin Plechsmid               <plechsmi@karlin.mff.cuni.cz>
+Marty Lucich                   <marty@netcom.com>
+Martyn Pearce                  <martyn@inpharmatica.co.uk>
+Masahiro KAJIURA               <masahiro.kajiura@toshiba.co.jp>
+Mathias Koerber                <mathias@dnssec1.singnet.com.sg>
+Matt Kimball
+Matthew Green                  <mrg@splode.eterna.com.au>
+Matthew T Harden               <mthard@mthard1.monsanto.com>
+Matthias Ulrich Neeracher      <neeri@iis.ee.ethz.ch>
+Matthias Urlichs               <smurf@noris.net>
+Maurizio Loreti                <maurizio.loreti@pd.infn.it>
+Michael Cook                   <mcook@cognex.com>
+Michael De La Rue              <mikedlr@tardis.ed.ac.uk>
+Michael Engel                  <engel@nms1.cc.huji.ac.il>
+Michael G Schwern              <schwern@pobox.com>
+Michael H. Moran               <mhm@austin.ibm.com>
+Michael Mahan                  <mahanm@nextwork.rose-hulman.edu>
+Michael Stevens                <mstevens@globnix.org>
+Michele Sardo
+Mik Firestone                  <fireston@lexmark.com>
+Mike Fletcher
+Mike Hopkirk                   <hops@sco.com>
+Mike Rogers
+Mike Stok                      <mike@stok.co.uk>
+Mike W Ellwood                 <mwe@rl.ac.uk>
+Milton Hankins                 <webtools@uewrhp03.msd.ray.com>
+Milton L. Hankins              <mlh@swl.msd.ray.com>
+Molnar Laszlo                  <molnarl@cdata.tvnet.hu>
+Murray Nesbitt                 <mjn@pathcom.com>
+Nathan Kurz                    <nate@valleytel.net>
+Nathan Torkington              <gnat@frii.com>
+Neale Ferguson                 <neale@VMA.TABNSW.COM.AU>
+Neil Bowers                    <neilb@cre.canon.co.uk>
+Nicholas Clark                 <nick@ccl4.org>
+Nick Duffek
+Nick Gianniotis
+Nick Ing-Simmons               <nick@ing-simmons.net>
+Norbert Pueschel               <pueschel@imsdd.meb.uni-bonn.de>
+Norton T. Allen                <allen@huarp.harvard.edu>
+Olaf Flebbe                    <olaf@science-computing.de>
+Olaf Titz                      <olaf@bigred.inka.de>
+Ollivier Robert                <roberto@keltia.freenix.fr>
+Owen Taylor                    <owt1@cornell.edu>
+Patrick Hayes                  <Patrick.Hayes.CAP_SESA@renault.fr>
+Patrick O'Brien                <pdo@cs.umd.edu>
+Paul A Sand
+Paul David Fardy               <pdf@morgan.ucs.mun.ca>
+Paul Green                     <Paul_Green@stratus.com>
+Paul Hoffman                   <phoffman@proper.com>
+Paul Holser                    <Paul.Holser.pholser@nortelnetworks.com>
+Paul Johnson                   <pjcj@transeda.com>
+Paul Marquess                  <Paul.Marquess@btinternet.com>
+Paul Moore                     <Paul.Moore@uk.origin-it.com>
+Paul Moore                     <gustav@morpheus.demon.co.uk>
+Paul Rogers
+Paul Saab                      <ps@yahoo-inc.com>
+Paul Schinder                  <schinder@pobox.com>
+Pete Peterson
+Peter Chines                   <pchines@nhgri.nih.gov>
+Peter Gordon
+Peter Haworth                  <pmh@edison.ioppublishing.com>
+Peter J. Farley III            <pjfarley@banet.net>
+Peter Jaspers-Fayer
+Peter Prymmer                  <pvhp@forte.com>
+Peter Scott                    <Peter@PSDT.com>
+Peter Wolfe                    <wolfe@teloseng.com>
+Peter van Heusden              <pvh@junior.uwc.ac.za>
+Petter Reinholdtsen            <pere@hungry.com>
+Phil Lobbes                    <phil@finchcomputer.com>
+Philip Hazel
+Philip Newton                  <pne@cpan.org>
+Piers Cawley                   <pdcawley@bofh.org.uk>
+Piotr Klaban                   <makler@oryl.man.torun.pl>
+Prymmer/Kahn                   <pvhp@best.com>
+Quentin Fennessy
+Radu Greab                     <radu@netsoft.ro>
+Ralf S. Engelschall            <rse@engelschall.com>
+Randal L. Schwartz             <merlyn@stonehenge.com>
+Randy J. Ray                   <rjray@redhat.com>
+Raphael Manfredi               <Raphael.Manfredi@pobox.com>
+Raymund Will                   <ray@caldera.de>
+Rex Dieter                     <rdieter@math.unl.edu>
+Rich Morin                     <rdm@cfcl.com>
+Richard A. Wells               <Rwells@uhs.harvard.edu>
+Richard Foley                  <Richard.Foley@m.dasa.de>
+Richard L. England             <richard_england@mentorg.com>
+Richard L. Maus, Jr.           <rmaus@monmouth.com>
+Richard Soderberg              <rs@crystalflame.net>
+Rick Delaney                   <rick@consumercontact.com>
+Rick Pluta
+Rickard Westman
+Rob Henderson                  <robh@cs.indiana.edu>
+Robert Partington
+Robert Sanders                 <Robert.Sanders@linux.org>
+Robert Spier                   <rspier@pobox.com>
+Robin Barker                   <rmb1@cise.npl.co.uk>
+Robin Houston                  <robin@nml.guardian.co.uk>
+Rocco Caputo                   <troc@netrus.net>
+Roderick Schertler             <roderick@argon.org>
+Rodger Anderson
+Ronald F. Guilmette            <rfg@monkeys.com>
+Ronald J. Kimball              <rjk@linguist.dartmouth.edu>
+Ruben Schattevoy               <schattev@imb-jena.de>
+Rujith S. de Silva             <desilva@netbox.com>
+Russ Allbery                   <rra@stanford.edu>
+Russell Fulton                 <russell@ccu1.auckland.ac.nz>
+Russell Mosemann
+Ryan Herbert                   <rherbert@sycamorehq.com>
+SAKAI Kiyotaka                 <ksakai@netwk.ntt-at.co.jp>
+Samuli Kärkkäinen              <skarkkai@woods.iki.fi>
+Scott Gifford                  <sgifford@tir.com>
+Scott Henry                    <scotth@sgi.com>
+Sean Robinson                  <robinson_s@sc.maricopa.edu>
+Sean Sheedy                    <seans@ncube.com>
+Shigeya Suzuki                 <shigeya@foretune.co.jp>
+Shishir Gundavaram             <shishir@ruby.ora.com>
+Simon Cozens                   <simon@cozens.net>
+Simon Leinen
+Simon Parsons
+Slaven Rezic                   <eserte@cs.tu-berlin.de>
+Spider Boardman                <spider@orb.nashua.nh.us>
+Stephane Payrard               <stef@francenet.fr>
+Stephen McCamant               <alias@mcs.com>
+Stephen O. Lidie               <lusol@turkey.cc.Lehigh.EDU>
+Stephen P. Potter              <spp@ds.net>
+Stephen Zander                 <gibreel@pobox.com>
+Steve A Fink                   <sfink@cs.berkeley.edu>
+Steve Kelem                    <steve.kelem@xilinx.com>
+Steve McDougall                <swmcd@world.std.com>
+Steve Nielsen                  <spn@enteract.com>
+Steve Pearlmutter
+Steve Vinoski
+Steven Knight                  <knight@theopera.baldmt.citilink.com>
+Steven N. Hirsch               <hirschs@stargate.btv.ibm.com>
+Steven Parkes                  <parkes@sierravista.com>
+Sven Verdoolaege               <skimo@breughel.ufsia.ac.be>
+SynaptiCAD, Inc.               <sales@syncad.com>
+Taro KAWAGISHI
+Ted Ashton                     <ashted@southern.edu>
+Ted Law                        <tedlaw@cibcwg.com>
+Thad Floryan                   <thad@thadlabs.com>
+Thomas Bowditch                <bowditch@inmet.com>
+Thomas Conté                   <tom@fr.uu.net>
+Thomas Dorner                  <Thomas.Dorner@start.de>
+Thomas Kofler
+Thomas König
+Tim Ayers                      <tayers@bridge.com>
+Tim Bunce                      <Tim.Bunce@ig.co.uk>
+Tim Conrow                     <tim@spindrift.srl.caltech.edu>
+Tim Freeman
+Tim Jenness                    <t.jenness@jach.hawaii.edu>
+Tim Mooney                     <mooney@dogbert.cc.ndsu.NoDak.edu>
+Tim Witham                     <twitham@pcocd2.intel.com>
+Tkil                           <tkil@reptile.scrye.com>
+Todd C. Miller                 <Todd.Miller@courtesan.com>
+Todd Miller                    <millert@openbsd.org>
+Tom Christiansen               <tchrist@perl.com>
+Tom Horsley                    <Tom.Horsley@mail.ccur.com>
+Tom Hughes                     <tom@compton.nu>
+Tom Phoenix                    <rootbeer@teleport.com>
+Tom Spindler                   <dogcow@merit.edu>
+Tony Camas
+Tony Cook                      <tony@develop-help.com>
+Tony Sanders                   <sanders@bsdi.com>
+Tor Lillqvist                  <tml@hemuli.tte.vtt.fi>
+Trevor Blackwell               <tlb@viaweb.com>
+Tuomas J. Lukka                <tjl@lukka.student.harvard.edu>
+Tye McQueen                    <tye@metronet.com>
+Ulrich Kunitz
+Ulrich Pfeifer                 <pfeifer@wait.de>
+Vadim Konovalov                <vkonovalov@lucent.com>
+Valeriy E. Ushakov             <uwe@ptc.spbu.ru>
+Vishal Bhatia                  <vishal@deja.com>
+Vlad Harchev                   <hvv@hippo.ru>
+Vladimir Alexiev               <vladimir@cs.ualberta.ca>
+W. Phillip Moore               <wpm@ms.com>
+Warren Hyde                    <whyde@pezz.sps.mot.com>
+Warren Jones                   <wjones@tc.fluke.com>
+Wayne Berke
+Wayne Scott                    <wscott@ichips.intel.com>
+Wayne Thompson                 <Wayne.Thompson@Ebay.sun.com>
+Wilfredo Sánchez               <wsanchez@apple.com>
+William Mann                   <wmann@avici.com>
+William J. Middleton           <William.Middleton@oslo.mobil.telenor.no> 
+William R Ward                 <hermit@BayView.COM>
+William Setzer
+Winfried König                 <win@in.rhein-main.de>
+Wolfgang Laun                  <Wolfgang.Laun@alcatel.at>
+Yary Hluchan
+Yasushi Nakajima               <sey@jkc.co.jp>
+Yitzchak Scott-Thoennes        <sthoenna@efn.org>
+Yutaka OIWA                    <oiwa@is.s.u-tokyo.ac.jp>
+Yutao Feng
+Zachary Miller                 <zcmiller@simon.er.usgs.gov>
diff --git a/Changes b/Changes
index ed7c4e1..0df8f74 100644 (file)
--- a/Changes
+++ b/Changes
@@ -16207,7 +16207,7 @@ ____________________________________________________________________________
 [  3914] By: jhi                                   on 1999/08/03  21:11:11
         Log: The op/filetest.t failed subtest 7 if testing as root.
              
-             From: =?iso-8859-1?Q?Fran=E7ois=20D=E9sarm=E9nien?= <desar@club-internet.fr>
+             From: François Désarménien <desar@club-internet.fr>
              To: perl5-porters@perl.org
              Subject: [ID 19990727.039] Not OK: perl 5.00558 on i386-sco 3.2v5.0.4
              Date: Tue, 27 Jul 1999 22:54:05 +0200
index aa190ed..bb3ca31 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Fri Oct 27 18:57:46 EET DST 2000 [metaconfig 3.0 PL70]
+# Generated on Wed Nov  8 01:38:53 EET 2000 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.org)
 
 cat >/tmp/c1$$ <<EOF
@@ -348,6 +348,7 @@ d_endsent=''
 d_fchmod=''
 d_fchown=''
 d_fcntl=''
+d_fcntl_can_lock=''
 d_fd_macros=''
 d_fd_set=''
 d_fds_bits=''
@@ -2263,7 +2264,10 @@ if test -f config.sh; then
        rp="I see a config.sh file.  Shall I use it to set the defaults?"
        . UU/myread
        case "$ans" in
-       n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
+       n*|N*) echo "OK, I'll ignore it."
+               mv config.sh config.sh.old
+               myuname="$newmyuname"
+               ;;
        *)  echo "Fetching default answers from your old config.sh file..." >&4
                tmp_n="$n"
                tmp_c="$c"
@@ -2428,7 +2432,7 @@ EOM
                        esac
                        ;;
                next*) osname=next ;;
-               NonStop-UX) osname=nonstopux ;;
+               nonstop-ux) osname=nonstopux ;;
                POSIX-BC | posix-bc ) osname=posix-bc
                        osvers="$3"
                        ;;
@@ -2670,7 +2674,6 @@ cd UU
        ;;
 esac
 test "$override" && . ./optdef.sh
-myuname="$newmyuname"
 
 : Restore computed paths
 for file in $loclist $trylist; do
@@ -7264,6 +7267,25 @@ rp='Perl administrator e-mail address'
 . ./myread
 perladmin="$ans"
 
+: determine whether to only install version-specific parts.
+echo " "
+$cat <<EOM
+Do you want to install only the version-specific parts of the perl
+distribution?  Usually you do *not* want to do this.
+EOM
+case "$versiononly" in
+"$define"|[Yy]*|true) dflt='y' ;;
+*) dflt='n';
+esac
+rp="Do you want to install only the version-specific parts of perl?"
+. ./myread
+case "$ans" in
+[yY]*) val="$define";;
+*)     val="$undef" ;;
+esac
+set versiononly
+eval $setvar
+
 : figure out how to guarantee perl startup
 case "$startperl" in
 '')
@@ -7278,7 +7300,10 @@ want to share those scripts and perl is not in a standard place
 a shell by starting the script with a single ':' character.
 
 EOH
-               dflt="$binexp/perl"
+               case "$versiononly" in
+               "$define")      dflt="$binexp/perl$version";;  
+               *)              dflt="$binexp/perl";;
+               esac
                rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
                . ./myread
                case "$ans" in
@@ -7443,25 +7468,6 @@ else
        installvendorbin="$vendorbinexp"
 fi
 
-: determine whether to only install version-specific parts.
-echo " "
-$cat <<EOM
-Do you want to install only the version-specific parts of the perl
-distribution?  Usually you do *not* want to do this.
-EOM
-case "$versiononly" in
-"$define"|[Yy]*|true) dflt='y' ;;
-*) dflt='n';
-esac
-rp="Do you want to install only the version-specific parts of perl?"
-. ./myread
-case "$ans" in
-[yY]*) val="$define";;
-*)     val="$undef" ;;
-esac
-set versiononly
-eval $setvar
-
 : see if qgcvt exists
 set qgcvt d_qgcvt
 eval $inlibc
@@ -8841,6 +8847,54 @@ eval $inlibc
 set fcntl d_fcntl
 eval $inlibc
 
+echo " "
+: See if fcntl-based locking works.
+$cat >try.c <<'EOCP'
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+int main() {
+#if defined(F_SETLK) && defined(F_SETLKW)
+     struct flock flock;
+     int retval, fd;
+     fd = open("try.c", O_RDONLY);
+     flock.l_type = F_RDLCK;
+     flock.l_whence = SEEK_SET;
+     flock.l_start = flock.l_len = 0;
+     retval = fcntl(fd, F_SETLK, &flock);
+     close(fd);
+     (retval < 0 ? exit(2) : exit(0));
+#else
+     exit(2);
+#endif
+}
+EOCP
+echo "Checking if fcntl-based file locking works... "
+case "$d_fcntl" in
+"$define")
+       set try
+       if eval $compile_ok; then
+               if ./try; then
+                       echo "Yes, it seems to work."
+                       val="$define"
+               else
+                       echo "Nope, it didn't work."
+                       val="$undef"
+               fi
+       else
+               echo "I'm unable to compile the test program, so I'll assume not."
+               val="$undef"
+       fi
+       ;;
+*) val="$undef";
+       echo "Nope, since you don't even have fcntl()."
+       ;;
+esac
+set d_fcntl_can_lock
+eval $setvar
+$rm -f try*
+
+
 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
 while $test $# -ge 2; do
        case "$1" in
@@ -11488,13 +11542,24 @@ $cat >try.c <<EOP
 #include <stdio.h>
 /* Can we scream? */
 /* Eat dust sed :-) */
+/* In the buffer space, no one can hear you scream. */
 #define FILE_ptr(fp)   $stdio_ptr
 #define FILE_cnt(fp)   $stdio_cnt
+#include <sys/types.h>
 int main() {
        FILE *fp = fopen("try.c", "r");
-       char c = getc(fp);
+       int c;
        char *ptr;
        size_t cnt;
+       if (!fp) {
+           puts("Fail even to read");
+           exit(1);
+       }
+       c = getc(fp); /* Read away the first # */
+       if (c == EOF) {
+           puts("Fail even to read");
+           exit(1);
+       }
        if (!(
                18 <= FILE_cnt(fp) &&
                strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
@@ -11502,12 +11567,12 @@ int main() {
                puts("Fail even to read");
                exit (1);
        }
-       ptr = FILE_ptr(fp);
-       cnt = FILE_cnt(fp);
+       ptr = (char*) FILE_ptr(fp);
+       cnt = (size_t)FILE_cnt(fp);
 
-       FILE_ptr(fp)+= 42;
+       FILE_ptr(fp) += 42;
 
-       if (FILE_ptr(fp) != (ptr + 42)) {
+       if ((char*)FILE_ptr(fp) != (ptr + 42)) {
                printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
                exit (1);
        }
@@ -11536,7 +11601,7 @@ EOP
        if eval $compile; then
                case `./try$exe_ext` in
                Pass_changed)
-                       echo "Increasing ptr in your stdio decreases cnt by the same amount. Good." >&4
+                       echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
                        d_stdio_ptr_lval_sets_cnt="$define" ;;
                Pass_unchanged)
                        echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
@@ -15463,6 +15528,7 @@ d_eunice='$d_eunice'
 d_fchmod='$d_fchmod'
 d_fchown='$d_fchown'
 d_fcntl='$d_fcntl'
+d_fcntl_can_lock='$d_fcntl_can_lock'
 d_fd_macros='$d_fd_macros'
 d_fd_set='$d_fd_set'
 d_fds_bits='$d_fds_bits'
diff --git a/MAINTAIN b/MAINTAIN
deleted file mode 100644 (file)
index e5dbccf..0000000
--- a/MAINTAIN
+++ /dev/null
@@ -1,899 +0,0 @@
-# In addition to actual maintainers this file also lists "interested parties".
-#
-# The maintainer aliases come from AUTHORS.  They may be defined in
-# a layered way: 'doc' expands to tchrist which expands to Tom Christiansen.
-#
-# A file that is in MANIFEST need not be here at all.
-# In any case, if nobody else is listed as maintainer,
-# PUMPKING (from AUTHORS) should be it.
-#
-# Filenames can contain * which means qr(.*) on the filenames found
-# using File::Find (it's _not_ filename glob).
-#
-# Maintainership definitions are of course cumulative: if A maintains
-# X/* and B maintains X/Y/Z, if X/Y/Z is changed, both A and B should
-# be notified.
-#
-# The filename(glob) and the maintainer(s) are separated by one or more tabs.
-
-Artistic       
-Changes        
-Changes5.000   
-Changes5.001   
-Changes5.002   
-Changes5.003   
-Changes5.004   
-Changes5.005   
-Configure                      cfg
-Copying        
-EXTERN.h       
-INSTALL        
-INTERN.h       
-MANIFEST       
-Makefile.SH    
-objXSUB.h      
-Policy_sh.SH   
-Porting/*                      cfg
-Porting/Contract       
-Porting/Glossary       
-Porting/config.sh      
-Porting/config_H       
-Porting/findvars       
-Porting/fixCORE        
-Porting/fixvars        
-Porting/genlog 
-Porting/makerel        
-Porting/p4d2p  
-Porting/p4desc 
-Porting/patching.pod           dgris
-Porting/patchls        
-Porting/pumpkin.pod    
-README 
-README.amiga                   amiga
-README.beos                    beos
-README.cygwin                  cygwin
-README.dos                     dos
-README.hpux                    hpux
-README.lexwarn                 lexwarn
-README.machten                 machten
-README.mpeix                   mpeix
-README.os2                     os2
-README.os390                   os390
-README.plan9                   plan9
-README.posix-bc                        posix-bc
-README.qnx                     qnx
-README.threads 
-README.vmesa                   vmesa
-README.vms                     vms
-README.vos                     vos
-README.win32                   win32
-Todo   
-Todo-5.005     
-XSlock.h       
-XSUB.h 
-av.c   
-av.h   
-beos/*                         beos
-bytecode.h     
-bytecode.pl    
-byterun.c      
-byterun.h      
-cc_runtime.h   
-cflags.SH      
-config_h.SH                    cfg
-configpm       
-configure.com                  vms
-configure.gnu  
-cop.h  
-cv.h   
-cygwin/*                       cygwin
-deb.c  
-djgpp/*                                dos
-doio.c 
-doop.c 
-dosish.h       
-dump.c 
-ebcdic.c               
-eg/ADB 
-eg/README      
-eg/cgi/*                       cgi
-eg/changes     
-eg/client      
-eg/down        
-eg/dus 
-eg/findcp      
-eg/findtar     
-eg/g/gcp       
-eg/g/gcp.man   
-eg/g/ged       
-eg/g/ghosts    
-eg/g/gsh       
-eg/g/gsh.man   
-eg/muck        
-eg/muck.man    
-eg/myrup       
-eg/nih 
-eg/relink      
-eg/rename      
-eg/rmfrom      
-eg/scan/scan_df        
-eg/scan/scan_last      
-eg/scan/scan_messages  
-eg/scan/scan_passwd    
-eg/scan/scan_ps        
-eg/scan/scan_sudo      
-eg/scan/scan_suid      
-eg/scan/scanner        
-eg/server      
-eg/shmkill     
-eg/sysvipc/README      
-eg/sysvipc/ipcmsg      
-eg/sysvipc/ipcsem      
-eg/sysvipc/ipcshm      
-eg/travesty    
-eg/unuc        
-eg/uudecode    
-eg/van/empty   
-eg/van/unvanish        
-eg/van/vanexp  
-eg/van/vanish  
-eg/who 
-eg/wrapsuid    
-emacs/*                                ilya
-embed.h        
-embed.pl       
-embedvar.h     
-ext/*/hints*                   cfg
-ext/B/*                                nik
-ext/B/B/Deparse.pm             smccam
-ext/DB_File*                   pmarquess
-ext/DB_File/hints/dynixptx.pl  dynix/ptx
-ext/Data/Dumper/*              gsar
-ext/Devel/DProf/*
-ext/Devel/Peek/*               ilya
-ext/DynaLoader/DynaLoader_pm.PL        
-ext/DynaLoader/Makefile.PL     
-ext/DynaLoader/README  
-ext/DynaLoader/dl_aix.xs       aix
-ext/DynaLoader/dl_dld.xs       rsanders
-ext/DynaLoader/dl_dlopen.xs    timb
-ext/DynaLoader/dl_hpux.xs      hpux
-ext/DynaLoader/dl_mpeix.xs     mpeix
-ext/DynaLoader/dl_next.xs      next
-ext/DynaLoader/dl_none.xs      
-ext/DynaLoader/dl_vms.xs       vms
-ext/DynaLoader/dl_vmesa.xs     vmesa
-ext/DynaLoader/dlutils.c       
-ext/DynaLoader/hints/linux.pl  linux
-ext/Errno/*                    gbarr
-ext/Fcntl/*                    jhi
-ext/GDBM_File/GDBM_File.pm     
-ext/GDBM_File/GDBM_File.xs     
-ext/GDBM_File/Makefile.PL      
-ext/GDBM_File/typemap  
-ext/IO/*                       
-ext/IPC/SysV/*                 gbarr
-ext/NDBM_File/Makefile.PL      
-ext/NDBM_File/NDBM_File.pm     
-ext/NDBM_File/NDBM_File.xs     
-ext/NDBM_File/hints/dec_osf.pl dec_osf
-ext/NDBM_File/hints/dynixptx.pl        dynix/ptx
-ext/NDBM_File/hints/solaris.pl solaris
-ext/NDBM_File/hints/svr4.pl    svr4
-ext/NDBM_File/typemap  
-ext/ODBM_File/Makefile.PL      
-ext/ODBM_File/ODBM_File.pm     
-ext/ODBM_File/ODBM_File.xs     
-ext/ODBM_File/hints/dec_osf.pl dec_osf
-ext/ODBM_File/hints/hpux.pl    hpux
-ext/ODBM_File/hints/sco.pl     sco
-ext/ODBM_File/hints/solaris.pl solaris
-ext/ODBM_File/hints/svr4.pl    svr4
-ext/ODBM_File/hints/ultrix.pl
-ext/ODBM_File/typemap  
-ext/Opcode/Makefile.PL 
-ext/Opcode/Opcode.pm   
-ext/Opcode/Opcode.xs   
-ext/Opcode/Safe.pm     
-ext/Opcode/ops.pm      
-ext/POSIX/Makefile.PL  
-ext/POSIX/POSIX.pm     
-ext/POSIX/POSIX.pod    
-ext/POSIX/POSIX.xs     
-ext/POSIX/hints/bsdos.pl       bsdos
-ext/POSIX/hints/dynixptx.pl    dynix/ptx
-ext/POSIX/hints/freebsd.pl     freebsd
-ext/POSIX/hints/linux.pl       linux
-ext/POSIX/hints/netbsd.pl      netbsd
-ext/POSIX/hints/next_3.pl      next
-ext/POSIX/hints/openbsd.pl     openbsd
-ext/POSIX/hints/sunos_4.pl     sunos4
-ext/POSIX/typemap      
-ext/SDBM_File/Makefile.PL      
-ext/SDBM_File/SDBM_File.pm     
-ext/SDBM_File/SDBM_File.xs     
-ext/SDBM_File/sdbm/CHANGES     
-ext/SDBM_File/sdbm/COMPARE     
-ext/SDBM_File/sdbm/Makefile.PL 
-ext/SDBM_File/sdbm/README      
-ext/SDBM_File/sdbm/README.too  
-ext/SDBM_File/sdbm/biblio      
-ext/SDBM_File/sdbm/dba.c       
-ext/SDBM_File/sdbm/dbd.c       
-ext/SDBM_File/sdbm/dbe.1       
-ext/SDBM_File/sdbm/dbe.c       
-ext/SDBM_File/sdbm/dbm.c       
-ext/SDBM_File/sdbm/dbm.h       
-ext/SDBM_File/sdbm/dbu.c       
-ext/SDBM_File/sdbm/grind       
-ext/SDBM_File/sdbm/hash.c      
-ext/SDBM_File/sdbm/linux.patches       
-ext/SDBM_File/sdbm/makefile.sdbm       
-ext/SDBM_File/sdbm/pair.c      
-ext/SDBM_File/sdbm/pair.h      
-ext/SDBM_File/sdbm/readme.ms   
-ext/SDBM_File/sdbm/sdbm.3      
-ext/SDBM_File/sdbm/sdbm.c      
-ext/SDBM_File/sdbm/sdbm.h      
-ext/SDBM_File/sdbm/tune.h      
-ext/SDBM_File/sdbm/util.c      
-ext/SDBM_File/typemap  
-ext/Socket/Makefile.PL 
-ext/Socket/Socket.pm   
-ext/Socket/Socket.xs   
-ext/Thread/Makefile.PL 
-ext/Thread/Notes       
-ext/Thread/README      
-ext/Thread/Thread.pm   
-ext/Thread/Thread.xs   
-ext/Thread/Thread/Queue.pm     
-ext/Thread/Thread/Semaphore.pm 
-ext/Thread/Thread/Signal.pm    
-ext/Thread/Thread/Specific.pm  
-ext/Thread/create.t    
-ext/Thread/die.t       
-ext/Thread/die2.t      
-ext/Thread/io.t        
-ext/Thread/join.t      
-ext/Thread/join2.t     
-ext/Thread/list.t      
-ext/Thread/lock.t      
-ext/Thread/queue.t     
-ext/Thread/specific.t  
-ext/Thread/sync.t      
-ext/Thread/sync2.t     
-ext/Thread/typemap     
-ext/Thread/unsync.t    
-ext/Thread/unsync2.t   
-ext/Thread/unsync3.t   
-ext/Thread/unsync4.t   
-ext/attrs/Makefile.PL  
-ext/attrs/attrs.pm     
-ext/attrs/attrs.xs     
-ext/re/Makefile.PL     
-ext/re/hints/mpeix.pl          mpeix
-ext/re/re.pm                   regex
-ext/re/re.xs                   regex
-ext/util/make_ext      
-ext/util/mkbootstrap   
-fakethr.h      
-form.h 
-global.sym     
-globals.c      
-globvar.sym    
-gv.c   
-gv.h   
-h2pl/README    
-h2pl/cbreak.pl 
-h2pl/cbreak2.pl        
-h2pl/eg/sizeof.ph      
-h2pl/eg/sys/errno.pl   
-h2pl/eg/sys/ioctl.pl   
-h2pl/eg/sysexits.pl    
-h2pl/getioctlsizes     
-h2pl/mksizes   
-h2pl/mkvars    
-h2pl/tcbreak   
-h2pl/tcbreak2  
-handy.h        
-hints/*                                cfg
-hints/3b1.sh   
-hints/3b1cc    
-hints/README.hints     
-hints/aix.sh                   aix
-hints/altos486.sh      
-hints/amigaos.sh               amiga
-hints/apollo.sh        
-hints/aux_3.sh 
-hints/beos.sh                  beos
-hints/broken-db.msg    
-hints/bsdos.sh                 bsdos
-hints/convexos.sh      
-hints/cxux.sh                  cxux
-hints/cygwin.sh                        cygwin
-hints/dcosx.sh 
-hints/dec_osf.sh               dec_osf
-hints/dgux.sh                  dgux
-hints/dos_djgpp.sh             dos
-hints/dynix.sh                 dynix/ptx
-hints/dynixptx.sh              dynix/ptx
-hints/epix.sh  
-hints/esix4.sh 
-hints/fps.sh   
-hints/freebsd.sh               freebsd
-hints/genix.sh 
-hints/greenhills.sh    
-hints/hpux.sh                  hpux
-hints/i386.sh  
-hints/irix*                    irix
-hints/isc.sh   
-hints/isc_2.sh 
-hints/linux.sh                 linux
-hints/lynxos.sh
-hints/machten.sh               machten
-hints/machten_2.sh     
-hints/mips.sh  
-hints/mpc.sh   
-hints/mpeix.sh                 mpeix
-hints/ncr_tower.sh     
-hints/netbsd.sh                        netbsd
-hints/newsos4.sh       
-hints/next*                    step
-hints/openbsd.sh               openbsd
-hints/opus.sh  
-hints/os2.sh                   os2
-hints/os390.sh                 os390
-hints/posix-bc.sh              posix-bc
-hints/powerux.sh               powerux
-hints/qnx.sh                   qnx
-hints/sco.sh   
-hints/sco_2_3_0.sh     
-hints/sco_2_3_1.sh     
-hints/sco_2_3_2.sh     
-hints/sco_2_3_3.sh     
-hints/sco_2_3_4.sh     
-hints/solaris_2.sh             solaris
-hints/stellar.sh       
-hints/sunos_4*                 sunos4
-hints/svr4.sh                  svr4
-hints/ti1500.sh        
-hints/titanos.sh       
-hints/ultrix_4.sh              ultrix
-hints/umips.sh 
-hints/unicos*                  unicos
-hints/unisysdynix.sh   
-hints/utekv.sh 
-hints/uts.sh   
-hints/uwin.sh                  uwin
-hints/vmesa.sh                 vmesa
-hv.c   
-hv.h   
-installhtml    
-installman     
-installperl    
-intrpvar.h     
-iperlsys.h     
-jpl/*                          jpl
-keywords.h     
-keywords.pl    
-lib/AnyDBM_File.pm     
-lib/AutoLoader.pm      
-lib/AutoSplit.pm       
-lib/Benchmark.pm               jhi,timb
-lib/CGI*                       cgi
-lib/CPAN*                      cpan
-lib/Carp.pm    
-lib/Class/Struct.pm            tchrist
-lib/Cwd.pm     
-lib/Devel/SelfStubber.pm       
-lib/DirHandle.pm       
-lib/English.pm 
-lib/Env.pm     
-lib/Exporter.pm        
-lib/ExtUtils/*                 mm
-lib/ExtUtils/Command.pm                nik
-lib/ExtUtils/Embed.pm          doug
-lib/ExtUtils/Installed.pm      alan.burlison
-lib/ExtUtils/Mksymlists.pm     cbail
-lib/ExtUtils/MM_OS2.pm         os2
-lib/ExtUtils/MM_VMS.pm         vms
-lib/ExtUtils/MM_Win32.pm       win32
-lib/ExtUtils/Packlist.pm       alan.burlison
-lib/Fatal.pm   
-lib/File/Basename.pm   
-lib/File/CheckTree.pm  
-lib/File/Compare.pm            nik
-lib/File/Copy.pm               cbail
-lib/File/DosGlob.pm            gsar
-lib/File/Find.pm       
-lib/File/Path.pm               timb,cbail
-lib/File/Spec*                 kjahds
-lib/File/Spec/Mac.pm           schinder
-lib/File/Spec/OS2.pm           ilya
-lib/File/Spec/VMS.pm           vms
-lib/File/Spec/Win32.pm         win32
-lib/File/Temp.pm               tjenness
-lib/File/stat.pm               tchrist
-lib/FileCache.pm       
-lib/FileHandle.pm      
-lib/FindBin.pm 
-lib/Getopt/Long.pm             jvromans
-lib/I18N/Collate.pm            jhi
-lib/IPC/Open2.pm       
-lib/IPC/Open3.pm       
-lib/Math/BigFloat.pm           mbiggar
-lib/Math/BigInt.pm             mbiggar
-lib/Math/Complex.pm            complex
-lib/Math/Trig.pm               complex
-lib/Net/Ping.pm        
-lib/Net/hostent.pm             tchrist
-lib/Net/netent.pm              tchrist
-lib/Net/protoent.pm            tchrist
-lib/Net/servent.pm             tchrist
-lib/Pod/Checker.pm             bradapp
-lib/Pod/Functions.pm   
-lib/Pod/Html.pm                        tchrist
-lib/Pod/InputObjects.pm                bradapp
-lib/Pod/LaTeX.pm               tjenness
-lib/Pod/Man.pm                 rra
-lib/Pod/Parser.pm              bradapp
-lib/Pod/PlainText.pm           bradapp
-lib/Pod/Select.pm              bradapp
-lib/Pod/Text.pm                        rra
-lib/Pod/Text/*                 rra
-lib/Pod/Usage.pm               bradapp
-lib/Search/Dict.pm     
-lib/SelectSaver.pm     
-lib/SelfLoader.pm      
-lib/Shell.pm   
-lib/Symbol.pm  
-lib/Sys/Hostname.pm            sundstrom
-lib/Sys/Syslog.pm              tchrist
-lib/Term/ANSIcolor.pm          rra
-lib/Term/Cap.pm        
-lib/Term/Complete.pm           wayne.thompson
-lib/Term/ReadLine.pm   
-lib/Test.pm    
-lib/Test/Harness.pm            k
-lib/Text/Abbrev.pm     
-lib/Text/ParseWords.pm         pomeranz
-lib/Text/Soundex.pm            mikestok
-lib/Text/Tabs.pm               muir
-lib/Text/Wrap.pm               muir
-lib/Tie/Array.pm               nik
-lib/Tie/Handle.pm      
-lib/Tie/Hash.pm        
-lib/Tie/RefHash.pm             gsar
-lib/Tie/Scalar.pm      
-lib/Tie/SubstrHash.pm  
-lib/Time/Local.pm              pomeranz
-lib/Time/gmtime.pm             tchrist
-lib/Time/localtime.pm          tchrist
-lib/Time/tm.pm                 tchrist
-lib/UNIVERSAL.pm       
-lib/User/grent.pm              tchrist
-lib/User/pwent.pm              tchrist
-lib/abbrev.pl  
-lib/assert.pl  
-lib/autouse.pm 
-lib/base.pm    
-lib/bigfloat.pl        
-lib/bigint.pl  
-lib/bigrat.pl  
-lib/blib.pm    
-lib/cacheout.pl        
-lib/charnames.pm               ilya
-lib/chat2.pl   
-lib/complete.pl        
-lib/constant.pm        
-lib/ctime.pl   
-lib/diagnostics.pm             doc
-lib/dotsh.pl   
-lib/dumpvar.pl 
-lib/exceptions.pl      
-lib/fastcwd.pl 
-lib/fields.pm  
-lib/filetest.pm        
-lib/find.pl    
-lib/finddepth.pl       
-lib/flush.pl   
-lib/ftp.pl     
-lib/getcwd.pl  
-lib/getopt.pl  
-lib/getopts.pl 
-lib/hostname.pl        
-lib/importenv.pl       
-lib/integer.pm 
-lib/less.pm    
-lib/lib.pm     
-lib/locale.pm                  locale
-lib/look.pl    
-lib/newgetopt.pl       
-lib/open2.pl   
-lib/open3.pl   
-lib/overload.pm                        ilya
-lib/perl5db.pl                 ilya
-lib/pwd.pl     
-lib/shellwords.pl      
-lib/sigtrap.pm 
-lib/stat.pl    
-lib/strict.pm  
-lib/subs.pm    
-lib/syslog.pl  
-lib/tainted.pl 
-lib/termcap.pl 
-lib/timelocal.pl       
-lib/unicode/*Ethiopic*         dmulholl
-lib/unicode*                   lwall
-lib/utf8*                      lwall
-lib/validate.pl        
-lib/vars.pm    
-lib/warning.pm                 lexwarn
-makeaperl.SH   
-makedepend.SH  
-makedir.SH     
-malloc.c                       ilya
-mg.c   
-mg.h   
-minimod.pl     
-miniperlmain.c 
-mpeix/*                                mpeix
-mv-if-diff     
-myconfig       
-nostdio.h      
-op.c   
-op.h   
-opcode.h       
-opcode.pl      
-os2/*                          ilya
-patchlevel.h   
-perl.c 
-perl.h 
-perl_exp.SH    
-perlio.c       
-perlio.h       
-perlio.sym     
-perlsdio.h     
-perlsfio.h     
-perlsh 
-perlvars.h     
-perly.c        
-perly_c.diff   
-perly.fixer    
-perly.h        
-perly.y        
-plan9/*                                plan9
-pod/pod2usage.PL               bradapp
-pod/podchecker.PL              bradapp
-pod/podselect.PL               bradapp
-pod/*                          doc
-pod/buildtoc   
-pod/checkpods.PL       
-pod/perl.pod   
-pod/perlapio.pod       
-pod/perlbook.pod       
-pod/perlbot.pod        
-pod/perlcall.pod               pmarquess
-pod/perldata.pod       
-pod/perldebug.pod      
-pod/perldelta.pod      
-pod/perl5005delta.pod  
-pod/perl5004delta.pod  
-pod/perldebtut.pod             richard
-pod/perldiag.pod       
-pod/perldsc.pod                        tchrist
-pod/perlembed.pod              doug,jon
-pod/perlebcdic.pod             pvhp
-pod/perlfaq*                   gnat
-pod/perlform.pod       
-pod/perlfunc.pod       
-pod/perlguts.pod       
-pod/perlhack.pod               simon
-pod/perlhist.pod               jhi
-pod/perlipc.pod                        tchrist
-pod/perllocale.pod             locale
-pod/perllol.pod                        tchrist
-pod/perlmod.pod        
-pod/perlmodinstall.pod         jon
-pod/perlmodlib.pod             simon
-pod/perlmodlib.PL              simon
-pod/perlnewmod.pod             simon
-pod/perlobj.pod        
-pod/perlop.pod 
-pod/perlpod.pod                        lwall
-pod/perlport.pod               pudge
-pod/perlposix-bc.pod           posix-bc
-pod/perlre.pod                 regex
-pod/perlref.pod        
-pod/perlreftut.pod             mjd
-pod/perlrequick.pod            mkvale
-pod/perlretut.pod              mkvale
-pod/perlrun.pod        
-pod/perlsec.pod        
-pod/perlstyle.pod      
-pod/perlsub.pod        
-pod/perlsyn.pod        
-pod/perltie.pod                        tchrist
-pod/perltoc.pod        
-pod/perltoot.pod               tchrist
-pod/perltrap.pod       
-pod/perlunicode.pod            simon
-pod/perlutil.pod               simon
-pod/perlvar.pod        
-pod/perlxs.pod                 roehrich
-pod/perlxstut.pod              okamoto
-pod/pod2html.PL        
-pod/pod2latex.PL       
-pod/pod2man.PL 
-pod/pod2text.PL        
-pod/roffitall  
-pod/rofftoc    
-pod/splitman   
-pod/splitpod   
-pp.c   
-pp.h   
-pp.sym 
-pp_ctl.c       
-pp_hot.c       
-pp_proto.h     
-pp_sys.c       
-proto.h        
-qnx/*                          qnx
-regcomp.c                      regex
-regcomp.h                      regex
-regcomp.pl                     regex
-regcomp.sym                    regex
-regexec.c                      regex
-regexp.h                       regex
-regnodes.h                     regex
-run.c  
-scope.c        
-scope.h        
-sv.c   
-sv.h   
-t/README       
-t/TEST 
-t/UTEST        
-t/base/cond.t  
-t/base/if.t    
-t/base/lex.t   
-t/base/pat.t   
-t/base/rs.t    
-t/base/term.t  
-t/cmd/elsif.t  
-t/cmd/for.t    
-t/cmd/mod.t    
-t/cmd/subval.t 
-t/cmd/switch.t 
-t/cmd/while.t  
-t/comp/cmdopt.t        
-t/comp/colon.t 
-t/comp/cpp.aux 
-t/comp/cpp.t   
-t/comp/decl.t  
-t/comp/multiline.t     
-t/comp/package.t       
-t/comp/proto.t 
-t/comp/redef.t 
-t/comp/require.t       
-t/comp/script.t        
-t/comp/term.t  
-t/comp/use.t   
-t/harness      
-t/io/argv.t    
-t/io/dup.t     
-t/io/fs.t      
-t/io/inplace.t 
-t/io/iprefix.t 
-t/io/pipe.t    
-t/io/print.t   
-t/io/read.t    
-t/io/tell.t    
-t/lib/abbrev.t 
-t/lib/anydbm.t 
-t/lib/ansicolor.t              rra
-t/lib/autoloader.t     
-t/lib/basename.t       
-t/lib/bigint.t 
-t/lib/bigintpm.t       
-t/lib/cgi-form.t       
-t/lib/cgi-function.t   
-t/lib/cgi-html.t       
-t/lib/cgi-request.t    
-t/lib/charnames.t              ilya
-t/lib/checktree.t      
-t/lib/complex.t                        complex
-t/lib/db-btree.t               pmarquess
-t/lib/db-hash.t                        pmarquess
-t/lib/db-recno.t               pmarquess
-t/lib/dirhand.t        
-t/lib/dosglob.t        
-t/lib/dumper-ovl.t             gsar
-t/lib/dumper.t                 gsar
-t/lib/english.t        
-t/lib/env.t    
-t/lib/errno.t                  gbarr
-t/lib/fields.t 
-t/lib/filecache.t      
-t/lib/filecopy.t       
-t/lib/filefind.t       
-t/lib/filehand.t       
-t/lib/filepath.t       
-t/lib/filespec.t               kjahds
-t/lib/findbin.t        
-t/lib/ftmp-*.t                 tjenness
-t/lib/gol-basic.t              jvromans
-t/lib/gol-compat.t             jvromans
-t/lib/gol-linkage.t            jvromans
-t/lib/gdbm.t   
-t/lib/getopt.t                 jvromans
-t/lib/h2ph*                    kstar
-t/lib/hostname.t       
-t/lib/io_*                     gbarr
-t/lib/ipc_sysv.t               gbarr
-t/lib/ndbm.t   
-t/lib/odbm.t   
-t/lib/opcode.t 
-t/lib/open2.t  
-t/lib/open3.t  
-t/lib/ops.t    
-t/lib/parsewords.t     
-t/lib/ph.t                     kstar
-t/lib/posix.t  
-t/lib/safe1.t  
-t/lib/safe2.t  
-t/lib/sdbm.t   
-t/lib/searchdict.t     
-t/lib/selectsaver.t    
-t/lib/socket.t 
-t/lib/soundex.t        
-t/lib/symbol.t 
-t/lib/texttabs.t               muir
-t/lib/textfill.t               muir
-t/lib/textwrap.t       
-t/lib/thr5005.t        
-t/lib/tie-push.t       
-t/lib/tie-stdarray.t   
-t/lib/tie-stdpush.t    
-t/lib/timelocal.t      
-t/lib/trig.t   
-t/op/append.t  
-t/op/arith.t   
-t/op/array.t   
-t/op/assignwarn.t      
-t/op/auto.t    
-t/op/avhv.t    
-t/op/bop.t     
-t/op/chop.t    
-t/op/closure.t 
-t/op/cmp.t     
-t/op/cond.t    
-t/op/context.t 
-t/op/defins.t  
-t/op/delete.t  
-t/op/die.t     
-t/op/die_exit.t        
-t/op/do.t      
-t/op/each.t    
-t/op/eval.t    
-t/op/exec.t    
-t/op/exp.t     
-t/op/filetest.t        
-t/op/flip.t    
-t/op/fork.t    
-t/op/glob.t    
-t/op/goto.t    
-t/op/goto_xs.t 
-t/op/grent.t   
-t/op/groups.t  
-t/op/gv.t      
-t/op/hashwarn.t        
-t/op/inc.t     
-t/op/index.t   
-t/op/int.t     
-t/op/join.t    
-t/op/lex_assign.t      
-t/op/list.t    
-t/op/local.t   
-t/op/magic.t   
-t/op/method.t  
-t/op/misc.t    
-t/op/mkdir.t   
-t/op/my.t      
-t/op/nothr5005.t       
-t/op/oct.t     
-t/op/ord.t     
-t/op/pack.t    
-t/op/pat.t     
-t/op/pos.t     
-t/op/push.t    
-t/op/pwent.t   
-t/op/quotemeta.t       
-t/op/rand.t    
-t/op/range.t   
-t/op/re_tests                  regex
-t/op/read.t    
-t/op/readdir.t 
-t/op/recurse.t 
-t/op/ref.t     
-t/op/regexp.t                  regex
-t/op/regexp_noamp.t            regex
-t/op/repeat.t  
-t/op/runlevel.t        
-t/op/sleep.t   
-t/op/sort.t    
-t/op/splice.t  
-t/op/split.t   
-t/op/sprintf.t 
-t/op/stat.t    
-t/op/study.t   
-t/op/subst.t   
-t/op/substr.t  
-t/op/sysio.t   
-t/op/taint.t   
-t/op/tie.t     
-t/op/tiearray.t        
-t/op/tiehandle.t       
-t/op/time.t    
-t/op/tr.t      
-t/op/undef.t   
-t/op/universal.t       
-t/op/unshift.t 
-t/op/vec.t     
-t/op/wantarray.t       
-t/op/write.t   
-t/pod/*                                bradapp
-t/pragma/constant.t    
-t/pragma/locale.t              locale
-t/pragma/overload.t            ilya
-t/pragma/strict-refs   
-t/pragma/strict-subs   
-t/pragma/strict-vars   
-t/pragma/strict.t      
-t/pragma/subs.t        
-t/pragma/warn/*                        lexwarn
-t/pragma/warn/regcomp          regex
-t/pragma/warn/regexec          regex
-t/pragma/warning.t             lexwarn
-taint.c        
-thrdvar.h      
-thread.h       
-toke.c 
-universal.c    
-unixish.h      
-utf*                           lwall
-utils/Makefile
-utils/c2ph.PL                  tchrist
-utils/h2ph.PL                  kstar
-utils/h2xs.PL  
-utils/perlbug.PL       
-utils/perlcc.PL        
-utils/perldoc.PL       
-utils/pl2pm.PL 
-utils/splain.PL                        doc
-vmesa/*                                vmesa
-vms/*                          vms
-vos/*                          vos
-warning.h                      lexwarn
-warning.pl                     lexwarn
-win32/*
-writemain.SH   
-x2p/EXTERN.h   
-x2p/INTERN.h   
-x2p/Makefile.SH        
-x2p/a2p.c      
-x2p/a2p.h      
-x2p/a2p.pod    
-x2p/a2p.y      
-x2p/a2py.c     
-x2p/cflags.SH  
-x2p/find2perl.PL       
-x2p/hash.c     
-x2p/hash.h     
-x2p/proto.h    
-x2p/s2p.PL     
-x2p/str.c      
-x2p/str.h      
-x2p/util.c     
-x2p/util.h     
-x2p/walk.c     
index 92ea6ff..db028eb 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -12,7 +12,6 @@ Copying                       The GNU General Public License
 EXTERN.h               Included before foreign .h files
 INSTALL                        Detailed installation instructions
 INTERN.h               Included before domestic .h files
-MAINTAIN               Who maintains which files
 MANIFEST               This list of files
 Makefile.SH            A script that generates Makefile
 Policy_sh.SH           Hold site-wide preferences between Configure runs.
@@ -1387,10 +1386,12 @@ t/lib/texttabs.t        See if Text::Tabs works
 t/lib/textwrap.t       See if Text::Wrap::wrap works
 t/lib/thr5005.t                Test 5.005-style threading (skipped if no use5005threads) 
 t/lib/tie-push.t       Test for Tie::Array
+t/lib/tie-refhash.t    Test for Tie::RefHash and Tie::RefHash::Nestable
 t/lib/tie-splice.t     Test for Tie::Array::SPLICE
 t/lib/tie-stdarray.t   Test for Tie::StdArray
 t/lib/tie-stdhandle.t  Test for Tie::StdHandle
 t/lib/tie-stdpush.t    Test for Tie::StdArray
+t/lib/tie-substrhash.t Test for Tie::SubstrHash
 t/lib/timelocal.t      See if Time::Local works
 t/lib/trig.t           See if Math::Trig works
 t/op/64bitint.t                See if 64 bit integers work
index bccbedc..141d3e5 100644 (file)
@@ -299,7 +299,7 @@ utilities:  miniperl lib/Config.pm $(plextract) FORCE
 FORCE:
        @sh -c true
 
-opmini$(OBJ_EXT): op.c
+opmini$(OBJ_EXT): op.c config.h
        $(RMS) opmini.c
        $(LNS) op.c opmini.c
        $(CCCMD) $(PLDLFLAGS) -DPERL_EXTERNAL_GLOB opmini.c
index 40e468d..3c51bef 100644 (file)
@@ -545,6 +545,10 @@ d_fcntl (d_fcntl.U):
        This variable conditionally defines the HAS_FCNTL symbol, and indicates
        whether the fcntl() function exists
 
+d_fcntl_can_lock (d_fcntl_can_lock.U):
+       This variable conditionally defines the FCNTL_CAN_LOCK symbol
+       and indicates whether file locking with fcntl() works.
+
 d_fd_macros (d_fd_set.U):
        This variable contains the eventual value of the HAS_FD_MACROS symbol,
        which indicates if your C compiler knows about the macros which
index 2c9a49e..46f5d20 100644 (file)
@@ -8,7 +8,7 @@
 
 # Package name      : perl5
 # Source directory  : /m/fs/work/work/permanent/perl/pp4/perl
-# Configuration time: Tue Oct 24 21:07:39 EET DST 2000
+# Configuration time: Sat Nov  4 02:04:31 EET 2000
 # Configured by     : jhi
 # Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
 
@@ -62,7 +62,7 @@ ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_
 ccversion='V5.6-082'
 cf_by='jhi'
 cf_email='yourname@yourhost.yourplace.com'
-cf_time='Tue Oct 24 21:07:39 EET DST 2000'
+cf_time='Sat Nov  4 02:04:31 EET 2000'
 charsize='1'
 chgrp=''
 chmod=''
@@ -145,6 +145,7 @@ d_eunice='undef'
 d_fchmod='define'
 d_fchown='define'
 d_fcntl='define'
+d_fcntl_can_lock='define'
 d_fd_macros='define'
 d_fd_set='define'
 d_fds_bits='define'
index 3cbfeae..4cc858b 100644 (file)
@@ -17,7 +17,7 @@
 /*
  * Package name      : perl5
  * Source directory  : /m/fs/work/work/permanent/perl/pp4/perl
- * Configuration time: Tue Oct 24 21:07:39 EET DST 2000
+ * Configuration time: Sat Nov  4 02:04:31 EET 2000
  * Configured by     : jhi
  * Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
  */
 #define HAS_SETPGRP            /**/
 #define USE_BSD_SETPGRP        /**/
 
+/* FCNTL_CAN_LOCK:
+ *     This symbol, if defined, indicates that fcntl() can be used
+ *     for file locking.  Normally on Unix systems this is defined.
+ *     It may be undefined on VMS.
+ */
+#define FCNTL_CAN_LOCK         /**/
+
 #endif
index 218da41..e040b9e 100755 (executable)
@@ -73,6 +73,7 @@ else {
     while (@desc) {
        my ($change,$who,$date,$time,@log,$branch,$file,$type,%files);
        my $skip = 0;
+        my $nbranch = 0;
        $_ = shift @desc;
        if (/^Change (\d+) by (\w+)\@.+ on (\S+) (\S+)\s*$/) {
            ($change, $who, $date, $time) = ($1,$2,$3,$4);
@@ -88,6 +89,7 @@ else {
                    last unless /^\.\.\./;
                    if (m{^\.\.\. //depot/(.*?perl|[^/]*)/([^#]+)#\d+ (\w+)\s*$}) {
                        ($branch,$file,$type) = ($1,$2,$3);
+                       $nbranch++;
                        if (exists $branch_exclude{$branch} or
                            @branch_include and
                            not exists $branch_include{$branch}) {
@@ -103,7 +105,7 @@ else {
                }
            }
        }
-       next if not $change or $skip;
+       next if not $change or $skip == $nbranch;
        print "_" x 76, "\n";
        printf <<EOT, $change, $who, $date, $time;
 [%6s] By: %-25s             on %9s %9s
index b8ea55a..5f1338d 100644 (file)
@@ -308,8 +308,8 @@ p4desc and p4d2p are to be found in //depot/perl/Porting/.
 
 =head1 Contact Information
 
-The mail alias <perlforce@activestate.com> can be used to reach all
-current users of the repository.
+The mail alias <perl-repository-keepers@perl.org> can be used to reach
+all current users of the repository.
 
 The repository keeper is currently Gurusamy Sarathy
 <gsar@activestate.com>.
index 0b14612..bf83535 100644 (file)
@@ -8,9 +8,9 @@ README.aix - Perl version 5 on IBM Unix (AIX) systems
 
 =head1 DESCRIPTION
 
-This document describes various features of IBM's Unix operating system
-(AIX) that will affect how Perl version 5 (hereafter just Perl) is
-compiled and/or runs.
+This document describes various features of IBM's Unix operating
+system (AIX) that will affect how Perl version 5 (hereafter just Perl)
+is compiled and/or runs.
 
 =head2 Compiling Perl 5 on AIX
 
@@ -26,8 +26,8 @@ upgrade to the latest available patch level. Currently:
     xlC.C     3.1.4.0
     vac.C     4.4.0.3  (5.0 is already available)
 
-Perl can be compiled with either IBM's ANSI C compiler or with gcc.  The
-former is recommended, as not only can it compile Perl with no
+Perl can be compiled with either IBM's ANSI C compiler or with gcc.
+The former is recommended, as not only can it compile Perl with no
 difficulty, but also can take advantage of features listed later that
 require the use of IBM compiler-specific command-line flags.
 
@@ -39,7 +39,7 @@ details.
 
 Before installing the patches to the IBM C-compiler you need to know the
 level of patching for the Operating System. IBM's command 'oslevel' will
-show the base, but is not allways complete:
+show the base, but is not always complete:
 
     # oslevel
     4.3.0.0
@@ -52,7 +52,7 @@ show the base, but is not allways complete:
 
 AIX supports dynamically loadable libraries (shared libraries).
 Shared libraries end with the suffix .a, which is a bit misleading,
-cause *all* libraries are shared ;-).
+because *all* libraries are shared ;-).
 
 =head2 The IBM ANSI C Compiler
 
@@ -61,12 +61,86 @@ All defaults for Configure can be used.
 If you've chosen to use vac 4, be sure to run 4.4.0.3. Older versions
 will turn up nasty later on.
 
+Here's a brief lead of how to upgrade the compiler to the latest
+level.  Of course this is subject to changes.  You can only upgrade
+versions from ftp-available updates if the first three digit groups
+are the same (in where you can skip intermediate unlike the patches
+in the developer snapshots of perl), or to one version up where the
+`base' is available.  In other words, the AIX compiler patches are
+cumulative.
+
+ vac.C.4.4.0.1 => vac.C.4.4.0.3  is OK     (vac.C.4.4.0.2 not needed)
+ xlC.C.3.1.3.3 => xlC.C.3.1.4.10 is NOT OK (xlC.C.3.1.4.0 is not available)
+
+ # ftp ftp.software.ibm.com
+ Connected to service.boulder.ibm.com.
+ : welcome message ...
+ Name (ftp.software.ibm.com:merijn): anonymous
+ 331 Guest login ok, send your complete e-mail address as password.
+ Password:
+ ... accepted login stuff
+ ftp> cd /aix/fixes/v4/
+ ftp> dir other other.ll
+ output to local-file: other.ll? y
+ 200 PORT command successful.
+ 150 Opening ASCII mode data connection for /bin/ls.
+ 226 Transfer complete.
+ ftp> dir xlc xlc.ll
+ output to local-file: xlc.ll? y
+ 200 PORT command successful.
+ 150 Opening ASCII mode data connection for /bin/ls.
+ 226 Transfer complete.
+ ftp> bye
+ ... goodbye messages
+ # ls -l *.ll
+ -rw-rw-rw-   1 merijn   system    1169432 Nov  2 17:29 other.ll
+ -rw-rw-rw-   1 merijn   system      29170 Nov  2 17:29 xlc.ll
+
+On AIX 4.2 using xlC, we continue:
+
+ # lslpp -l | fgrep 'xlC.C '
+   xlC.C                     3.1.4.9  COMMITTED  C for AIX Compiler
+   xlC.C                     3.1.4.0  COMMITTED  C for AIX Compiler
+ # grep 'xlC.C.3.1.4.*.bff' xlc.ll
+ -rw-r--r--   1 45776101 1        6286336 Jul 22 1996  xlC.C.3.1.4.1.bff
+ -rw-rw-r--   1 45776101 1        6173696 Aug 24 1998  xlC.C.3.1.4.10.bff
+ -rw-r--r--   1 45776101 1        6319104 Aug 14 1996  xlC.C.3.1.4.2.bff
+ -rw-r--r--   1 45776101 1        6316032 Oct 21 1996  xlC.C.3.1.4.3.bff
+ -rw-r--r--   1 45776101 1        6315008 Dec 20 1996  xlC.C.3.1.4.4.bff
+ -rw-rw-r--   1 45776101 1        6178816 Mar 28 1997  xlC.C.3.1.4.5.bff
+ -rw-rw-r--   1 45776101 1        6188032 May 22 1997  xlC.C.3.1.4.6.bff
+ -rw-rw-r--   1 45776101 1        6191104 Sep  5 1997  xlC.C.3.1.4.7.bff
+ -rw-rw-r--   1 45776101 1        6185984 Jan 13 1998  xlC.C.3.1.4.8.bff
+ -rw-rw-r--   1 45776101 1        6169600 May 27 1998  xlC.C.3.1.4.9.bff
+ # wget ftp://ftp.software.ibm.com/aix/fixes/v4/xlc/xlC.C.3.1.4.10.bff
+ #
+
+On AIX 4.3 using vac, we continue:
+
+ # lslpp -l | fgrep 'vac.C '
+   vac.C                      4.4.0.2  COMMITTED  C for AIX Compiler
+   vac.C                      4.4.0.0  COMMITTED  C for AIX Compiler
+ # grep 'vac.C.4.4.0.*.bff' other.ll
+ -rw-rw-r--   1 45776101 1        13466624 May 26 1999  vac.C.4.4.0.1.bff
+ -rw-rw-r--   1 45776101 1        13473792 Aug 31 1999  vac.C.4.4.0.2.bff
+ -rw-rw-r--   1 45776101 1        13480960 May 19 20:32 vac.C.4.4.0.3.bff
+ # wget ftp://ftp.software.ibm.com/aix/fixes/v4/other/vac.C.4.4.0.3.bff
+ #
+
+Then execute the following command, and fill in its choices
+
+ # smit install_update
+  -> Install and Update from LATEST Available Software
+  * INPUT device / directory for software [ vac.C.4.4.0.3.bff    ]
+  [ OK ]
+  [ OK ]
+
+Follow the messages ... and you're done.
+
 =head2 Using GNU's gcc for building perl
 
 ... ?
 
-Wait, I'll have to scan perlbug ...
-
 =head2 Using Large Files with Perl
 
 ... ?
index 9718bb5..7e6a342 100644 (file)
@@ -27,11 +27,11 @@ platforms.  They run thanks to the Cygwin library which provides the UNIX
 system calls and environment these programs expect.  More information
 about this project can be found at:
 
-  http://sources.redhat.com/cygwin/
+  http://www.cygwin.com/
 
 A recent net or commercial release of Cygwin is required.
 
-At the time this document was last updated, Cygwin 1.1.4 was current.
+At the time this document was last updated, Cygwin 1.1.5 was current.
 
 B<NOTE:> At this point, minimal effort has been made to provide
 compatibility with old (beta) Cygwin releases.  The focus has been to
@@ -500,12 +500,11 @@ be kept as clean as possible.
 
 =item Documentation
 
-  INSTALL README.cygwin
+  INSTALL README.cygwin README.win32 MANIFEST
   Changes Changes5.005 Changes5.004 Changes5.6
-  AUTHORS MAINTAIN MANIFEST README.win32
-  pod/buildtoc.PL pod/perl.pod pod/perl5004delta.pod pod/perl56delta.pod
-  pod/perlfaq3.pod pod/perlhist.pod pod/perlmodlib.pod pod/perlport.pod
-  pod/perltoc.pod
+  pod/perl.pod pod/perlport.pod pod/perlfaq3.pod
+  pod/perldelta.pod pod/perl5004delta.pod pod/perl56delta.pod
+  pod/perlhist.pod pod/perlmodlib.pod pod/buildtoc.PL pod/perltoc.pod
 
 =item Build, Configure, Make, Install
 
@@ -543,9 +542,7 @@ be kept as clean as possible.
   perl.h                - binmode
   doio.c                - win9x can not rename a file when it is open
   pp_sys.c              - do not define h_errno, pp_system with spawn
-  mg.c                  - environ WORKAROUND
-  unixish.h             - environ WORKAROUND
-  util.c                - environ WORKAROUND
+  util.c                - use setenv
 
 =item Compiled Module Source
 
@@ -588,7 +585,7 @@ and security contexts are required.
 =head1 AUTHORS
 
 Charles Wilson <cwilson@ece.gatech.edu>,
-Eric Fifer <efifer@sanwaint.com>,
+Eric Fifer <egf7@columbia.edu>,
 alexander smishlajev <als@turnhere.com>,
 Steven Morlock <newspost@morlock.net>,
 Sebastien Barre <Sebastien.Barre@utc.fr>,
@@ -596,4 +593,4 @@ Teun Burgers <burgers@ecn.nl>.
 
 =head1 HISTORY
 
-Last updated: 15 August 2000
+Last updated: 7 November 2000
index 3fd5760..fe649ed 100644 (file)
@@ -229,8 +229,6 @@ goes under C<($DJDIR)/lib/perl5/pod>.
 
 =head2 Prerequisites
 
-=over 4
-
 For building and installing non-XS modules, all you need is a working
 perl under DJGPP.  Non-XS modules do not require re-linking the perl
 binary, and so are simpler to build and install.
@@ -247,12 +245,8 @@ an XS extension module.  In addition, you will have to have built your
 perl binary from the source distribution so that all of the components
 of the perl binary are available for the required link step.
 
-=back
-
 =head2 Unpacking CPAN Modules
 
-=over 4
-
 First, download the module package from CPAN (e.g., the "Comma Separated
 Value" text package, Text-CSV-0.01.tar.gz).  Then expand the contents of
 the package into some location on your disk.  Most CPAN modules are
@@ -278,15 +272,11 @@ to unpack and expand these files.  For example:
 This will create the new directory C<($DJDIR)/Text-CSV-0.01>, filling
 it with the source for this module.
 
-=back
-
 =head2 Building Non-XS Modules
 
 To build a non-XS module, you can use the standard module-building
 instructions distributed with perl modules.
 
-=over 4
-
     perl Makefile.PL
     make
     make test
@@ -296,16 +286,12 @@ This is sufficient because non-XS modules install only ".pm" files and
 (sometimes) pod and/or man documentation.  No re-linking of the perl
 binary is needed to build, install or use non-XS modules.
 
-=back
-
 =head2 Building XS Modules
 
 To build an XS module, you must use the standard module-building
 instructions distributed with perl modules *PLUS* three extra
 instructions specific to the DJGPP "static link" build environment.
 
-=over 4
-
     set FNCASE=y
     perl Makefile.PL
     make
@@ -333,8 +319,6 @@ by using the command:
 
         perl -S perldoc perllocal
 
-=back
-
 =head1 AUTHOR
 
 Laszlo Molnar, F<laszlo.molnar@eth.ericsson.se> [Installing/building perl]
index b12ee0b..19af8c5 100644 (file)
@@ -394,12 +394,12 @@ is considered a bug and should be fixed soon.
 
 =over 4
 
-=item
+=item *
 
 Did you run your programs with C<-w> switch? See 
 L<Starting OS/2 (and DOS) programs under Perl>.
 
-=item
+=item *
 
 Do you try to run I<internal> shell commands, like C<`copy a b`>
 (internal for F<cmd.exe>), or C<`glob a*b`> (internal for ksh)? You
@@ -1163,18 +1163,18 @@ eventually).
 
 =over 4
 
-=item
+=item *
 
 Since L<flock(3)> is present in EMX, but is not functional, it is 
 emulated by perl.  To disable the emulations, set environment variable
 C<USE_PERL_FLOCK=0>.
 
-=item
+=item *
 
 Here is the list of things which may be "broken" on
 EMX (from EMX docs):
 
-=over
+=over 4
 
 =item *
 
@@ -1205,7 +1205,7 @@ L<waitpid(3)>:
 
 Note that C<kill -9> does not work with the current version of EMX.
 
-=item
+=item *
 
 Since F<sh.exe> is used for globing (see L<perlfunc/glob>), the bugs
 of F<sh.exe> plague perl as well. 
@@ -1517,9 +1517,9 @@ cannot test it.
 For the details of the current situation with calling external programs,
 see L<Starting OS/2 (and DOS) programs under Perl>.
 
-=over
+=over 4
 
-=item
+=item *
 
 External scripts may be called by name.  Perl will try the same extensions
 as when processing B<-S> command-line switch.
@@ -1549,7 +1549,7 @@ preliminary.
 
 Most notable problems: 
 
-=over
+=over 4
 
 =item C<COND_WAIT> 
 
index 8e29acc..dc90ada 100644 (file)
@@ -620,11 +620,11 @@ by C<perl -V>.
 
 =over 4
 
-Gary Ng E<lt>71564.1743@CompuServe.COME<gt>
+=item Gary Ng E<lt>71564.1743@CompuServe.COME<gt>
 
-Gurusamy Sarathy E<lt>gsar@activestate.comE<gt>
+=item Gurusamy Sarathy E<lt>gsar@activestate.comE<gt>
 
-Nick Ing-Simmons E<lt>nick@ni-s.u-net.comE<gt>
+=item Nick Ing-Simmons E<lt>nick@ni-s.u-net.comE<gt>
 
 =back
 
diff --git a/av.c b/av.c
index ef2c905..777651d 100644 (file)
--- a/av.c
+++ b/av.c
@@ -796,9 +796,14 @@ Perl_av_exists(pTHX_ AV *av, I32 key)
     if (SvRMAGICAL(av)) {
        if (mg_find((SV*)av,'P') || mg_find((SV*)av,'D')) {
            SV *sv = sv_newmortal();
+           MAGIC *mg;
+
            mg_copy((SV*)av, sv, 0, key);
-           magic_existspack(sv, mg_find(sv, 'p'));
-           return SvTRUE(sv);
+           mg = mg_find(sv, 'p');
+           if (mg) {
+               magic_existspack(sv, mg);
+               return SvTRUE(sv);
+           }
        }
     }
     if (key <= AvFILLp(av) && AvARRAY(av)[key] != &PL_sv_undef
index 95cb965..6403d73 100644 (file)
@@ -3198,5 +3198,12 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
 #$d_setpgrp HAS_SETPGRP                /**/
 #$d_bsdsetpgrp USE_BSD_SETPGRP /**/
 
+/* FCNTL_CAN_LOCK:
+ *     This symbol, if defined, indicates that fcntl() can be used
+ *     for file locking.  Normally on Unix systems this is defined.
+ *     It may be undefined on VMS.
+ */
+#$d_fcntl_can_lock FCNTL_CAN_LOCK              /**/
+
 #endif
 !GROK!THIS!
index 8063bb6..46867e2 100644 (file)
@@ -3476,6 +3476,54 @@ $ tmp = "fcntl"
 $ GOSUB inlibc
 $ d_fcntl = tmp
 $!
+$! Check for fcntl locking capability
+$!
+$ echo4 "Checking if fcntl-based file locking works... "
+$ tmp = "undef"
+$ IF d_fcntl .EQS. "define"
+$ THEN
+$   OS
+$   WS "#include <stdio.h>"
+$   WS "#if defined(__DECC) || defined(__DECCXX)"
+$   WS "#include <stdlib.h>"
+$   WS "#endif"
+$   WS "#include <fcntl.h>"
+$   WS "#include <unistd.h>"
+$   WS "int main() {"
+$   WS "#if defined(F_SETLK) && defined(F_SETLKW)"
+$   WS "     struct flock flock;"
+$   WS "     int retval, fd;"
+$   WS "     fd = open(""try.c"", O_RDONLY);"
+$   WS "     flock.l_type = F_RDLCK;"
+$   WS "     flock.l_whence = SEEK_SET;"
+$   WS "     flock.l_start = flock.l_len = 0;"
+$   WS "     retval = fcntl(fd, F_SETLK, &flock);"
+$   WS "     close(fd);"
+$   WS "     (retval < 0 ? printf(""undef\n"") : printf(""define\n""));"
+$   WS "#else"
+$   WS "     printf(""undef\n"");"
+$   WS "#endif"
+$   WS "}"
+$   CS
+$   GOSUB link_ok
+$   IF compile_status .EQ. good_compile .AND. link_status .EQ. good_link
+$   THEN
+$     GOSUB just_mcr_it
+$     IF tmp .EQS. "define"
+$     THEN
+$       echo4 "Yes, it seems to work."
+$     ELSE
+$       echo4 "Nope, it didn't work."
+$     ENDIF
+$   ELSE
+$     echo4 "I'm unable to compile the test program, so I'll assume not."
+$     tmp = "undef"
+$   ENDIF
+$ ELSE
+$   echo4 "Nope, since you don't even have fcntl()."
+$ ENDIF
+$ d_fcntl_can_lock = tmp
+$!
 $! Check for memchr
 $!
 $ OS
index db1c426..33ea4db 100644 (file)
@@ -146,7 +146,7 @@ XS(Cygwin_cwd)
 
     if(items != 0)
        Perl_croak(aTHX_ "Usage: Cwd::cwd()");
-    if((cwd = getcwd(NULL, 0))) {
+    if((cwd = getcwd(NULL, -1))) {
        ST(0) = sv_2mortal(newSVpv(cwd, 0));
        safesysfree(cwd);
        XSRETURN(1);
diff --git a/doop.c b/doop.c
index cd5c996..62a8c11 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -966,10 +966,10 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
        switch (optype) {
        case OP_BIT_AND:
            while (lulen && rulen) {
-               luc = utf8_to_uv((U8*)lc, lulen, &ulen, 0);
+               luc = utf8_to_uv((U8*)lc, lulen, &ulen, UTF8_ALLOW_ANY);
                lc += ulen;
                lulen -= ulen;
-               ruc = utf8_to_uv((U8*)rc, rulen, &ulen, 0);
+               ruc = utf8_to_uv((U8*)rc, rulen, &ulen, UTF8_ALLOW_ANY);
                rc += ulen;
                rulen -= ulen;
                duc = luc & ruc;
@@ -981,10 +981,10 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
            break;
        case OP_BIT_XOR:
            while (lulen && rulen) {
-               luc = utf8_to_uv((U8*)lc, lulen, &ulen, 0);
+               luc = utf8_to_uv((U8*)lc, lulen, &ulen, UTF8_ALLOW_ANY);
                lc += ulen;
                lulen -= ulen;
-               ruc = utf8_to_uv((U8*)rc, rulen, &ulen, 0);
+               ruc = utf8_to_uv((U8*)rc, rulen, &ulen, UTF8_ALLOW_ANY);
                rc += ulen;
                rulen -= ulen;
                duc = luc ^ ruc;
@@ -993,10 +993,10 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
            goto mop_up_utf;
        case OP_BIT_OR:
            while (lulen && rulen) {
-               luc = utf8_to_uv((U8*)lc, lulen, &ulen, 0);
+               luc = utf8_to_uv((U8*)lc, lulen, &ulen, UTF8_ALLOW_ANY);
                lc += ulen;
                lulen -= ulen;
-               ruc = utf8_to_uv((U8*)rc, rulen, &ulen, 0);
+               ruc = utf8_to_uv((U8*)rc, rulen, &ulen, UTF8_ALLOW_ANY);
                rc += ulen;
                rulen -= ulen;
                duc = luc | ruc;
diff --git a/embed.h b/embed.h
index 2e8b145..d174407 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define isa_lookup             S_isa_lookup
 #endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+#define stdize_locale          S_stdize_locale
 #define mess_alloc             S_mess_alloc
 #  if defined(LEAKTEST)
 #define xstat                  S_xstat
 #define isa_lookup(a,b,c,d)    S_isa_lookup(aTHX_ a,b,c,d)
 #endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+#define stdize_locale(a)       S_stdize_locale(aTHX_ a)
 #define mess_alloc()           S_mess_alloc(aTHX)
 #  if defined(LEAKTEST)
 #define xstat(a)               S_xstat(aTHX_ a)
 #define isa_lookup             S_isa_lookup
 #endif
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+#define S_stdize_locale                CPerlObj::S_stdize_locale
+#define stdize_locale          S_stdize_locale
 #define S_mess_alloc           CPerlObj::S_mess_alloc
 #define mess_alloc             S_mess_alloc
 #  if defined(LEAKTEST)
index cdfa427..3e7debe 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -1851,9 +1851,9 @@ Apd       |HV*    |get_hv         |const char* name|I32 create
 Apd    |CV*    |get_cv         |const char* name|I32 create
 Ap     |int    |init_i18nl10n  |int printwarn
 Ap     |int    |init_i18nl14n  |int printwarn
-Ap     |void   |new_collate    |const char* newcoll
-Ap     |void   |new_ctype      |const char* newctype
-Ap     |void   |new_numeric    |const char* newcoll
+Ap     |void   |new_collate    |char* newcoll
+Ap     |void   |new_ctype      |char* newctype
+Ap     |void   |new_numeric    |char* newcoll
 Ap     |void   |set_numeric_local
 Ap     |void   |set_numeric_radix
 Ap     |void   |set_numeric_standard
@@ -2521,6 +2521,7 @@ s |SV*|isa_lookup |HV *stash|const char *name|int len|int level
 #endif
 
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+s      |char*  |stdize_locale  |char* locs
 s      |SV*    |mess_alloc
 #  if defined(LEAKTEST)
 s      |void   |xstat          |int
index e760d67..8c37c58 100644 (file)
@@ -138,6 +138,7 @@ d_eunice='undef'
 d_fchmod='undef'
 d_fchown='undef'
 d_fcntl='undef'
+d_fcntl_can_lock='undef'
 d_fd_macros='undef'
 d_fd_set='define'
 d_fds_bits='undef'
index f8b2ac5..f2addfb 100644 (file)
@@ -1338,7 +1338,7 @@ sub should_save
  # Now see if current package looks like an OO class this is probably too strong.
  foreach my $m (qw(new DESTROY TIESCALAR TIEARRAY TIEHASH TIEHANDLE)) 
   {
-   if ($package->can($m)) 
+   if (UNIVERSAL::can($package, $m))
     {
      warn "$package has method $m: saving package\n";#debug
      return mark_package($package);
index 0d4e8cd..266c9d0 100644 (file)
@@ -1,4 +1,3 @@
-
 use Config;
 
 sub to_string {
@@ -12,7 +11,7 @@ unlink "DynaLoader.pm" if -f "DynaLoader.pm";
 open OUT, ">DynaLoader.pm" or die $!;
 print OUT <<'EOT';
 
-# Generated from DynaLoader.pm.PL (resolved %Config::Config values)
+# Generated from DynaLoader.pm.PL
 
 package DynaLoader;
 
@@ -28,11 +27,15 @@ package DynaLoader;
 #
 # Tim.Bunce@ig.co.uk, August 1994
 
-$VERSION = "1.04";     # avoid typo warning
+use vars qw($VERSION *AUTOLOAD);
+
+$VERSION = 1.04;       # avoid typo warning
 
 require AutoLoader;
 *AUTOLOAD = \&AutoLoader::AUTOLOAD;
 
+use Config;
+
 # The following require can't be removed during maintenance
 # releases, sadly, because of the risk of buggy code that does 
 # require Carp; Carp::croak "..."; without brackets dying 
@@ -40,7 +43,6 @@ require AutoLoader;
 # We'll let those bugs get found on the development track.
 require Carp if $] < 5.00450; 
 
-
 # enable debug/trace messages from DynaLoader perl code
 $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
 
@@ -71,66 +73,112 @@ print OUT <<'EOT';
 # (VMS support by Charles Bailey <bailey@HMIVAX.HUMGEN.UPENN.EDU>)
 # See dl_expandspec() for more details. Should be harmless but
 # inefficient to define on systems that don't need it.
-$do_expand = $Is_VMS = $^O eq 'VMS';
+$Is_VMS    = $^O eq 'VMS';
+$do_expand = $Is_VMS;
 $Is_MacOS  = $^O eq 'MacOS';
 
 @dl_require_symbols = ();       # names of symbols we need
 @dl_resolve_using   = ();       # names of files to link with
 @dl_library_path    = ();       # path to look for files
-#@dl_librefs         = ();       # things we have loaded
-#@dl_modules         = ();       # Modules we have loaded
+@dl_librefs         = ();       # things we have loaded
+@dl_modules         = ();       # Modules we have loaded
 
 # This is a fix to support DLD's unfortunate desire to relink -lc
 @dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs";
 
-# Initialise @dl_library_path with the 'standard' library path
-# for this platform as determined by Configure
+EOT
 
-# push(@dl_library_path, split(' ', $Config::Config{'libpth'});
+my $cfg_dl_library_path = <<'EOT';
+push(@dl_library_path, split(' ', $Config::Config{libpth}));
 EOT
 
-print OUT "push(\@dl_library_path, split(' ', ",
-          to_string($Config::Config{'libpth'}), "));\n";
+sub dquoted_comma_list {
+    join(", ", map {qq("$_")} @_);
+}
+
+if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS}) {
+    eval $cfg_dl_library_path;
+    if (!$ENV{PERL_BUILD_EXPAND_ENV_VARS}) {
+        my $dl_library_path = dquoted_comma_list(@dl_library_path);
+        print OUT <<EOT;
+# The below \@dl_library_path has been expanded (%Config) in Perl build time.
 
-print OUT <<'EOT';
+\@dl_library_path = ($dl_library_path);
+
+EOT
+    }
+}
+else {
+    print OUT <<EOT;
+# Initialise \@dl_library_path with the 'standard' library path
+# for this platform as determined by Configure.
+
+$cfg_dl_library_path
+
+EOT
+}
+
+my $ldlibpthname;
+my $ldlibpthname_defined;
+my $pthsep;
+
+if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS}) {
+    $ldlibpthname         = $Config::Config{ldlibpthname};
+    $ldlibpthname_defined = defined $Config::Config{ldlibpthname} ? 1 : 0;
+    $pthsep               = $Config::Config{path_sep};
+}
+else {
+    $ldlibpthname         = q($Config::Config{ldlibpthname});
+    $ldlibpthname_defined = q(defined $Config::Config{ldlibpthname});
+    $pthsep               = q($Config::Config{path_sep});
+    print OUT <<EOT;
+my \$ldlibpthname         = $ldlibpthname;
+my \$ldlibpthname_defined = $ldlibpthname_defined;
+my \$pthsep               = $pthsep;
+
+EOT
+}
+
+my $env_dl_library_path = <<'EOT';
+if ($ldlibpthname_defined &&
+    exists $ENV{$ldlibpthname}) {
+    push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname}));
+}
 
-# Add to @dl_library_path any extra directories we can gather
-# from environment variables.
-if ($Is_MacOS) {
-    push(@dl_library_path, split(/,/, $ENV{LD_LIBRARY_PATH}))
-       if exists $ENV{LD_LIBRARY_PATH};
-} else {
-#     push(@dl_library_path, split(/:/, $ENV{$Config::Config{ldlibpthname}}))
-#      if exists      $Config::Config{ldlibpthname}        &&
-#                        $Config::Config{ldlibpthname}  ne '' &&
-#                 exists $ENV{$Config::Config{ldlibpthname}}       ;;
-#     push(@dl_library_path, split(/:/, $ENV{$Config::Config{ldlibpthname}}))
-#      if exists      $Config::Config{ldlibpthname}        &&
-#                        $Config::Config{ldlibpthname}  ne '' &&
-#                 exists $ENV{$Config::Config{ldlibpthname}}       ;;
 # E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH.
-# push(@dl_library_path, split(/:/, $ENV{LD_LIBRARY_PATH}))
-#     if exists $ENV{LD_LIBRARY_PATH};
+
+if ($ldlibpthname_defined &&
+    $ldlibpthname ne 'LD_LIBRARY_PATH' &&
+    exists $ENV{LD_LIBRARY_PATH}) {
+    push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH}));
+}
 EOT
 
-# Make a list of paths to print.
-# HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH,
-# but for other OSes no point pushing 'LD_LIBRARY_PATH' twice.
-my @ldlibpthname = 'LD_LIBRARY_PATH';
-if (exists $Config::Config{ldlibpthname}
-    and length $Config::Config{ldlibpthname}
-    and $Config::Config{ldlibpthname} ne 'LD_LIBRARY_PATH') {
-    unshift @ldlibpthname, $Config::Config{ldlibpthname};
+if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS} && $ENV{PERL_BUILD_EXPAND_ENV_VARS}) {
+    eval $env_dl_library_path;
 }
+else {
+    print OUT <<EOT;
+# Add to \@dl_library_path any extra directories we can gather from environment
+# during runtime.
+
+$env_dl_library_path
 
-foreach (@ldlibpthname) {
-    print OUT "    push(\@dl_library_path, split(/:/, \$ENV{", to_string($_),
-                 "}))\n\tif exists \$ENV{", to_string($_), "};\n";
+EOT
 }
 
-print OUT <<'EOT';
+if ($ENV{PERL_BUILD_EXPAND_CONFIG_VARS} && $ENV{PERL_BUILD_EXPAND_ENV_VARS}) {
+    my $dl_library_path = dquoted_comma_list(@dl_library_path);
+    print OUT <<EOT;
+# The below \@dl_library_path has been expanded (%Config, %ENV)
+# in Perl build time.
+
+\@dl_library_path = ($dl_library_path);
+
+EOT
 }
 
+print OUT <<'EOT';
 # No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
 # NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
 boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
@@ -216,7 +264,7 @@ sub bootstrap {
     croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
        unless $file;   # wording similar to error from 'require'
 
-    $file = uc($file) if $Is_VMS && $Config{d_vms_case_sensitive_symbols};
+    $file = uc($file) if $Is_VMS && $Config::Config{d_vms_case_sensitive_symbols};
     my $bootname = "boot_$module";
     $bootname =~ s/\W/_/g;
     @dl_require_symbols = ($bootname);
@@ -344,7 +392,7 @@ print OUT <<'EOT';
         #  (this is a more complicated issue than it first appears)
         if (m:/: && -d $_) {   push(@dirs, $_); next; }
 
-        # VMS: we may be using native VMS directry syntax instead of
+        # VMS: we may be using native VMS directory syntax instead of
         # Unix emulation, so check this as well
         if ($Is_VMS && /[:>\]]/ && -d $_) {   push(@dirs, $_); next; }
 
index 0666b2a..9ea6041 100644 (file)
@@ -29,6 +29,12 @@ sub process_file {
             warn "Cannot open '$file'";
             return;
        }     
+    } elsif ($Config{gccversion} ne '') { 
+       # With the -dM option, gcc outputs every #define it finds
+       unless(open(FH,"$Config{cc} -E -dM $file |")) {
+            warn "Cannot open '$file'";
+            return;
+       }     
     } else {
        unless(open(FH,"< $file")) {
            # This file could be a temporary file created by cppstdin
@@ -79,6 +85,10 @@ sub get_files {
     } elsif ($^O eq 'vmesa') {
        # OS/390 C compiler doesn't generate #file or #line directives
        $file{'../../vmesa/errno.h'} = 1;
+    } elsif ($^O eq 'linux') {
+       # Some Linuxes have weird errno.hs which generate
+       # no #file or #line directives
+       $file{'/usr/include/errno.h'} = 1;
     } else {
        open(CPPI,"> errno.c") or
            die "Cannot open errno.c";
index 252e5bb..e1e6b28 100644 (file)
@@ -734,16 +734,6 @@ sub setbuf {
     redef "IO::Handle::setbuf()";
 }
 
-sub setgid {
-    usage "setgid(gid)" if @_ != 1;
-    $( = $_[0];
-}
-
-sub setuid {
-    usage "setuid(uid)" if @_ != 1;
-    $< = $_[0];
-}
-
 sub setvbuf {
     redef "IO::Handle::setvbuf()";
 }
index 314147c..e93fb74 100644 (file)
@@ -1008,9 +1008,12 @@ see L<perlre>.
 
 =item setgid
 
-Sets the real group identifier for this process.
-Identical to assigning a value to the Perl's builtin C<$)> variable,
-see L<perlvar/$UID>.
+Sets the real group identifier and the effective group identifier for
+this process.  Similar to assigning a value to the Perl's builtin
+C<$)> variable, see L<perlvar/$GID>, except that the latter
+will change only the real user identifier, and that the setgid()
+uses only a single numeric argument, as opposed to a space-separated
+list of numbers.
 
 =item setjmp
 
@@ -1063,9 +1066,10 @@ setting the session identifier of the current process.
 
 =item setuid
 
-Sets the real user identifier for this process.
-Identical to assigning a value to the Perl's builtin C<$E<lt>> variable,
-see L<perlvar/$UID>.
+Sets the real user identifier and the effective user identifier for
+this process.  Similar to assigning a value to the Perl's builtin
+C<$E<lt>> variable, see L<perlvar/$UID>, except that the latter
+will change only the real user identifier.
 
 =item sigaction
 
index a536671..887fcbc 100644 (file)
@@ -3940,6 +3940,14 @@ pathconf(filename, name)
 SysRet
 pause()
 
+SysRet
+setgid(gid)
+       Gid_t           gid
+
+SysRet
+setuid(uid)
+       Uid_t           uid
+
 SysRetLong
 sysconf(name)
        int             name
@@ -3947,3 +3955,4 @@ sysconf(name)
 char *
 ttyname(fd)
        int             fd
+
index baf9bfc..d54d5d1 100644 (file)
@@ -3,6 +3,7 @@ pid_t                   T_NV
 Uid_t                  T_NV
 Time_t                 T_NV
 Gid_t                  T_NV
+Uid_t                  T_NV
 Off_t                  T_NV
 Dev_t                  T_NV
 NV                     T_NV
index 64c75cb..d41c770 100644 (file)
@@ -283,6 +283,10 @@ makroom(register DBM *db, long int hash, int need)
 {
        long newp;
        char twin[PBLKSIZ];
+#if defined(DOSISH) || defined(WIN32)
+       char zer[PBLKSIZ];
+       long oldtail;
+#endif
        char *pag = db->pagbuf;
        char *New = twin;
        register int smax = SPLTMAX;
@@ -305,6 +309,23 @@ makroom(register DBM *db, long int hash, int need)
  * still looking at the page of interest. current page is not updated
  * here, as sdbm_store will do so, after it inserts the incoming pair.
  */
+
+#if defined(DOSISH) || defined(WIN32)
+               /*
+                * Fill hole with 0 if made it.
+                * (hole is NOT read as 0)
+                */
+               oldtail = lseek(db->pagf, 0L, SEEK_END);
+               memset(zer, 0, PBLKSIZ);
+               while (OFF_PAG(newp) > oldtail) {
+                       if (lseek(db->pagf, 0L, SEEK_END) < 0 ||
+                           write(db->pagf, zer, PBLKSIZ) < 0) {
+
+                               return 0;
+                       }
+                       oldtail += PBLKSIZ;
+               }
+#endif
                if (hash & (db->hmask + 1)) {
                        if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0
                            || write(db->pagf, db->pagbuf, PBLKSIZ) < 0)
index 7be1735..c57d3f6 100644 (file)
@@ -25,6 +25,7 @@ libswanted=`echo " $libswanted " | sed -e 's/ c / /g'`
 libswanted=`echo " $libswanted " | sed -e 's/ m / /g'`
 libswanted="$libswanted cygipc"
 test -z "$optimize" && optimize='-O2'
+ccflags="$ccflags -DPERL_USE_SAFE_PUTENV"
 # - otherwise i686-cygwin
 archname='cygwin'
 
index f93c312..aec05ee 100644 (file)
@@ -9,7 +9,7 @@ case "$cc" in
                 lddlflags='-shared'
                 ldflags=''
                ;;
-        '')
+        *)
                 cc="cc -Xa -Olimit 4096"
                 malloctype="void *"
                ;;
index 28b7053..80f332c 100644 (file)
@@ -187,13 +187,13 @@ sub manicopy {
     require File::Basename;
     my(%dirs,$file);
     $target = VMS::Filespec::unixify($target) if $Is_VMS;
-    File::Path::mkpath([ $target ],1,$Is_VMS ? undef : 0755);
+    File::Path::mkpath([ $target ],! $Quiet,$Is_VMS ? undef : 0755);
     foreach $file (keys %$read){
        $file = VMS::Filespec::unixify($file) if $Is_VMS;
        if ($file =~ m!/!) { # Ilya, that hurts, I fear, or maybe not?
            my $dir = File::Basename::dirname($file);
            $dir = VMS::Filespec::unixify($dir) if $Is_VMS;
-           File::Path::mkpath(["$target/$dir"],1,$Is_VMS ? undef : 0755);
+           File::Path::mkpath(["$target/$dir"],! $Quiet,$Is_VMS ? undef : 0755);
        }
        cp_if_diff($file, "$target/$file", $how);
     }
index a351044..e3f8ff6 100644 (file)
@@ -124,7 +124,7 @@ use Carp;
 use File::Spec 0.8;
 use File::Path qw/ rmtree /;
 use Fcntl 1.03;
-use Errno qw( EEXIST ENOENT ENOTDIR EINVAL );
+use Errno;
 require VMS::Stdio if $^O eq 'VMS';
 
 # Need the Symbol package if we are running older perl
@@ -443,7 +443,7 @@ sub _gettemp {
 
        # Error opening file - abort with error
        # if the reason was anything but EEXIST
-       unless ($! == EEXIST) {
+       unless ($!{EEXIST}) {
          carp "File::Temp: Could not create temp file $path: $!";
          return ();
        }
@@ -473,7 +473,7 @@ sub _gettemp {
 
        # Abort with error if the reason for failure was anything
        # except EEXIST
-       unless ($! == EEXIST) {
+       unless ($!{EEXIST}) {
          carp "File::Temp: Could not create directory $path: $!";
          return ();
        }
index e7a071a..066e366 100644 (file)
@@ -1414,6 +1414,8 @@ sub stringify_polar {
 1;
 __END__
 
+=pod
+
 =head1 NAME
 
 Math::Complex - complex numbers and associated mathematical functions
index 40da9f3..e3006f9 100644 (file)
@@ -269,13 +269,13 @@ sub checksum
         );
 
     $len_msg = length($msg);
-    $num_short = $len_msg / 2;
+    $num_short = int($len_msg / 2);
     $chk = 0;
     foreach $short (unpack("S$num_short", $msg))
     {
         $chk += $short;
     }                                           # Add the odd byte in
-    $chk += unpack("C", substr($msg, $len_msg - 1, 1)) if $len_msg % 2;
+    $chk += (unpack("C", substr($msg, $len_msg - 1, 1)) << 8) if $len_msg % 2;
     $chk = ($chk >> 16) + ($chk & 0xffff);      # Fold high into low
     return(~(($chk >> 16) + $chk) & 0xffff);    # Again and complement
 }
@@ -369,16 +369,17 @@ sub ping_udp
         elsif ($nfound)         # A packet is waiting
         {
             $from_msg = "";
-            $from_saddr = recv($self->{"fh"}, $from_msg, 1500, $flags);
-            ($from_port, $from_ip) = sockaddr_in($from_saddr);
-            if (($from_ip eq $ip) &&        # Does the packet check out?
-                ($from_port == $self->{"port_num"}) &&
-                ($from_msg eq $msg))
-            {
-                $ret = 1;       # It's a winner
-                $done = 1;
-            }
-        }
+            $from_saddr = recv($self->{"fh"}, $from_msg, 1500, $flags)
+               or last; # For example an unreachable host will make recv() fail.
+           ($from_port, $from_ip) = sockaddr_in($from_saddr);
+           if (($from_ip eq $ip) &&        # Does the packet check out?
+               ($from_port == $self->{"port_num"}) &&
+               ($from_msg eq $msg))
+           {
+               $ret = 1;       # It's a winner
+               $done = 1;
+           }
+       }
         else                    # Oops, timed out
         {
             $done = 1;
index ffa9eb2..d4111d9 100644 (file)
@@ -9,17 +9,26 @@ Tie::RefHash - use references as hash keys
     require 5.004;
     use Tie::RefHash;
     tie HASHVARIABLE, 'Tie::RefHash', LIST;
+    tie HASHVARIABLE, 'Tie::RefHash::Nestable', LIST;
 
     untie HASHVARIABLE;
 
 =head1 DESCRIPTION
 
-This module provides the ability to use references as hash keys if
-you first C<tie> the hash variable to this module.
+This module provides the ability to use references as hash keys if you
+first C<tie> the hash variable to this module.  Normally, only the
+keys of the tied hash itself are preserved as references; to use
+references as keys in hashes-of-hashes, use Tie::RefHash::Nestable,
+included as part of Tie::Hash.
 
 It is implemented using the standard perl TIEHASH interface.  Please
 see the C<tie> entry in perlfunc(1) and perltie(1) for more information.
 
+The Nestable version works by looking for hash references being stored
+and converting them to tied hashes so that they too can have
+references as keys.  This will happen without warning whenever you
+store a reference to one of your own hashes in the tied hash.
+
 =head1 EXAMPLE
 
     use Tie::RefHash;
@@ -36,6 +45,11 @@ see the C<tie> entry in perlfunc(1) and perltie(1) for more information.
        print ref($_), "\n";
     }
 
+    tie %h, 'Tie::RefHash::Nestable';
+    $h{$a}->{$b} = 1;
+    for (keys %h, keys %{$h{$a}}) {
+       print ref($_), "\n";
+    }
 
 =head1 AUTHOR
 
@@ -68,7 +82,17 @@ sub TIEHASH {
 
 sub FETCH {
   my($s, $k) = @_;
-  (ref $k) ? $s->[0]{"$k"}[1] : $s->[1]{$k};
+  if (ref $k) {
+      if (defined $s->[0]{"$k"}) {
+        $s->[0]{"$k"}[1];
+      }
+      else {
+        undef;
+      }
+  }
+  else {
+      $s->[1]{$k};
+  }
 }
 
 sub STORE {
@@ -121,4 +145,16 @@ sub CLEAR {
   %{$s->[1]} = ();
 }
 
+package Tie::RefHash::Nestable;
+use vars '@ISA'; @ISA = qw(Tie::RefHash);
+
+sub STORE {
+  my($s, $k, $v) = @_;
+  if (ref($v) eq 'HASH' and not tied %$v) {
+      my @elems = %$v;
+      tie %$v, ref($s), @elems;
+  }
+  $s->SUPER::STORE($k, $v);
+}
+
 1;
index 4b18a58..b8f6449 100644 (file)
@@ -33,6 +33,8 @@ Because the current implementation uses the table and key sizes for the
 hashing algorithm, there is no means by which to dynamically change the
 value of any of the initialization parameters.
 
+The hash does not support exists().
+
 =cut
 
 use Carp;
@@ -41,12 +43,20 @@ sub TIEHASH {
     my $pack = shift;
     my ($klen, $vlen, $tsize) = @_;
     my $rlen = 1 + $klen + $vlen;
-    $tsize = findprime($tsize * 1.1);  # Allow 10% empty.
+    $tsize = [$tsize,
+             findgteprime($tsize * 1.1)]; # Allow 10% empty.
     $self = bless ["\0", $klen, $vlen, $tsize, $rlen, 0, -1];
-    $$self[0] x= $rlen * $tsize;
+    $$self[0] x= $rlen * $tsize->[1];
     $self;
 }
 
+sub CLEAR {
+    local($self) = @_;
+    $$self[0] = "\0" x ($$self[4] * $$self[3]->[1]);
+    $$self[5] =  0;
+    $$self[6] = -1;
+}
+
 sub FETCH {
     local($self,$key) = @_;
     local($klen, $vlen, $tsize, $rlen) = @$self[1..4];
@@ -69,8 +79,8 @@ sub FETCH {
 sub STORE {
     local($self,$key,$val) = @_;
     local($klen, $vlen, $tsize, $rlen) = @$self[1..4];
-    croak("Table is full") if $$self[5] == $tsize;
-    croak(qq/Value "$val" is not $vlen characters long./)
+    croak("Table is full ($tsize->[0] elements)") if $$self[5] > $tsize->[0];
+    croak(qq/Value "$val" is not $vlen characters long/)
        if length($val) != $vlen;
     my $writeoffset;
 
@@ -129,7 +139,7 @@ sub FIRSTKEY {
 sub NEXTKEY {
     local($self) = @_;
     local($klen, $vlen, $tsize, $rlen, $entries, $iterix) = @$self[1..6];
-    for (++$iterix; $iterix < $tsize; ++$iterix) {
+    for (++$iterix; $iterix < $tsize->[1]; ++$iterix) {
        next unless substr($$self[0], $iterix * $rlen, 1) eq "\2";
        $$self[6] = $iterix;
        return substr($$self[0], $iterix * $rlen + 1, $klen);
@@ -138,35 +148,48 @@ sub NEXTKEY {
     undef;
 }
 
+sub EXISTS {
+    croak "Tie::SubstrHash does not support exists()";
+}
+
 sub hashkey {
-    croak(qq/Key "$key" is not $klen characters long.\n/)
+    croak(qq/Key "$key" is not $klen characters long/)
        if length($key) != $klen;
     $hash = 2;
     for (unpack('C*', $key)) {
        $hash = $hash * 33 + $_;
        &_hashwrap if $hash >= 1e13;
     }
-    &_hashwrap if $hash >= $tsize;
+    &_hashwrap if $hash >= $tsize->[1];
     $hash = 1 unless $hash;
     $hashbase = $hash;
 }
 
 sub _hashwrap {
-    $hash -= int($hash / $tsize) * $tsize;
+    $hash -= int($hash / $tsize->[1]) * $tsize->[1];
 }
 
 sub rehash {
     $hash += $hashbase;
-    $hash -= $tsize if $hash >= $tsize;
+    $hash -= $tsize->[1] if $hash >= $tsize->[1];
+}
+
+# using POSIX::ceil() would be too heavy, and not all platforms have it.
+sub ceil {
+    my $num = shift;
+    $num = int($num + 1) unless $num == int $num;
+    return $num;
 }
 
-sub findprime {
+sub findgteprime { # find the smallest prime integer greater than or equal to
     use integer;
 
-    my $num = shift;
+    my $num = ceil(shift);
+    return 2 if $num <= 2;
+
     $num++ unless $num % 2;
 
-    $max = int sqrt $num;
+    my $max = int sqrt $num;
 
   NUM:
     for (;; $num += 2) {
diff --git a/mg.c b/mg.c
index 7e0b3ca..b236bec 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -936,11 +936,6 @@ Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
            cur += len+1;
     }
     FreeEnvironmentStrings(envv);
-#   else
-#      ifdef __CYGWIN__
-    I32 i;
-    for (i = 0; environ[i]; i++)
-       safesysfree(environ[i]);
 #      else
 #          ifndef PERL_USE_SAFE_PUTENV
     I32 i;
@@ -951,7 +946,6 @@ Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
        for (i = 0; environ[i]; i++)
            safesysfree(environ[i]);
 #          endif /* PERL_USE_SAFE_PUTENV */
-#      endif /* __CYGWIN__ */
 
     environ[0] = Nullch;
 
diff --git a/perl.h b/perl.h
index e5d30df..ff0f908 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -3120,16 +3120,10 @@ typedef struct am_table_short AMTS;
 #ifdef USE_LOCALE_NUMERIC
 
 #define SET_NUMERIC_STANDARD() \
-    STMT_START {                               \
-       if (! PL_numeric_standard)              \
-           set_numeric_standard();             \
-    } STMT_END
+       set_numeric_standard();
 
 #define SET_NUMERIC_LOCAL() \
-    STMT_START {                               \
-       if (! PL_numeric_local)                 \
-           set_numeric_local();                \
-    } STMT_END
+       set_numeric_local();
 
 #define IS_NUMERIC_RADIX(c)    \
        ((PL_hints & HINT_LOCALE) && \
@@ -3137,11 +3131,11 @@ typedef struct am_table_short AMTS;
 
 #define STORE_NUMERIC_LOCAL_SET_STANDARD() \
        bool was_local = (PL_hints & HINT_LOCALE) && PL_numeric_local; \
-       if (!was_local) SET_NUMERIC_STANDARD();
+       if (was_local) SET_NUMERIC_STANDARD();
 
 #define STORE_NUMERIC_STANDARD_SET_LOCAL() \
-       bool was_standard = !(PL_hints & HINT_LOCALE) || PL_numeric_standard; \
-       if (!was_standard) SET_NUMERIC_LOCAL();
+       bool was_standard = (PL_hints & HINT_LOCALE) && PL_numeric_standard; \
+       if (was_standard) SET_NUMERIC_LOCAL();
 
 #define RESTORE_NUMERIC_LOCAL() \
        if (was_local) SET_NUMERIC_LOCAL();
index 90deff4..ff8d33c 100644 (file)
@@ -332,7 +332,7 @@ podset( @modules[ sort { $modname[$a] cmp $modname[$b] } 0 .. $#modules ] );
        Here should be listed all the extra programs' documentation, but they
        don't all have manual pages yet:
 
-       =over
+       =over 4
 
        =item a2p
 
@@ -385,13 +385,13 @@ sub podset {
        }
        if (s/^=head1 (.*)/=item $1/) {
            unhead2();
-           output "=over\n\n" unless $inhead1;
+           output "=over 4\n\n" unless $inhead1;
            $inhead1 = 1;
            output $_; nl(); next;
        }
        if (s/^=head2 (.*)/=item $1/) {
            unitem();
-           output "=over\n\n" unless $inhead2;
+           output "=over 4\n\n" unless $inhead2;
            $inhead2 = 1;
            output $_; nl(); next;
        }
@@ -403,7 +403,7 @@ sub podset {
            s/\s+$//;
            next if /^[\d.]+$/;
            next if $pod eq 'perlmodlib' && /^ftp:/;
-           ##print "=over\n\n" unless $initem;
+           ##print "=over 4\n\n" unless $initem;
            output ", " if $initem;
            $initem = 1;
            s/\.$//;
index 9f3824d..97514ee 100644 (file)
@@ -189,7 +189,7 @@ But wait, there's more...
 Begun in 1993 (see L<perlhist>), Perl version 5 is nearly a complete
 rewrite that provides the following additional benefits:
 
-=over
+=over 4
 
 =item * modularity and reusability using innumerable modules 
 
index 8cec3ab..7151d86 100644 (file)
@@ -24,7 +24,10 @@ problems.  See the F<Changes> file in the distribution for details.
 C<%ENV = ()> and C<%ENV = @list> now work as expected (except on VMS
 where it generates a fatal error).
 
-=head2 "Can't locate Foo.pm in @INC" error now lists @INC
+=head2 Change to "Can't locate Foo.pm in @INC" error
+
+The error "Can't locate Foo.pm in @INC" now lists the contents of @INC
+for easier debugging.
 
 =head2 Compilation option: Binary compatibility with 5.003
 
@@ -198,7 +201,7 @@ hole was just plugged.
 
 The new restrictions when tainting include:
 
-=over
+=over 4
 
 =item No glob() or <*>
 
@@ -258,7 +261,7 @@ the F<INSTALL> file for how to use it.
 
 =head2 New and changed syntax
 
-=over
+=over 4
 
 =item $coderef->(PARAMS)
 
@@ -276,7 +279,7 @@ S<C<< $table->{FOO}->($bar) >>>.
 
 =head2 New and changed builtin constants
 
-=over
+=over 4
 
 =item __PACKAGE__
 
@@ -289,7 +292,7 @@ into strings.
 
 =head2 New and changed builtin variables
 
-=over
+=over 4
 
 =item $^E
 
@@ -322,7 +325,7 @@ there is no C<use English> long name for this variable.
 
 =head2 New and changed builtin functions
 
-=over
+=over 4
 
 =item delete on slices
 
@@ -544,7 +547,7 @@ subroutine:
 The C<UNIVERSAL> package automatically contains the following methods that
 are inherited by all other classes:
 
-=over
+=over 4
 
 =item isa(CLASS)
 
@@ -593,7 +596,7 @@ have C<isa> available as a plain subroutine in the current package.
 
 See L<perltie> for other kinds of tie()s.
 
-=over
+=over 4
 
 =item TIEHANDLE classname, LIST
 
@@ -687,7 +690,7 @@ install the optional module Devel::Peek.)
 Three new compilation flags are recognized by malloc.c.  (They have no
 effect if perl is compiled with system malloc().)
 
-=over
+=over 4
 
 =item -DPERL_EMERGENCY_SBRK
 
@@ -779,7 +782,7 @@ See F<README.amigaos> in the perl distribution.
 
 Six new pragmatic modules exist:
 
-=over
+=over 4
 
 =item use autouse MODULE => qw(sub1 sub2 sub3)
 
@@ -979,7 +982,7 @@ those who need trigonometric functions only for real numbers.
 There have been quite a few changes made to DB_File. Here are a few of
 the highlights:
 
-=over
+=over 4
 
 =item *
 
@@ -1045,7 +1048,7 @@ For example, you can now say
 
 =head2 pod2html
 
-=over
+=over 4
 
 =item Sends converted HTML to standard output
 
@@ -1058,7 +1061,7 @@ Use the B<--outfile=FILENAME> option to write to a file.
 
 =head2 xsubpp
 
-=over
+=over 4
 
 =item C<void> XSUBs now default to returning nothing
 
@@ -1083,7 +1086,7 @@ XSUB's return type is really C<SV *>.
 
 =head1 C Language API Changes
 
-=over
+=over 4
 
 =item C<gv_fetchmethod> and C<perl_call_sv>
 
@@ -1124,7 +1127,7 @@ which can be more efficient.  See L<perlguts> for details.
 Many of the base and library pods were updated.  These
 new pods are included in section 1:
 
-=over
+=over 4
 
 =item L<perldelta>
 
@@ -1177,7 +1180,7 @@ increasing order of desperation):
    (X) A very fatal error (nontrappable).
    (A) An alien error message (not generated by Perl).
 
-=over
+=over 4
 
 =item "my" variable %s masks earlier declaration in same scope
 
index b133c0d..d863453 100644 (file)
@@ -525,7 +525,7 @@ The hints files for most Unix platforms have seen incremental improvements.
 
 =head2 New Modules
 
-=over
+=over 4
 
 =item B
 
@@ -596,7 +596,7 @@ Various pragmata to control behavior of regular expressions.
 
 =head2 Changes in existing modules
 
-=over
+=over 4
 
 =item Benchmark
 
@@ -702,7 +702,7 @@ L<perlthrtut> gives a tutorial on threads.
 
 =head1 New Diagnostics
 
-=over
+=over 4
 
 =item Ambiguous call resolved as CORE::%s(), qualify as such or use &
 
@@ -916,7 +916,7 @@ fix the problem can be found in L<perllocale/"LOCALE PROBLEMS">.
 
 =head1 Obsolete Diagnostics
 
-=over
+=over 4
 
 =item Can't mktemp()
 
index 742423b..20cc546 100644 (file)
@@ -23,7 +23,7 @@ frame was called with are copied to the @DB::args array.  The
 general mechanisms is enabled by calling Perl with the B<-d> switch, the
 following additional features are enabled (cf. L<perlvar/$^P>):
 
-=over
+=over 4
 
 =item *
 
@@ -402,7 +402,7 @@ shorter than 7 chars.
 
 The fields of interest which may appear in the last line are
 
-=over
+=over 4
 
 =item C<anchored> I<STRING> C<at> I<POS>
 
@@ -693,7 +693,7 @@ Devel::Peek module.
 
 Here is some explanation of that format:
 
-=over
+=over 4
 
 =item C<buckets SMALLEST(APPROX)..GREATEST(APPROX)>
 
@@ -840,7 +840,7 @@ per glob - for glob name, and glob stringification magic.
 
 Here are explanations for other I<Id>s above: 
 
-=over
+=over 4
 
 =item C<717> 
 
@@ -894,7 +894,7 @@ these categories.
 
 If warn() string starts with
 
-=over
+=over 4
 
 =item C<!!!> 
 
index 2916897..ece5848 100644 (file)
@@ -495,7 +495,7 @@ And a print to show what values we're currently using:
 
        DB<1> p $deg, $num
        f33.3
-               
+
 We can put another break point on any line beginning with a colon, we'll use
 line 17 as that's just as we come out of the subroutine, and we'd like to
 pause there later on:
@@ -538,7 +538,7 @@ it for inspection.  In this case though, we simply continue down to line 29:
 
        DB<4> c 29  
        main::f2c(temp:29):             return $c;
-   
+
 And have a look at the return value:
 
        DB<5> p $c
@@ -616,7 +616,7 @@ the DEBUGGING flag for this one:
        floating `'$ at 4..2147483647 (checking floating) stclass `EXACTF <pe>'
 anchored(BOL) minlen 4
        Omitting $` $& $' support.
-        
+
        EXECUTING...
 
        Freeing REx: `^pe(a)*rl$'  
@@ -656,7 +656,7 @@ script from the command-line, try something like this:
 
        > perl -d my_cgi.pl -nodebug 
 
-Of course 'L<perldoc CGI>' and L<perlfaq9> will tell you more.
+Of course L<CGI> and L<perlfaq9> will tell you more.
 
 
 =head1 GUIs
index faff39b..01f35e1 100644 (file)
@@ -82,7 +82,7 @@ recursively, unlike the real C<print> function in Perl.
 See L<Dumpvalue> if you'd like to do this yourself.
 
 The output format is governed by multiple options described under
-L<"Options">.
+L<"Configurable Options">.
 
 =item V [pkg [vars]]
 
@@ -308,8 +308,8 @@ For historical reasons, the C<=value> is optional, but defaults to
 1 only where it is safe to do so--that is, mostly for Boolean
 options.  It is always better to assign a specific value using C<=>.
 The C<option> can be abbreviated, but for clarity probably should
-not be.  Several options can be set together.  See L<"Options"> for
-a list of these.
+not be.  Several options can be set together.  See L<"Configurable Options"> 
+for a list of these.
 
 =item < ? 
 
index 4c3b8e1..78df993 100644 (file)
@@ -786,7 +786,7 @@ regardless of whether or not the array has been used or declared
 already.  The fatal error has been downgraded to an optional warning:
 
         Possible unintended interpolation of @example in string
-        
+
 This warns you that C<"fred@example.com"> is going to turn into
 C<fred.com> if you don't backslash the C<@>.
 See http://www.plover.com/~mjd/perl/at-error.html for more details
@@ -1844,7 +1844,8 @@ run in compile-only mode.  Since this is typically not the expected
 behavior, END blocks are not executed anymore when the C<-c> switch
 is used, or if compilation fails.
 
-See L<CHECK blocks> for how to run things when the compile phase ends.
+See L</"Support for CHECK blocks"> for how to run things when the compile 
+phase ends.
 
 =head2 Potential to leak DATA filehandles
 
@@ -2789,7 +2790,7 @@ See L<perlguts/"Memory Allocation"> for further information about that.
 
 =head2 Compatible C Source API Changes
 
-=over
+=over 4
 
 =item C<PATCHLEVEL> is now C<PERL_VERSION>
 
index 7df4100..72a07e0 100644 (file)
@@ -626,6 +626,13 @@ If you're getting this error from a here-document, you may have included
 unseen whitespace before or after your closing tag. A good programmer's
 editor will have a way to help you find these characters.
 
+=item Can't find %s property definition %s 
+
+(F) You may have tried to use C<\p> which means a Unicode property for
+example \p{Lu} is all uppercase letters.  Escape the C<\p>, either
+C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, until
+possible C<\E>).
+
 =item Can't fork
 
 (F) A fatal error occurred while trying to fork while opening a
@@ -1061,7 +1068,7 @@ on I<Mastering Regular Expressions>.)
 to check the return value of your socket() call?  See
 L<perlfunc/connect>.
 
-=item constant(%s): %s
+=item Constant(%s)%s: %s
 
 (F) The parser found inconsistencies either while attempting to define
 an overloaded constant, or when trying to find the character name
@@ -1091,8 +1098,8 @@ workarounds.
 
 =item Copy method did not return a reference
 
-(F) The method which overloads "=" is buggy. See L<overload/Copy
-Constructor>.
+(F) The method which overloads "=" is buggy. See 
+L<overload/Copy Constructor>.
 
 =item CORE::%s is not a keyword
 
@@ -1635,8 +1642,8 @@ shows in the regular expression about where the problem was discovered.
 
 (W syntax) You've run afoul of the rule that says that any list operator
 followed by parentheses turns into a function, with all the list
-operators arguments found inside the parentheses.  See L<perlop/Terms
-and List Operators (Leftward)>.
+operators arguments found inside the parentheses.  See 
+L<perlop/Terms and List Operators (Leftward)>.
 
 =item Invalid %s attribute: %s
 
@@ -2537,13 +2544,14 @@ C<sh>-shell in.  See "PERL_SH_DIR" in L<perlos2>.
 
 Exactly what were the failed locale settings varies.  In the above the
 settings were that the LC_ALL was "En_US" and the LANG had no value.
-This error means that Perl detected that you and/or your system
-administrator have set up the so-called variable system but Perl could
-not use those settings.  This was not dead serious, fortunately: there
-is a "default locale" called "C" that Perl can and will use, the script
-will be run.  Before you really fix the problem, however, you will get
-the same error message each time you run Perl.  How to really fix the
-problem can be found in L<perllocale> section B<LOCALE PROBLEMS>.
+This error means that Perl detected that you and/or your operating
+system supplier and/or system administrator have set up the so-called
+locale system but Perl could not use those settings.  This was not
+dead serious, fortunately: there is a "default locale" called "C" that
+Perl can and will use, the script will be run.  Before you really fix
+the problem, however, you will get the same error message each time
+you run Perl.  How to really fix the problem can be found in
+L<perllocale> section B<LOCALE PROBLEMS>.
 
 =item Permission denied
 
index 1787e4b..6e3db32 100644 (file)
@@ -37,25 +37,25 @@ Read on...
 
 =over 5
 
-L<Compiling your C program>
+=item Compiling your C program
 
-L<Adding a Perl interpreter to your C program>
+=item Adding a Perl interpreter to your C program
 
-L<Calling a Perl subroutine from your C program>
+=item Calling a Perl subroutine from your C program
 
-L<Evaluating a Perl statement from your C program>
+=item Evaluating a Perl statement from your C program
 
-L<Performing Perl pattern matches and substitutions from your C program>
+=item Performing Perl pattern matches and substitutions from your C program
 
-L<Fiddling with the Perl stack from your C program>
+=item Fiddling with the Perl stack from your C program
 
-L<Maintaining a persistent interpreter>
+=item Maintaining a persistent interpreter
 
-L<Maintaining multiple interpreter instances>
+=item Maintaining multiple interpreter instances
 
-L<Using Perl modules, which themselves use C libraries, from your C program>
+=item Using Perl modules, which themselves use C libraries, from your C program
 
-L<Embedding Perl under Win32>
+=item Embedding Perl under Win32
 
 =back 
 
@@ -258,9 +258,8 @@ and package C<END {}> blocks.
 If you want to pass arguments to the Perl subroutine, you can add
 strings to the C<NULL>-terminated C<args> list passed to
 I<call_argv>.  For other data types, or to examine return values,
-you'll need to manipulate the Perl stack.  That's demonstrated in the
-last section of this document: L<Fiddling with the Perl stack from
-your C program>.
+you'll need to manipulate the Perl stack.  That's demonstrated in
+L<Fiddling with the Perl stack from your C program>.
 
 =head2 Evaluating a Perl statement from your C program
 
@@ -948,7 +947,7 @@ B<ExtUtils::Embed> can also automate writing the I<xs_init> glue code.
 
 Consult L<perlxs>, L<perlguts>, and L<perlapi> for more details.
 
-=head1 Embedding Perl under Windows
+=head1 Embedding Perl under Win32
 
 In general, all of the source code shown here should work unmodified under
 Windows.
index fa6943f..d350f60 100644 (file)
@@ -6,7 +6,7 @@ perlfaq - frequently asked questions about Perl ($Date: 1999/05/23 20:38:02 $)
 
 This document is structured into the following sections:
 
-=over
+=over 4
 
 =item perlfaq: Structural overview of the FAQ.
 
@@ -46,7 +46,7 @@ Very general, high-level information about Perl.
 
 =item * Where can I get a list of Larry Wall witticisms?
 
-=item * How can I convince my sysadmin/supervisor/employees to use version (5/5.005/Perl instead of some other language)?
+=item * How can I convince my sysadmin/supervisor/employees to use (version 5/5.005/Perl) instead of some other language?
 
 =back
 
@@ -162,7 +162,7 @@ Programmer tools and programming support.
 =item * Where can I learn about linking C with Perl? [h2xs, xsubpp]
 
 =item * I've read perlembed, perlguts, etc., but I can't embed perl in
-my C program, what am I doing wrong?
+my C program; what am I doing wrong?
 
 =item * When I tried to run my script, I got this message. What does it
 mean?
@@ -424,7 +424,7 @@ Pattern matching and regular expressions.
 
 =item * I put a regular expression into $/ but it didn't work. What's wrong?
 
-=item * How do I substitute case insensitively on the LHS, but preserving case on the RHS?
+=item * How do I substitute case insensitively on the LHS while preserving case on the RHS?
 
 =item * How can I make C<\w> match national character sets?
 
@@ -574,7 +574,7 @@ Interprocess communication (IPC), control over the user-interface
 
 =item * How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
 
-=item * Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
+=item * Why doesn't my sockets program work under System V (Solaris)?  What does the error message "Protocol not supported" mean?
 
 =item * How can I call my system's unique C functions from Perl?
 
@@ -647,7 +647,7 @@ Networking, the Internet, and a few on the web.
 
 =over 4
 
-=item * My CGI script runs from the command line but not the browser.   (500 Server Error)
+=item * My CGI script runs from the command line but not the browser.  (500 Server Error)
 
 =item * How can I get better error messages from a CGI program?
 
@@ -704,7 +704,7 @@ Networking, the Internet, and a few on the web.
 
 This document is posted regularly to comp.lang.perl.announce and
 several other related newsgroups.  It is available in a variety of
-formats from CPAN in the /CPAN/doc/FAQs/FAQ/ directory, or on the web
+formats from CPAN in the /CPAN/doc/FAQs/FAQ/ directory or on the web
 at http://www.perl.com/perl/faq/ .
 
 =head2 How to contribute to this document
@@ -740,11 +740,11 @@ All rights reserved.
 
 =head2 Bundled Distributions
 
-When included as part of the Standard Version of Perl, or as part of
+When included as part of the Standard Version of Perl or as part of
 its complete documentation whether printed or otherwise, this work
 may be distributed only under the terms of Perl's Artistic License.
 Any distribution of this file or derivatives thereof I<outside>
-of that package require that special arrangements be made with
+of that package requires that special arrangements be made with
 copyright holder.
 
 Irrespective of its distribution, all code examples in these files
@@ -764,6 +764,10 @@ in respect of this information or its use.
 
 =over 4
 
+=item 1/November/2000
+
+A few grammatical fixes and updates implemented by John Borwick.
+
 =item 23/May/99
 
 Extensive updates from the net in preparation for 5.6 release.
index ec61e8b..a81d704 100644 (file)
@@ -56,8 +56,8 @@ You should definitely use version 5.  Version 4 is old, limited, and
 no longer maintained; its last patch (4.036) was in 1992, long ago and
 far away.  Sure, it's stable, but so is anything that's dead; in fact,
 perl4 had been called a dead, flea-bitten camel carcass.  The most recent
-production release is 5.005_03 (although 5.004_05 is still supported).
-The most cutting-edge development release is 5.005_57.  Further references
+production release is 5.6 (although 5.005_03 is still supported).
+The most cutting-edge development release is 5.7.  Further references
 to the Perl language in this document refer to the production release
 unless otherwise specified.  There may be one or more official bug fixes
 by the time you read this, and also perhaps some experimental versions
@@ -78,8 +78,8 @@ The 5.0 release is, essentially, a ground-up rewrite of the original
 perl source code from releases 1 through 4.  It has been modularized,
 object-oriented, tweaked, trimmed, and optimized until it almost doesn't
 look like the old code.  However, the interface is mostly the same, and
-compatibility with previous releases is very high. See L<perltrap/"Perl4
-to Perl5 Traps">.
+compatibility with previous releases is very high. 
+See L<perltrap/"Perl4 to Perl5 Traps">.
 
 To avoid the "what language is perl5?" confusion, some people prefer to
 simply use "perl" to refer to the latest version of perl and avoid using
@@ -120,10 +120,10 @@ and the rare new keyword).
 
 =head2 Is Perl difficult to learn?
 
-No, Perl is easy to start learning -- and easy to keep learning.  It looks
+No, Perl is easy to start learning--and easy to keep learning.  It looks
 like most programming languages you're likely to have experience
 with, so if you've ever written a C program, an awk script, a shell
-script, or even a BASIC program, you're already part way there.
+script, or even a BASIC program, you're already partway there.
 
 Most tasks only require a small subset of the Perl language.  One of
 the guiding mottos for Perl development is "there's more than one way
@@ -183,7 +183,7 @@ languages that come to mind include prolog and matlab.
 
 =head2 When shouldn't I program in Perl?
 
-When your manager forbids it -- but do consider replacing them :-).
+When your manager forbids it--but do consider replacing them :-).
 
 Actually, one good reason is when you already have an existing
 application written in another language that's all done (and done
@@ -201,7 +201,7 @@ limitations given in the previous statement to some degree, but understand
 that Perl remains fundamentally a dynamically typed language, not
 a statically typed one.  You certainly won't be chastised if you don't
 trust nuclear-plant or brain-surgery monitoring code to it.  And Larry
-will sleep easier, too -- Wall Street programs not withstanding. :-)
+will sleep easier, too--Wall Street programs not withstanding. :-)
 
 =head2 What's the difference between "perl" and "Perl"?
 
@@ -220,17 +220,17 @@ Larry doesn't really care.  He says (half in jest) that "a script is
 what you give the actors.  A program is what you give the audience."
 
 Originally, a script was a canned sequence of normally interactive
-commandsthat is, a chat script.  Something like a UUCP or PPP chat
+commands--that is, a chat script.  Something like a UUCP or PPP chat
 script or an expect script fits the bill nicely, as do configuration
 scripts run by a program at its start up, such F<.cshrc> or F<.ircrc>,
 for example.  Chat scripts were just drivers for existing programs,
 not stand-alone programs in their own right.
 
 A computer scientist will correctly explain that all programs are
-interpreted, and that the only question is at what level.  But if you
+interpreted and that the only question is at what level.  But if you
 ask this question of someone who isn't a computer scientist, they might
 tell you that a I<program> has been compiled to physical machine code
-once, and can then be run multiple times, whereas a I<script> must be
+once and can then be run multiple times, whereas a I<script> must be
 translated by a program each time it's used.
 
 Perl programs are (usually) neither strictly compiled nor strictly
@@ -263,7 +263,7 @@ Newer examples can be found by perusing Larry's postings:
 
     http://x1.dejanews.com/dnquery.xp?QRY=*&DBS=2&ST=PS&defaultOp=AND&LNG=ALL&format=terse&showsort=date&maxhits=100&subjects=&groups=&authors=larry@*wall.org&fromdate=&todate=
 
-=head2 How can I convince my sysadmin/supervisor/employees to use version (5/5.005/Perl instead of some other language)?
+=head2 How can I convince my sysadmin/supervisor/employees to use (version 5/5.005/Perl) instead of some other language?
 
 If your manager or employees are wary of unsupported software, or
 software which doesn't officially ship with your operating system, you
@@ -272,15 +272,15 @@ more productive using and utilizing Perl constructs, functionality,
 simplicity, and power, then the typical manager/supervisor/employee
 may be persuaded.  Regarding using Perl in general, it's also
 sometimes helpful to point out that delivery times may be reduced
-using Perl, as compared to other languages.
+using Perl compared to other languages.
 
 If you have a project which has a bottleneck, especially in terms of
 translation or testing, Perl almost certainly will provide a viable,
-and quick solution.  In conjunction with any persuasion effort, you
+quick solution.  In conjunction with any persuasion effort, you
 should not fail to point out that Perl is used, quite extensively, and
 with extremely reliable and valuable results, at many large computer
-software and/or hardware companies throughout the world.  In fact,
-many Unix vendors now ship Perl by default, and support is usually
+software and hardware companies throughout the world.  In fact,
+many Unix vendors now ship Perl by default.  Support is usually
 just a news-posting away, if you can't find the answer in the
 I<comprehensive> documentation, including this FAQ.
 
@@ -292,7 +292,7 @@ by the Perl Development Team.  Another big sell for Perl5 is the large
 number of modules and extensions which greatly reduce development time
 for any given task.  Also mention that the difference between version
 4 and version 5 of Perl is like the difference between awk and C++.
-(Well, OK, maybe not quite that distinct, but you get the idea.)  If you
+(Well, OK, maybe it's not quite that distinct, but you get the idea.)  If you
 want support and a reasonable guarantee that what you're developing
 will continue to work in the future, then you have to run the supported
 version.  That probably means running the 5.005 release, although 5.004
index df05091..f438baa 100644 (file)
@@ -69,19 +69,19 @@ eventually live on, and then type C<make install>.  Most other
 approaches are doomed to failure.
 
 One simple way to check that things are in the right place is to print out
-the hard-coded @INC which perl is looking for.
+the hard-coded @INC that perl looks through for libraries:
 
     % perl -e 'print join("\n",@INC)'
 
-If this command lists any paths which don't exist on your system, then you
+If this command lists any paths that don't exist on your system, then you
 may need to move the appropriate libraries to these locations, or create
 symbolic links, aliases, or shortcuts appropriately.  @INC is also printed as
 part of the output of
 
     % perl -V
 
-You might also want to check out L<perlfaq8/"How do I keep my own
-module/library directory?">.
+You might also want to check out 
+L<perlfaq8/"How do I keep my own module/library directory?">.
 
 =head2 I grabbed the sources and tried to compile but gdbm/dynamic loading/malloc/linking/... failed.  How do I make it work?
 
@@ -133,7 +133,7 @@ If you have Perl installed locally, you probably have the documentation
 installed as well: type C<man perl> if you're on a system resembling Unix.
 This will lead you to other important man pages, including how to set your
 $MANPATH.  If you're not on a Unix system, access to the documentation
-will be different; for example, it might be only in HTML format.  But all
+will be different; for example, documentation might only be in HTML format.  All
 proper Perl installations have fully-accessible documentation.
 
 You might also try C<perldoc perl> in case your system doesn't
@@ -145,14 +145,16 @@ complete documentation in various formats, including native pod,
 troff, html, and plain text.  There's also a web page at
 http://www.perl.com/perl/info/documentation.html that might help.
 
-Many good books have been written about Perl -- see the section below
+Many good books have been written about Perl--see the section below
 for more details.
 
 Tutorial documents are included in current or upcoming Perl releases
-include L<perltoot> for objects, L<perlopentut> for file opening
-semantics, L<perlreftut> for managing references, and L<perlxstut>
-for linking C and Perl together.  There may be more by the 
-time you read this.  The following URLs might also be of 
+include L<perltoot> for objects or L<perlboot> for a beginner's
+approach to objects, L<perlopentut> for file opening semantics,
+L<perlreftut> for managing references, L<perlretut> for regular
+expressions, L<perlthrtut> for threads, L<perldebtut> for debugging,
+and L<perlxstut> for linking C and Perl together.  There may be more
+by the time you read this.  The following URLs might also be of
 assistance:
 
     http://language.perl.com/info/documentation.html
@@ -193,7 +195,7 @@ a request.
 A number of books on Perl and/or CGI programming are available.  A few of
 these are good, some are OK, but many aren't worth your money.  Tom
 Christiansen maintains a list of these books, some with extensive
-reviews, at http://www.perl.com/perl/critiques/index.html.
+reviews, at http://www.perl.com/perl/critiques/index.html .
 
 The incontestably definitive reference book on Perl, written by
 the creator of Perl, is now (July 2000) in its third edition:
@@ -206,7 +208,7 @@ the creator of Perl, is now (July 2000) in its third edition:
 
 The companion volume to the Camel containing thousands
 of real-world examples, mini-tutorials, and complete programs
-(first premiering at the 1998 Perl Conference), is:
+(first premiered at the 1998 Perl Conference), is:
 
     The Perl Cookbook (the "Ram Book"):
        by Tom Christiansen and Nathan Torkington, 
@@ -215,8 +217,8 @@ of real-world examples, mini-tutorials, and complete programs
        http://perl.oreilly.com/cookbook/
 
 If you're already a hard-core systems programmer, then the Camel Book
-might suffice for you to learn Perl from.  But if you're not, check
-out:
+might suffice for you to learn Perl from.  If you're not, check
+out
 
     Learning Perl (the "Llama Book"):
        by Randal Schwartz and Tom Christiansen 
@@ -225,9 +227,9 @@ out:
        http://www.oreilly.com/catalog/lperl2/
 
 Despite the picture at the URL above, the second edition of "Llama
-Book" really has a blue cover, and is updated for the 5.004 release
+Book" really has a blue cover and was updated for the 5.004 release
 of Perl.  Various foreign language editions are available, including
-I<Learning Perl on Win32 Systems> (the Gecko Book).
+I<Learning Perl on Win32 Systems> (the "Gecko Book").
 
 If you're not an accidental programmer, but a more serious and possibly
 even degreed computer scientist who doesn't need as much hand-holding as
@@ -245,7 +247,7 @@ useful.  Your mileage may (but, we hope, probably won't) vary.
 
 Recommended books on (or mostly on) Perl follow.
 
-=over
+=over 4
 
 =item References
 
@@ -350,7 +352,7 @@ Recommended books on (or mostly on) Perl follow.
 
 The first and only periodical devoted to All Things Perl, I<The
 Perl Journal> contains tutorials, demonstrations, case studies,
-announcements, contests, and much more.  TPJ has columns on web
+announcements, contests, and much more.  I<TPJ> has columns on web
 development, databases, Win32 Perl, graphical programming, regular
 expressions, and networking, and sponsors the Obfuscated Perl
 Contest.  It is published quarterly under the gentle hand of its
@@ -362,11 +364,11 @@ on Perl are I<Web Techniques> (see http://www.webtechniques.com/),
 I<Performance Computing> (http://www.performance-computing.com/), and Usenix's
 newsletter/magazine to its members, I<login:>, at http://www.usenix.org/.
 Randal's Web Technique's columns are available on the web at
-http://www.stonehenge.com/merlyn/WebTechniques/.
+http://www.stonehenge.com/merlyn/WebTechniques/ .
 
 =head2 Perl on the Net: FTP and WWW Access
 
-To get the best (and possibly cheapest) performance, pick a site from
+To get the best performance, pick a site from
 the list below and use it to grab the complete list of mirror sites.
 From there you can find the quickest site for you.  Remember, the
 following list is I<not> the complete list of CPAN mirrors
@@ -399,7 +401,7 @@ best archives.  Just look up "*perl*" as a newsgroup.
 
     http://www.deja.com/dnquery.xp?QRY=&DBS=2&ST=PS&defaultOp=AND&LNG=ALL&format=terse&showsort=date&maxhits=25&subjects=&groups=*perl*&authors=&fromdate=&todate=
 
-You'll probably want to trim that down a bit, though.
+You might want to trim that down a bit, though.
 
 You'll probably want more a sophisticated query and retrieval mechanism
 than a file listing, preferably one that allows you to retrieve
@@ -413,7 +415,7 @@ let perlfaq-suggestions@perl.com know.
 
 =head2 Where can I buy a commercial version of Perl?
 
-In a real sense, Perl already I<is> commercial software: It has a license
+In a real sense, Perl already I<is> commercial software: it has a license
 that you can grab and carefully read to your manager. It is distributed
 in releases and comes in well-defined packages. There is a very large
 user community and an extensive literature.  The comp.lang.perl.*
@@ -427,13 +429,13 @@ However, these answers may not suffice for managers who require a
 purchase order from a company whom they can sue should anything go awry.
 Or maybe they need very serious hand-holding and contractual obligations.
 Shrink-wrapped CDs with Perl on them are available from several sources if
-that will help.  For example, many Perl books carry a Perl distribution
-on them, as do the O'Reilly Perl Resource Kits (in both the Unix flavor
+that will help.  For example, many Perl books include a distribution of Perl,
+as do the O'Reilly Perl Resource Kits (in both the Unix flavor
 and in the proprietary Microsoft flavor); the free Unix distributions
 also all come with Perl.
 
-Or you can purchase commercial incidence based support through the Perl
-Clinic.  The following is a commercial from them:
+Alternatively, you can purchase commercial incidence based support
+through the Perl Clinic.  The following is a commercial from them:
 
 "The Perl Clinic is a commercial Perl support service operated by
 ActiveState Tool Corp. and The Ingram Group.  The operators have many
@@ -444,7 +446,7 @@ on a wide range of platforms.
 we will put our best effort into understanding your problem, providing an
 explanation of the situation, and a recommendation on how to proceed."
 
-Contact The Perl Clinic at:
+Contact The Perl Clinic at
 
     www.PerlClinic.com
 
index b05b736..1d06c2d 100644 (file)
@@ -49,22 +49,22 @@ uninteresting, but may still be what you want.
 =head2 How do I debug my Perl programs?
 
 Have you tried C<use warnings> or used C<-w>?  They enable warnings 
-for dubious practices.
+to detect dubious practices.
 
 Have you tried C<use strict>?  It prevents you from using symbolic
 references, makes you predeclare any subroutines that you call as bare
 words, and (probably most importantly) forces you to predeclare your
-variables with C<my> or C<our> or C<use vars>.
+variables with C<my>, C<our>, or C<use vars>.
 
-Did you check the returns of each and every system call?  The operating
-system (and thus Perl) tells you whether they worked or not, and if not
+Did you check the return values of each and every system call?  The operating
+system (and thus Perl) tells you whether they worked, and if not
 why.
 
   open(FH, "> /etc/cantwrite")
     or die "Couldn't write to /etc/cantwrite: $!\n";
 
 Did you read L<perltrap>?  It's full of gotchas for old and new Perl
-programmers, and even has sections for those of you who are upgrading
+programmers and even has sections for those of you who are upgrading
 from languages like I<awk> and I<C>.
 
 Have you tried the Perl debugger, described in L<perldebug>?  You can
@@ -73,7 +73,7 @@ why what it's doing isn't what it should be doing.
 
 =head2 How do I profile my Perl programs?
 
-You should get the Devel::DProf module from CPAN, and also use
+You should get the Devel::DProf module from CPAN and also use
 Benchmark.pm from the standard distribution.  Benchmark lets you time
 specific portions of your code, while Devel::DProf gives detailed
 breakdowns of where your code spends its time.
@@ -104,7 +104,7 @@ on your hardware, operating system, and the load on your machine):
          map:  6 secs ( 4.97 usr  0.00 sys =  4.97 cpu)
 
 Be aware that a good benchmark is very hard to write.  It only tests the
-data you give it, and really proves little about differing complexities
+data you give it and proves little about the differing complexities
 of contrasting algorithms.
 
 =head2 How do I cross-reference my Perl programs?
@@ -125,17 +125,17 @@ challenging at best to write a stand-alone Perl parser.
 Of course, if you simply follow the guidelines in L<perlstyle>, you
 shouldn't need to reformat.  The habit of formatting your code as you
 write it will help prevent bugs.  Your editor can and should help you
-with this.  The perl-mode for emacs can provide a remarkable amount of
-help with most (but not all) code, and even less programmable editors
-can provide significant assistance.  Tom swears by the following
-settings in vi and its clones:
+with this.  The perl-mode or newer cperl-mode for emacs can provide
+remarkable amounts of help with most (but not all) code, and even less
+programmable editors can provide significant assistance.  Tom swears
+by the following settings in vi and its clones:
 
     set ai sw=4
     map! ^O {^M}^[O^T
 
 Now put that in your F<.exrc> file (replacing the caret characters
 with control characters) and away you go.  In insert mode, ^T is
-for indenting, ^D is for undenting, and ^O is for blockdenting --
+for indenting, ^D is for undenting, and ^O is for blockdenting--
 as it were.  If you haven't used the last one, you're missing
 a lot.  A more complete example, with comments, can be found at
 http://www.perl.com/CPAN-local/authors/id/TOMC/scripts/toms.exrc.gz
@@ -156,7 +156,7 @@ the trick.  And if not, it's easy to hack into what you want.
 
 =head2 Is there an IDE or Windows Perl Editor?
 
-If you're on Unix, you already have an IDE -- Unix itself.  This powerful
+If you're on Unix, you already have an IDE--Unix itself.  This powerful
 IDE derives from its interoperability, flexibility, and configurability.
 If you really want to get a feel for Unix-qua-IDE, the best thing to do
 is to find some high-powered programmer whose native language is Unix.
@@ -168,7 +168,7 @@ development *is* integrated, like a top-of-the-line German sports car:
 functional, powerful, and elegant.  You will be absolutely astonished
 at the speed and ease exhibited by the native speaker of Unix in his
 home territory.  The art and skill of a virtuoso can only be seen to be
-believed.  That is the path to mastery -- all these cobbled little IDEs
+believed.  That is the path to mastery--all these cobbled little IDEs
 are expensive toys designed to sell a flashy demo using cheap tricks,
 and being optimized for immediate but shallow understanding rather than
 enduring use, are but a dim palimpsest of real tools.
@@ -176,22 +176,24 @@ enduring use, are but a dim palimpsest of real tools.
 In short, you just have to learn the toolbox.  However, if you're not
 on Unix, then your vendor probably didn't bother to provide you with
 a proper toolbox on the so-called complete system that you forked out
-your hard-earned cash on.
+your hard-earned cash for.
 
-PerlBuilder (XXX URL to follow) is an integrated development environment
-for Windows that supports Perl development.  Perl programs are just plain
-text, though, so you could download emacs for Windows (???) or a vi clone
-(vim) which runs on for win32 (http://www.cs.vu.nl/%7Etmgil/vi.html).
-If you're transferring Windows files to Unix, be sure to transfer in
-ASCII mode so the ends of lines are appropriately mangled.
+PerlBuilder (http://www.solutionsoft.com/perl.htm) is an integrated
+development environment for Windows that supports Perl development.
+Perl programs are just plain text, though, so you could download emacs
+for Windows (http://www.gnu.org/software/emacs/windows/ntemacs.html)
+or a vi clone (vim) which runs on for win32
+(http://www.cs.vu.nl/%7Etmgil/vi.html).  If you're transferring
+Windows files to Unix be sure to transfer them in ASCII mode so the ends
+of lines are appropriately mangled.
 
 =head2 Where can I get Perl macros for vi?
 
 For a complete version of Tom Christiansen's vi configuration file,
-see http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/toms.exrc.gz,
-the standard benchmark file for vi emulators.  This runs best with nvi,
+see http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/toms.exrc.gz ,
+the standard benchmark file for vi emulators.  The file runs best with nvi,
 the current version of vi out of Berkeley, which incidentally can be built
-with an embedded Perl interpreter -- see http://www.perl.com/CPAN/src/misc.
+with an embedded Perl interpreter--see http://www.perl.com/CPAN/src/misc.
 
 =head2 Where can I get perl-mode for emacs?
 
@@ -223,7 +225,7 @@ that doesn't force you to use Tcl just to get at Tk.  Sx is an interface
 to the Athena Widget set.  Both are available from CPAN.  See the
 directory http://www.perl.com/CPAN/modules/by-category/08_User_Interfaces/
 
-Invaluable for Perl/Tk programming are: the Perl/Tk FAQ at
+Invaluable for Perl/Tk programming are the Perl/Tk FAQ at
 http://w4.lns.cornell.edu/%7Epvhp/ptk/ptkTOC.html , the Perl/Tk Reference
 Guide available at
 http://www.perl.com/CPAN-local/authors/Stephen_O_Lidie/ , and the
@@ -237,13 +239,12 @@ module, which is curses-based, can help with this.
 
 =head2 What is undump?
 
-See the next questions.
+See the next question on ``How can I make my Perl program run faster?''
 
 =head2 How can I make my Perl program run faster?
 
 The best way to do this is to come up with a better algorithm.  This
-can often make a dramatic difference.  Chapter 8 in the Camel has some
-efficiency tips in it you might want to look at.  Jon Bentley's book
+can often make a dramatic difference.  Jon Bentley's book
 ``Programming Pearls'' (that's not a misspelling!)  has some good tips
 on optimization, too.  Advice on benchmarking boils down to: benchmark
 and profile to make sure you're optimizing the right part, look for
@@ -254,8 +255,8 @@ A different approach is to autoload seldom-used Perl code.  See the
 AutoSplit and AutoLoader modules in the standard distribution for
 that.  Or you could locate the bottleneck and think about writing just
 that part in C, the way we used to take bottlenecks in C code and
-write them in assembler.  Similar to rewriting in C is the use of
-modules that have critical sections written in C (for instance, the
+write them in assembler.  Similar to rewriting in C,
+modules that have critical sections can be written in C (for instance, the
 PDL module from CPAN).
 
 In some cases, it may be worth it to use the backend compiler to
@@ -294,7 +295,7 @@ shared amongst all hashes using them, so require no reallocation.
 In some cases, using substr() or vec() to simulate arrays can be
 highly beneficial.  For example, an array of a thousand booleans will
 take at least 20,000 bytes of space, but it can be turned into one
-125-byte bit vector for a considerable memory savings.  The standard
+125-byte bit vector--a considerable memory savings.  The standard
 Tie::SubstrHash module can also help for certain types of data
 structure.  If you're working with specialist data structures
 (matrices, for instance) modules that implement these in C may use
@@ -339,7 +340,7 @@ $scalar> will return memory to the system, while on Solaris 2.6 it
 won't.  In general, try it yourself and see.
 
 However, judicious use of my() on your variables will help make sure
-that they go out of scope so that Perl can free up their storage for
+that they go out of scope so that Perl can free up that space for
 use in other parts of your program.  A global variable, of course, never
 goes out of scope, so you can't get its space automatically reclaimed,
 although undef()ing and/or delete()ing it will achieve the same effect.
@@ -380,12 +381,13 @@ care.
 See http://www.perl.com/CPAN/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ .
 
 A non-free, commercial product, ``The Velocity Engine for Perl'',
-(http://www.binevolve.com/ or http://www.binevolve.com/velocigen/) might
-also be worth looking at.  It will allow you to increase the performance
-of your Perl programs, up to 25 times faster than normal CGI Perl by
-running in persistent Perl mode, or 4 to 5 times faster without any
-modification to your existing CGI programs. Fully functional evaluation
-copies are available from the web site.
+(http://www.binevolve.com/ or http://www.binevolve.com/velocigen/ )
+might also be worth looking at.  It will allow you to increase the
+performance of your Perl programs, running programs up to 25 times
+faster than normal CGI Perl when running in persistent Perl mode or 4
+to 5 times faster without any modification to your existing CGI
+programs. Fully functional evaluation copies are available from the
+web site.
 
 =head2 How can I hide the source for my Perl program?
 
@@ -395,12 +397,12 @@ unsatisfactory) solutions with varying levels of ``security''.
 First of all, however, you I<can't> take away read permission, because
 the source code has to be readable in order to be compiled and
 interpreted.  (That doesn't mean that a CGI script's source is
-readable by people on the web, thoughonly by people with access to
-the filesystem) So you have to leave the permissions at the socially
+readable by people on the web, though--only by people with access to
+the filesystem.)  So you have to leave the permissions at the socially
 friendly 0755 level.
 
 Some people regard this as a security problem.  If your program does
-insecure things, and relies on people not knowing how to exploit those
+insecure things and relies on people not knowing how to exploit those
 insecurities, it is not secure.  It is often possible for someone to
 determine the insecure things and exploit them without viewing the
 source.  Security through obscurity, the name for hiding your bugs
@@ -412,7 +414,7 @@ the byte code compiler and interpreter described below, but the curious
 might still be able to de-compile it.  You can try using the native-code
 compiler described below, but crackers might be able to disassemble it.
 These pose varying degrees of difficulty to people wanting to get at
-your code, but none can definitively conceal it (this is true of every
+your code, but none can definitively conceal it (true of every
 language, not just Perl).
 
 If you're concerned about people profiting from your code, then the
@@ -434,10 +436,10 @@ really for people looking for turn-key solutions.
 Merely compiling into C does not in and of itself guarantee that your
 code will run very much faster.  That's because except for lucky cases
 where a lot of native type inferencing is possible, the normal Perl
-run time system is still present and so your program will take just as
+run-time system is still present and so your program will take just as
 long to run and be just as big.  Most programs save little more than
 compilation time, leaving execution no more than 10-30% faster.  A few
-rare programs actually benefit significantly (like several times
+rare programs actually benefit significantly (even running several times
 faster), but this takes some tweaking of your code.
 
 You'll probably be astonished to learn that the current version of the
@@ -452,8 +454,8 @@ For example, on one author's system, F</usr/bin/perl> is only 11k in
 size!
 
 In general, the compiler will do nothing to make a Perl program smaller,
-faster, more portable, or more secure.  In fact, it will usually hurt
-all of those.  The executable will be bigger, your VM system may take
+faster, more portable, or more secure.  In fact, it can make your
+situation worse.  The executable will be bigger, your VM system may take
 longer to load the whole thing, the binary is fragile and hard to fix,
 and compilation never stopped software piracy in the form of crackers,
 viruses, or bootleggers.  The real advantage of the compiler is merely
@@ -463,11 +465,13 @@ Perl install anyway.
 
 =head2 How can I compile Perl into Java?
 
-You can't.  Not yet, anyway.  You can integrate Java and Perl with the
+You can also integrate Java and Perl with the
 Perl Resource Kit from O'Reilly and Associates.  See
-http://www.oreilly.com/catalog/prkunix/ for more information.
-The Java interface will be supported in the core 5.6 release
-of Perl.
+http://www.oreilly.com/catalog/prkunix/ .
+
+Perl 5.6 comes with Java Perl Lingo, or JPL.  JPL, still in
+development, allows Perl code to be called from Java.  See jpl/README
+in the Perl source tree.
 
 =head2 How can I get C<#!perl> to work on [MS-DOS,NT,...]?
 
@@ -477,7 +481,7 @@ For OS/2 just use
 
 as the first line in C<*.cmd> file (C<-S> due to a bug in cmd.exe's
 `extproc' handling).  For DOS one should first invent a corresponding
-batch file, and codify it in C<ALTERNATIVE_SHEBANG> (see the
+batch file and codify it in C<ALTERNATIVE_SHEBANG> (see the
 F<INSTALL> file in the source distribution for more information).
 
 The Win95/NT installation, when using the ActiveState port of Perl,
@@ -546,9 +550,9 @@ For example:
     # VMS
     perl -e "print ""Hello world\n"""
 
-The problem is that none of this is reliable: it depends on the
+The problem is that none of these examples are reliable: they depend on the
 command interpreter.  Under Unix, the first two often work. Under DOS,
-it's entirely possible neither works.  If 4DOS was the command shell,
+it's entirely possible that neither works.  If 4DOS was the command shell,
 you'd probably have better luck like this:
 
   perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
@@ -596,13 +600,12 @@ when it runs fine on the command line'', see these sources:
     CGI Security FAQ
         http://www.go2net.com/people/paulp/cgi-security/safe-cgi.txt
 
-
 =head2 Where can I learn about object-oriented Perl programming?
 
-A good place to start is L<perltoot>, and you can use L<perlobj> and
-L<perlbot> for reference.  Perltoot didn't come out until the 5.004
-release, but you can get a copy (in pod, html, or postscript) from
-http://www.perl.com/CPAN/doc/FMTEYEWTK/ .
+A good place to start is L<perltoot>, and you can use L<perlobj>,
+L<perlboot>, and L<perlbot> for reference.  Perltoot didn't come out
+until the 5.004 release; you can get a copy (in pod, html, or
+postscript) from http://www.perl.com/CPAN/doc/FMTEYEWTK/ .
 
 =head2 Where can I learn about linking C with Perl? [h2xs, xsubpp]
 
@@ -614,7 +617,7 @@ how the authors of existing extension modules wrote their code and
 solved their problems.
 
 =head2 I've read perlembed, perlguts, etc., but I can't embed perl in
-my C program, what am I doing wrong?
+my C program; what am I doing wrong?
 
 Download the ExtUtils::Embed kit from CPAN and run `make test'.  If
 the tests pass, read the pods again and again and again.  If they
index 79905f8..23bc666 100644 (file)
@@ -4,7 +4,7 @@ perlfaq4 - Data Manipulation ($Revision: 1.49 $, $Date: 1999/05/23 20:37:49 $)
 
 =head1 DESCRIPTION
 
-The section of the FAQ answers question related to the manipulation
+The section of the FAQ answers questions related to the manipulation
 of data as numbers, dates, strings, arrays, hashes, and miscellaneous
 data issues.
 
@@ -13,13 +13,13 @@ data issues.
 =head2 Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?
 
 The infinite set that a mathematician thinks of as the real numbers can
-only be approximate on a computer, since the computer only has a finite
+only be approximated on a computer, since the computer only has a finite
 number of bits to store an infinite number of, um, numbers.
 
 Internally, your computer represents floating-point numbers in binary.
 Floating-point numbers read in from a file or appearing as literals
 in your program are converted from their decimal floating-point
-representation (eg, 19.95) to the internal binary representation.
+representation (eg, 19.95) to an internal binary representation.
 
 However, 19.95 can't be precisely represented as a binary
 floating-point number, just like 1/3 can't be exactly represented as a
@@ -29,7 +29,7 @@ of 19.95, therefore, isn't exactly 19.95.
 When a floating-point number gets printed, the binary floating-point
 representation is converted back to decimal.  These decimal numbers
 are displayed in either the format you specify with printf(), or the
-current output format for numbers (see L<perlvar/"$#"> if you use
+current output format for numbers.  (See L<perlvar/"$#"> if you use
 print.  C<$#> has a different default value in Perl5 than it did in
 Perl4.  Changing C<$#> yourself is deprecated.)
 
@@ -75,7 +75,7 @@ functions.
     $ceil   = ceil(3.5);                       # 4
     $floor  = floor(3.5);                      # 3
 
-In 5.000 to 5.003 Perls, trigonometry was done in the Math::Complex
+In 5.000 to 5.003 perls, trigonometry was done in the Math::Complex
 module.  With 5.004, the Math::Trig module (part of the standard Perl
 distribution) implements the trigonometric functions. Internally it
 uses the Math::Complex module and some functions can break out from
@@ -206,8 +206,8 @@ than more.
 
 Computers are good at being predictable and bad at being random
 (despite appearances caused by bugs in your programs :-).
-http://www.perl.com/CPAN/doc/FMTEYEWTK/random, courtesy of Tom
-Phoenix, talks more about this..  John von Neumann said, ``Anyone who
+http://www.perl.com/CPAN/doc/FMTEYEWTK/random , courtesy of Tom
+Phoenix, talks more about this.  John von Neumann said, ``Anyone who
 attempts to generate random numbers by deterministic means is, of
 course, living in a state of sin.''
 
@@ -286,7 +286,7 @@ Use the Time::JulianDay module (part of the Time-modules bundle
 available from CPAN.)
 
 Before you immerse yourself too deeply in this, be sure to verify that it
-is the I<Julian> Day you really want.  Are they really just interested in
+is the I<Julian> Day you really want.  Are you really just interested in
 a way of getting serial days so that they can do date arithmetic?  If you
 are interested in performing date arithmetic, this can be done using
 either Date::Manip or Date::Calc, without converting to Julian Day first.
@@ -398,7 +398,7 @@ addresses, etc.) for details.
 
 It depends just what you mean by ``escape''.  URL escapes are dealt
 with in L<perlfaq9>.  Shell escapes with the backslash (C<\>)
-character are removed with:
+character are removed with
 
     s/\\(.)/$1/g;
 
@@ -512,7 +512,7 @@ use substr() as an lvalue:
     substr($a, 0, 3) = "Tom";
 
 Although those with a pattern matching kind of thought process will
-likely prefer:
+likely prefer
 
     $a =~ s/^.../Tom/;
 
@@ -549,7 +549,7 @@ repetition count and repeated pattern like this:
 
 =head2 How can I count the number of occurrences of a substring within a string?
 
-There are a number of ways, with varying efficiency: If you want a
+There are a number of ways, with varying efficiency If you want a
 count of a certain single character (X) within a string, you can use the
 C<tr///> function like so:
 
@@ -574,8 +574,8 @@ To make the first letter of each word upper case:
         $line =~ s/\b(\w)/\U$1/g;
 
 This has the strange effect of turning "C<don't do it>" into "C<Don'T
-Do It>".  Sometimes you might want this, instead (Suggested by brian d. 
-foy):
+Do It>".  Sometimes you might want this.  Other times you might need a
+more thorough solution (Suggested by brian d.  foy):
 
     $string =~ s/ (
                  (^\w)    #at the beginning of the line
@@ -637,15 +637,15 @@ distribution) lets you say:
     use Text::ParseWords;
     @new = quotewords(",", 0, $text);
 
-There's also a Text::CSV module on CPAN.
+There's also a Text::CSV (Comma-Separated Values) module on CPAN.
 
 =head2 How do I strip blank space from the beginning/end of a string?
 
-Although the simplest approach would seem to be:
+Although the simplest approach would seem to be
 
     $string =~ s/^\s*(.*?)\s*$/$1/;
 
-Not only is this unnecessarily slow and destructive, it also fails with
+not only is this unnecessarily slow and destructive, it also fails with
 embedded newlines.  It is much faster to do this operation in two steps:
 
     $string =~ s/^\s+//;
@@ -740,7 +740,7 @@ you can use this kind of thing:
 =head2 How do I find the soundex value of a string?
 
 Use the standard Text::Soundex module distributed with Perl.
-But before you do so, you may want to determine whether `soundex' is in
+Before you do so, you may want to determine whether `soundex' is in
 fact what you think it is.  Knuth's soundex algorithm compresses words
 into a small space, and so it does not necessarily distinguish between
 two words which you might want to appear separately.  For example, the
@@ -779,9 +779,9 @@ of the FAQ.
 
 =head2 What's wrong with always quoting "$vars"?
 
-The problem is that those double-quotes force stringification,
-coercing numbers and references into stringseven when you
-don't want them to be.  Think of it this way: double-quote
+The problem is that those double-quotes force stringification--
+coercing numbers and references into strings--even when you
+don't want them to be strings.  Think of it this way: double-quote
 expansion is used to produce new strings.  If you already 
 have a string, why do you need more?
 
@@ -857,13 +857,13 @@ in the indentation.
 A nice general-purpose fixer-upper function for indented here documents
 follows.  It expects to be called with a here document as its argument.
 It looks to see whether each line begins with a common substring, and
-if so, strips that off.  Otherwise, it takes the amount of leading
-white space found on the first line and removes that much off each
+if so, strips that substring off.  Otherwise, it takes the amount of leading
+whitespace found on the first line and removes that much off each
 subsequent line.
 
     sub fix {
         local $_ = shift;
-        my ($white, $leader);  # common white space and common leading string
+        my ($white, $leader);  # common whitespace and common leading string
         if (/^\s*(?:([^\w\s]+)(\s*).*\n)(?:\s*\1\2?.*\n)+$/) {
             ($white, $leader) = ($2, quotemeta($1));
         } else {
@@ -886,7 +886,7 @@ This works with leading special strings, dynamically determined:
        @@@ }
     MAIN_INTERPRETER_LOOP
 
-Or with a fixed amount of leading white space, with remaining
+Or with a fixed amount of leading whitespace, with remaining
 indentation correctly preserved:
 
     $poem = fix<<EVER_ON_AND_ON;
@@ -910,7 +910,7 @@ Subroutines are passed and return lists, you put things into list
 context, you initialize arrays with lists, and you foreach() across
 a list.  C<@> variables are arrays, anonymous arrays are arrays, arrays
 in scalar context behave like the number of elements in them, subroutines
-access their arguments through the array C<@_>, push/pop/shift only work
+access their arguments through the array C<@_>, and push/pop/shift only work
 on arrays.
 
 As a side note, there's no such thing as a list in scalar context.
@@ -924,7 +924,7 @@ last value to be returned: 9.
 
 =head2 What is the difference between $array[1] and @array[1]?
 
-The former is a scalar value, the latter an array slice, which makes
+The former is a scalar value; the latter an array slice, making
 it a list with one (scalar) value.  You should use $ when you want a
 scalar value (most of the time) and @ when you want a list with one
 scalar value in it (very, very rarely; nearly never, in fact).
@@ -952,12 +952,12 @@ ordered and whether you wish to preserve the ordering.
 (this assumes all true values in the array)
 
     $prev = 'nonesuch';
-    @out = grep($_ ne $prev && ($prev = $_), @in);
+    @out = grep($_ ne $prev && ($prev = $_, 1), @in);
 
 This is nice in that it doesn't use much extra memory, simulating
-uniq(1)'s behavior of removing only adjacent duplicates.  It's less
-nice in that it won't work with false values like undef, 0, or "";
-"0 but true" is OK, though.
+uniq(1)'s behavior of removing only adjacent duplicates.  The ", 1"
+guarantees that the expression is true (so that grep picks it up)
+even if the $_ is 0, "", or undef.
 
 =item b) If you don't know whether @in is sorted:
 
@@ -1023,11 +1023,11 @@ Now check whether C<vec($read,$n,1)> is true for some C<$n>.
 
 Please do not use
 
-    $is_there = grep $_ eq $whatever, @array;
+    ($is_there) = grep $_ eq $whatever, @array;
 
 or worse yet
 
-    $is_there = grep /$whatever/, @array;
+    ($is_there) = grep /$whatever/, @array;
 
 These are slow (checks every element even if the first matches),
 inefficient (same reason), and potentially buggy (what if there are
@@ -1057,7 +1057,7 @@ each element is unique in a given array:
     }
 
 Note that this is the I<symmetric difference>, that is, all elements in
-either A or in B, but not in both.  Think of it as an xor operation.
+either A or in B but not in both.  Think of it as an xor operation.
 
 =head2 How do I test whether two arrays or hashes are equal?
 
@@ -1148,7 +1148,7 @@ You could walk the list this way:
     }
     print "\n";
 
-You could grow the list this way:
+You could add to the list this way:
 
     my ($head, $tail);
     $tail = append($head, 1);       # grow a new head
@@ -1196,7 +1196,7 @@ Use this:
     fisher_yates_shuffle( \@array );    # permutes @array in place
 
 You've probably seen shuffling algorithms that work using splice,
-randomly picking another element to swap the current element with:
+randomly picking another element to swap the current element with
 
     srand;
     @new = ();
@@ -1297,7 +1297,7 @@ case-insensitively.
     }
     @sorted = @data[ sort { $idx[$a] cmp $idx[$b] } 0 .. $#idx ];
 
-Which could also be written this way, using a trick
+which could also be written this way, using a trick
 that's come to be known as the Schwartzian Transform:
 
     @sorted = map  { $_->[0] }
@@ -1438,7 +1438,7 @@ table, at which point you've totally bamboozled the iterator code.
 Even if the table doesn't double, there's no telling whether your new
 entry will be inserted before or after the current iterator position.
 
-Either treasure up your changes and make them after the iterator finishes,
+Either treasure up your changes and make them after the iterator finishes
 or use keys to fetch all the old keys at once, and iterate over the list
 of keys.
 
@@ -1471,7 +1471,7 @@ take the scalar sense of the keys() function:
 
     $num_keys = scalar keys %hash;
 
-In void context, the keys() function just resets the iterator, which is
+The keys() function also resets the iterator, which in void context is
 faster for tied hashes than would be iterating through the whole 
 hash, one key-value pair at a time.
 
@@ -1487,8 +1487,8 @@ keys or values:
            } keys %hash;       # and by value
 
 Here we'll do a reverse numeric sort by value, and if two keys are
-identical, sort by length of key, and if that fails, by straight ASCII
-comparison of the keys (well, possibly modified by your locale -- see
+identical, sort by length of key, or if that fails, by straight ASCII
+comparison of the keys (well, possibly modified by your locale--see
 L<perllocale>).
 
     @keys = sort {
index 3cb66bf..e4ad3fa 100644 (file)
@@ -10,7 +10,7 @@ formats, and footers.
 =head2 How do I flush/unbuffer an output filehandle?  Why must I do this?
 
 The C standard I/O library (stdio) normally buffers characters sent to
-devices.  This is done for efficiency reasons, so that there isn't a
+devices.  This is done for efficiency reasons so that there isn't a
 system call for each byte.  Any time you use print() or write() in
 Perl, you go though this buffering.  syswrite() circumvents stdio and
 buffering.
@@ -83,16 +83,17 @@ Perl is a programming language.  You have to decompose the problem into
 low-level calls to read, write, open, close, and seek.
 
 Although humans have an easy time thinking of a text file as being a
-sequence of lines that operates much like a stack of playing cards -- or
-punch cards -- computers usually see the text file as a sequence of bytes.
+sequence of lines that operates much like a stack of playing cards--or
+punch cards--computers usually see the text file as a sequence of bytes.
 In general, there's no direct way for Perl to seek to a particular line
 of a file, insert text into a file, or remove text from a file.
 
-(There are exceptions in special circumstances.  You can add or remove at
-the very end of the file.  Another is replacing a sequence of bytes with
-another sequence of the same length.  Another is using the C<$DB_RECNO>
-array bindings as documented in L<DB_File>.  Yet another is manipulating
-files with all lines the same length.)
+(There are exceptions in special circumstances.  You can add or remove
+data at the very end of the file.  A sequence of bytes can be replaced
+with another sequence of the same length.  The C<$DB_RECNO> array
+bindings as documented in L<DB_File> also provide a direct way of
+modifying a file.  Files where all lines are the same length are also
+easy to alter.)
 
 The general solution is to create a temporary copy of the text file with
 the changes you want, then copy that over the original.  This assumes
@@ -174,16 +175,17 @@ This assumes no funny games with newline translations.
 =head2 How do I make a temporary file name?
 
 Use the C<new_tmpfile> class method from the IO::File module to get a
-filehandle opened for reading and writing.  Use this if you don't
-need to know the file's name.
+filehandle opened for reading and writing.  Use it if you don't
+need to know the file's name:
 
     use IO::File;
     $fh = IO::File->new_tmpfile()
        or die "Unable to make new temporary file: $!";
 
-Or you can use the C<tmpnam> function from the POSIX module to get a
-filename that you then open yourself.  Use this if you do need to know
-the file's name.
+If you do need to know the file's name, you can use the C<tmpnam>
+function from the POSIX module to get a filename that you then open
+yourself:
+
 
     use Fcntl;
     use POSIX qw(tmpnam);
@@ -199,9 +201,9 @@ the file's name.
 
     # now go on to use the file ...
 
-If you're committed to doing this by hand, use the process ID and/or
-the current time-value.  If you need to have many temporary files in
-one process, use a counter:
+If you're committed to creating a temporary file by hand, use the
+process ID and/or the current time-value.  If you need to have many
+temporary files in one process, use a counter:
 
     BEGIN {
        use Fcntl;
@@ -272,7 +274,7 @@ had, for example, a function named TmpHandle(), or a variable named
        # *HostFile automatically closes/disappears here
     }
 
-Here's how to use this in a loop to open and store a bunch of
+Here's how to use typeglobs in a loop to open and store a bunch of
 filehandles.  We'll use as values of the hash an ordered
 pair to make it easy to sort the hash in insertion order.
 
@@ -292,8 +294,8 @@ pair to make it easy to sort the hash in insertion order.
     }
 
 For passing filehandles to functions, the easiest way is to 
-preface them with a star, as in func(*STDIN).  See L<perlfaq7/"Passing
-Filehandles"> for details.
+preface them with a star, as in func(*STDIN).  
+See L<perlfaq7/"Passing Filehandles"> for details.
 
 If you want to create many anonymous handles, you should check out the
 Symbol, FileHandle, or IO::Handle (etc.) modules.  Here's the equivalent
@@ -306,7 +308,7 @@ code with Symbol::gensym, which is reasonably light-weight:
         $file{$filename} = [ $i++, $fh ];
     }
 
-Or here using the semi-object-oriented FileHandle module, which certainly
+Here's using the semi-object-oriented FileHandle module, which certainly
 isn't light-weight:
 
     use FileHandle;
@@ -317,7 +319,7 @@ isn't light-weight:
     }
 
 Please understand that whether the filehandle happens to be a (probably
-localized) typeglob or an anonymous handle from one of the modules,
+localized) typeglob or an anonymous handle from one of the modules
 in no way affects the bizarre rules for managing indirect handles.
 See the next question.
 
@@ -325,7 +327,7 @@ See the next question.
 
 An indirect filehandle is using something other than a symbol
 in a place that a filehandle is expected.  Here are ways
-to get those:
+to get indirect filehandles:
 
     $fh =   SOME_FH;       # bareword is strict-subs hostile
     $fh =  "SOME_FH";      # strict-refs hostile; same package only
@@ -333,7 +335,7 @@ to get those:
     $fh = \*SOME_FH;       # ref to typeglob (bless-able)
     $fh =  *SOME_FH{IO};   # blessed IO::Handle from *SOME_FH typeglob
 
-Or to use the C<new> method from the FileHandle or IO modules to
+Or, you can use the C<new> method from the FileHandle or IO modules to
 create an anonymous filehandle, store that in a scalar variable,
 and use it as though it were a normal filehandle.
 
@@ -378,9 +380,10 @@ is risky.)
     accept_fh($handle);
 
 In the examples above, we assigned the filehandle to a scalar variable
-before using it.  That is because only simple scalar variables,
-not expressions or subscripts into hashes or arrays, can be used with
-built-ins like C<print>, C<printf>, or the diamond operator.  These are
+before using it.  That is because only simple scalar variables, not
+expressions or subscripts of hashes or arrays, can be used with
+built-ins like C<print>, C<printf>, or the diamond operator.  Using
+something other than a simple scalar varaible as a filehandle is
 illegal and won't even compile:
 
     @fd = (*STDIN, *STDOUT, *STDERR);
@@ -449,7 +452,7 @@ You can't just:
 because you have to put the comma in and then recalculate your
 position.
 
-Alternatively, this commifies all numbers in a line regardless of
+Alternatively, this code commifies all numbers in a line regardless of
 whether they have decimal portions, are preceded by + or -, or
 whatever:
 
@@ -465,7 +468,7 @@ whatever:
 
 Use the <> (glob()) operator, documented in L<perlfunc>.  This
 requires that you have a shell installed that groks tildes, meaning
-csh or tcsh or (some versions of) ksh, and thus may have portability
+csh or tcsh or (some versions of) ksh, and thus your code may have portability
 problems.  The Glob::KGlob module (available from CPAN) gives more
 portable glob functionality.
 
@@ -551,8 +554,8 @@ To open a file without blocking, creating if necessary:
 
 Be warned that neither creation nor deletion of files is guaranteed to
 be an atomic operation over NFS.  That is, two processes might both
-successful create or unlink the same file!  Therefore O_EXCL
-isn't so exclusive as you might wish.
+successfully create or unlink the same file!  Therefore O_EXCL
+isn't as exclusive as you might wish.
 
 See also the new L<perlopentut> if you have it (new for 5.6).
 
@@ -573,15 +576,15 @@ one that doesn't use the shell to do globbing.
 
 Due to the current implementation on some operating systems, when you
 use the glob() function or its angle-bracket alias in a scalar
-context, you may cause a leak and/or unpredictable behavior.  It's
+context, you may cause a memory leak and/or unpredictable behavior.  It's
 best therefore to use glob() only in list context.
 
 =head2 How can I open a file with a leading ">" or trailing blanks?
 
 Normally perl ignores trailing blanks in filenames, and interprets
 certain leading characters (or a trailing "|") to mean something
-special.  To avoid this, you might want to use a routine like this.
-It makes incomplete pathnames into explicit relative ones, and tacks a
+special.  To avoid this, you might want to use a routine like the one below.
+It turns incomplete pathnames into explicit relative ones, and tacks a
 trailing null byte on the name to make perl leave it alone:
 
     sub safe_filename {
@@ -603,7 +606,7 @@ It would be a lot clearer to use sysopen(), though:
 
     use Fcntl;
     $badpath = "<<<something really wicked   ";
-    open (FH, $badpath, O_WRONLY | O_CREAT | O_TRUNC)
+    sysopen (FH, $badpath, O_WRONLY | O_CREAT | O_TRUNC)
        or die "can't open $badpath: $!";
 
 For more information, see also the new L<perlopentut> if you have it
@@ -611,10 +614,10 @@ For more information, see also the new L<perlopentut> if you have it
 
 =head2 How can I reliably rename a file?
 
-Well, usually you just use Perl's rename() function.  But that may not
-work everywhere, in particular, renaming files across file systems.
+Well, usually you just use Perl's rename() function.  That may not
+work everywhere, though, particularly when renaming files across file systems.
 Some sub-Unix systems have broken ports that corrupt the semantics of
-rename() -- for example, WinNT does this right, but Win95 and Win98
+rename()--for example, WinNT does this right, but Win95 and Win98
 are broken.  (The last two parts are not surprising, but the first is. :-)
 
 If your operating system supports a proper mv(1) program or its moral
@@ -624,11 +627,11 @@ equivalent, this works:
 
 It may be more compelling to use the File::Copy module instead.  You
 just copy to the new file to the new name (checking return values),
-then delete the old one.  This isn't really the same semantics as a
+then delete the old one.  This isn't really the same semantically as a
 real rename(), though, which preserves metainformation like
 permissions, timestamps, inode info, etc.
 
-The newer version of File::Copy exports a move() function.
+Newer versions of File::Copy exports a move() function.
 
 =head2 How can I lock a file?
 
@@ -654,12 +657,12 @@ filehandle be open for writing (or appending, or read/writing).
 
 Some versions of flock() can't lock files over a network (e.g. on NFS file
 systems), so you'd need to force the use of fcntl(2) when you build Perl.
-But even this is dubious at best.  See the flock entry of L<perlfunc>,
+But even this is dubious at best.  See the flock entry of L<perlfunc>
 and the F<INSTALL> file in the source distribution for information on
 building Perl to do this.
 
 Two potentially non-obvious but traditional flock semantics are that
-it waits indefinitely until the lock is granted, and that its locks
+it waits indefinitely until the lock is granted, and that its locks are
 I<merely advisory>.  Such discretionary locks are more flexible, but
 offer fewer guarantees.  This means that files locked with flock() may
 be modified by programs that do not also use flock().  Cars that stop
@@ -667,13 +670,13 @@ for red lights get on well with each other, but not with cars that don't
 stop for red lights.  See the perlport manpage, your port's specific
 documentation, or your system-specific local manpages for details.  It's
 best to assume traditional behavior if you're writing portable programs.
-(But if you're not, you should as always feel perfectly free to write
+(If you're not, you should as always feel perfectly free to write
 for your own system's idiosyncrasies (sometimes called "features").
 Slavish adherence to portability concerns shouldn't get in the way of
 your getting your job done.)
 
-For more information on file locking, see also L<perlopentut/"File
-Locking"> if you have it (new for 5.6).
+For more information on file locking, see also 
+L<perlopentut/"File Locking"> if you have it (new for 5.6).
 
 =back
 
@@ -700,8 +703,8 @@ these tend to involve busy-wait, which is also subdesirable.
 
 Didn't anyone ever tell you web-page hit counters were useless?
 They don't count number of hits, they're a waste of time, and they serve
-only to stroke the writer's vanity.  Better to pick a random number.
-It's more realistic.
+only to stroke the writer's vanity.  It's better to pick a random number;
+they're more realistic.
 
 Anyway, this is what you can do if you can't help yourself.
 
@@ -712,8 +715,6 @@ Anyway, this is what you can do if you can't help yourself.
     seek(FH, 0, 0)                              or die "can't rewind numfile: $!";
     truncate(FH, 0)                             or die "can't truncate numfile: $!";
     (print FH $num+1, "\n")                     or die "can't write numfile: $!";
-    # Perl as of 5.004 automatically flushes before unlocking
-    flock(FH, LOCK_UN)                                  or die "can't flock numfile: $!";
     close FH                                    or die "can't close numfile: $!";
 
 Here's a much better web-page hit counter:
@@ -743,7 +744,7 @@ like this:
     close FH;
 
 Locking and error checking are left as an exercise for the reader.
-Don't forget them, or you'll be quite sorry.
+Don't forget them or you'll be quite sorry.
 
 =head2 How do I get a file's timestamp in perl?
 
@@ -793,7 +794,7 @@ Error checking is, as usual, left as an exercise for the reader.
 
 Note that utime() currently doesn't work correctly with Win95/NT
 ports.  A bug has been reported.  Check it carefully before using
-it on those platforms.
+utime() on those platforms.
 
 =head2 How do I print to more than one file at once?
 
@@ -815,8 +816,8 @@ Or even:
     close(STDOUT)                            or die "Closing: $!\n";
 
 Otherwise you'll have to write your own multiplexing print
-function -- or your own tee program -- or use Tom Christiansen's,
-at http://www.perl.com/CPAN/authors/id/TOMC/scripts/tct.gz, which is
+function--or your own tee program--or use Tom Christiansen's,
+at http://www.perl.com/CPAN/authors/id/TOMC/scripts/tct.gz , which is
 written in Perl and offers much greater functionality
 than the stock version.
 
@@ -834,12 +835,12 @@ do so one line at a time:
 
 This is tremendously more efficient than reading the entire file into
 memory as an array of lines and then processing it one element at a time,
-which is often -- if not almost always -- the wrong approach.  Whenever
+which is often--if not almost always--the wrong approach.  Whenever
 you see someone do this:
 
     @lines = <INPUT>;
 
-You should think long and hard about why you need everything loaded
+you should think long and hard about why you need everything loaded
 at once.  It's just not a scalable solution.  You might also find it
 more fun to use the standard DB_File module's $DB_RECNO bindings,
 which allow you to tie an array to a file so that accessing an element
@@ -847,7 +848,7 @@ the array actually accesses the corresponding line in the file.
 
 On very rare occasion, you may have an algorithm that demands that
 the entire file be in memory at once as one scalar.  The simplest solution
-to that is:
+to that is
 
     $var = `cat $file`;
 
@@ -886,7 +887,7 @@ Note that a blank line must have no blanks in it.  Thus C<"fred\n
 
 You can use the builtin C<getc()> function for most filehandles, but
 it won't (easily) work on a terminal device.  For STDIN, either use
-the Term::ReadKey module from CPAN, or use the sample code in
+the Term::ReadKey module from CPAN or use the sample code in
 L<perlfunc/getc>.
 
 If your system supports the portable operating system programming
@@ -942,7 +943,7 @@ turns off echo processing as well.
 
     END { cooked() }
 
-The Term::ReadKey module from CPAN may be easier to use.  Recent version
+The Term::ReadKey module from CPAN may be easier to use.  Recent versions
 include also support for non-portable systems as well.
 
     use Term::ReadKey;
@@ -997,8 +998,8 @@ table:
     # 78-83   ALT 1234567890-=
     # 84      CTR PgUp
 
-This is all trial and error I did a long time ago, I hope I'm reading the
-file that worked.
+This is all trial and error I did a long time ago; I hope I'm reading the
+file that worked...
 
 =head2 How can I tell whether there's a character waiting on a filehandle?
 
@@ -1056,7 +1057,7 @@ And then hard-code it, leaving porting as an exercise to your successor.
     ioctl(FH, $FIONREAD, $size)     or die "Couldn't call ioctl: $!\n";
     $size = unpack("L", $size);
 
-FIONREAD requires a filehandle connected to a stream, meaning sockets,
+FIONREAD requires a filehandle connected to a stream, meaning that sockets,
 pipes, and tty devices work, but I<not> files.
 
 =head2 How do I do a C<tail -f> in perl?
@@ -1111,14 +1112,14 @@ Error checking, as always, has been left as an exercise for the reader.
 
 This should rarely be necessary, as the Perl close() function is to be
 used for things that Perl opened itself, even if it was a dup of a
-numeric descriptor, as with MHCONTEXT above.  But if you really have
+numeric descriptor as with MHCONTEXT above.  But if you really have
 to, you may be able to do this:
 
     require 'sys/syscall.ph';
     $rc = syscall(&SYS_close, $fd + 0);  # must force numeric
     die "can't sysclose $fd: $!" unless $rc == -1;
 
-Or just use the fdopen(3S) feature of open():
+Or, just use the fdopen(3S) feature of open():
 
     { 
        local *F; 
@@ -1138,7 +1139,7 @@ have a file called "c:(tab)emp(formfeed)oo" or
 Either single-quote your strings, or (preferably) use forward slashes.
 Since all DOS and Windows versions since something like MS-DOS 2.0 or so
 have treated C</> and C<\> the same in a path, you might as well use the
-one that doesn't clash with Perl -- or the POSIX shell, ANSI C and C++,
+one that doesn't clash with Perl--or the POSIX shell, ANSI C and C++,
 awk, Tcl, Java, or Python, just to mention a few.  POSIX paths
 are more portable, too.
 
@@ -1173,7 +1174,7 @@ Here's an algorithm from the Camel Book:
 
 This has a significant advantage in space over reading the whole
 file in.  A simple proof by induction is available upon 
-request if you doubt its correctness.
+request if you doubt the algorithm's correctness.
 
 =head2 Why do I get weird spaces when I print an array of lines?
 
@@ -1183,7 +1184,7 @@ Saying
 
 joins together the elements of C<@lines> with a space between them.
 If C<@lines> were C<("little", "fluffy", "clouds")> then the above
-statement would print:
+statement would print
 
     little fluffy clouds
 
index 4ab4d4c..a032d49 100644 (file)
@@ -8,8 +8,9 @@ This section is surprisingly small because the rest of the FAQ is
 littered with answers involving regular expressions.  For example,
 decoding a URL and checking whether something is a number are handled
 with regular expressions, but those answers are found elsewhere in
-this document (in the section on Data and the Networking one on
-networking, to be precise).
+this document (in L<perlfaq9>: ``How do I decode or create those %-encodings 
+on the web'' and L<perfaq4>: ``How do I determine whether a scalar is
+a number/whole/integer/float'', to be precise).
 
 =head2 How can I hope to use regular expressions without creating illegible and unmaintainable code?
 
@@ -175,7 +176,7 @@ appear within a certain time.
     $file->waitfor('/second line\n/');
     print $file->getline;
 
-=head2 How do I substitute case insensitively on the LHS, but preserving case on the RHS?
+=head2 How do I substitute case insensitively on the LHS while preserving case on the RHS?
 
 Here's a lovely Perlish solution by Larry Rosler.  It exploits
 properties of bitwise xor on ASCII strings.
@@ -280,10 +281,11 @@ Without the \Q, the regex would also spuriously match "di".
 =head2 What is C</o> really for?
 
 Using a variable in a regular expression match forces a re-evaluation
-(and perhaps recompilation) each time through.  The C</o> modifier
-locks in the regex the first time it's used.  This always happens in a
-constant regular expression, and in fact, the pattern was compiled
-into the internal format at the same time your entire program was.
+(and perhaps recompilation) each time the regular expression is
+encountered.  The C</o> modifier locks in the regex the first time
+it's used.  This always happens in a constant regular expression, and
+in fact, the pattern was compiled into the internal format at the same
+time your entire program was.
 
 Use of C</o> is irrelevant unless variable interpolation is used in
 the pattern, and if so, the regex engine will neither know nor care
@@ -367,8 +369,8 @@ A slight modification also removes C++ comments:
 =head2 Can I use Perl regular expressions to match balanced text?
 
 Although Perl regular expressions are more powerful than "mathematical"
-regular expressions, because they feature conveniences like backreferences
-(C<\1> and its ilk), they still aren't powerful enough -- with
+regular expressions because they feature conveniences like backreferences
+(C<\1> and its ilk), they still aren't powerful enough--with
 the possible exception of bizarre and experimental features in the
 development-track releases of Perl.  You still need to use non-regex
 techniques to parse balanced text, such as the text enclosed between
@@ -379,7 +381,7 @@ and possibly nested single chars, like C<`> and C<'>, C<{> and C<}>,
 or C<(> and C<)> can be found in
 http://www.perl.com/CPAN/authors/id/TOMC/scripts/pull_quotes.gz .
 
-The C::Scan module from CPAN contains such subs for internal usage,
+The C::Scan module from CPAN contains such subs for internal use,
 but they are undocumented.
 
 =head2 What does it mean that regexes are greedy?  How can I get around it?
@@ -450,7 +452,8 @@ regular expression:
        print "$count $line";
     }
 
-If you want these output in a sorted order, see the section on Hashes.
+If you want these output in a sorted order, see L<perlfaq4>: ``How do I
+sort a hash (optionally by value instead of key)?''.
 
 =head2 How can I do approximate matching?
 
@@ -487,7 +490,7 @@ approach, one which makes use of the new C<qr//> operator:
 
 =head2 Why don't word-boundary searches with C<\b> work for me?
 
-Two common misconceptions are that C<\b> is a synonym for C<\s+>, and
+Two common misconceptions are that C<\b> is a synonym for C<\s+> and
 that it's the edge between whitespace characters and non-whitespace
 characters.  Neither is correct.  C<\b> is the place between a C<\w>
 character and a C<\W> character (that is, C<\b> is the edge of a
@@ -514,11 +517,11 @@ not "this" or "island".
 
 =head2 Why does using $&, $`, or $' slow my program down?
 
-Because once Perl sees that you need one of these variables anywhere in
-the program, it has to provide them on each and every pattern match.
+Once Perl sees that you need one of these variables anywhere in
+the program, it provides them on each and every pattern match.
 The same mechanism that handles these provides for the use of $1, $2,
 etc., so you pay the same price for each regex that contains capturing
-parentheses. But if you never use $&, etc., in your script, then regexes
+parentheses.  If you never use $&, etc., in your script, then regexes
 I<without> capturing parentheses won't be penalized. So avoid $&, $',
 and $` if you can, but if you can't, once you've used them at all, use
 them at will because you've already paid the price.  Remember that some
@@ -589,7 +592,7 @@ Of course, that could have been written as
       }
     }
 
-But then you lose the vertical alignment of the regular expressions.
+but then you lose the vertical alignment of the regular expressions.
 
 =head2 Are Perl regexes DFAs or NFAs?  Are they POSIX compliant?
 
@@ -670,12 +673,12 @@ Well, if it's really a pattern, then just use
     chomp($pattern = <STDIN>);
     if ($line =~ /$pattern/) { }
 
-Or, since you have no guarantee that your user entered
+Alternatively, since you have no guarantee that your user entered
 a valid regular expression, trap the exception this way:
 
     if (eval { $line =~ /$pattern/ }) { }
 
-But if all you really want to search for a string, not a pattern,
+If all you really want to search for a string, not a pattern,
 then you should either use the index() function, which is made for
 string searching, or if you can't be disabused of using a pattern
 match on a non-pattern, then be sure to use C<\Q>...C<\E>, documented
index 0d4876f..9e559f7 100644 (file)
@@ -29,18 +29,18 @@ They are type specifiers, as detailed in L<perldata>:
     * for all types of that symbol name.  In version 4 you used them like
       pointers, but in modern perls you can just use references.
 
-A couple of others that you're likely to encounter that aren't
-really type specifiers are:
+There are couple of other symbols that you're likely to encounter that aren't
+really type specifiers:
 
     <> are used for inputting a record from a filehandle.
     \  takes a reference to something.
 
 Note that <FILE> is I<neither> the type specifier for files
 nor the name of the handle.  It is the C<< <> >> operator applied
-to the handle FILE.  It reads one line (well, record - see
+to the handle FILE.  It reads one line (well, record--see
 L<perlvar/$/>) from the handle FILE in scalar context, or I<all> lines
 in list context.  When performing open, close, or any other operation
-besides C<< <> >> on files, or even talking about the handle, do
+besides C<< <> >> on files, or even when talking about the handle, do
 I<not> use the brackets.  These are correct: C<eof(FH)>, C<seek(FH, 0,
 2)> and "copying from STDIN to FILE".
 
@@ -106,15 +106,15 @@ use my() on C<$^W>, only local().
 
 =head2 What's an extension?
 
-A way of calling compiled C code from Perl.  Reading L<perlxstut>
-is a good place to learn more about extensions.
+An extension is a way of calling compiled C code from Perl.  Reading
+L<perlxstut> is a good place to learn more about extensions.
 
 =head2 Why do Perl operators have different precedence than C operators?
 
 Actually, they don't.  All C operators that Perl copies have the same
 precedence in Perl as they do in C.  The problem is with operators that C
 doesn't have, especially functions that give a list context to everything
-on their right, eg print, chmod, exec, and so on.  Such functions are
+on their right, eg. print, chmod, exec, and so on.  Such functions are
 called "list operators" and appear as such in the precedence table in
 L<perlop>.
 
@@ -258,7 +258,7 @@ is given no processes to signal):
     }
 
 This is not C<-w> clean, however.  There is no C<-w> clean way to
-detect taintedness - take this as a hint that you should untaint
+detect taintedness--take this as a hint that you should untaint
 all possibly-tainted data.
 
 =head2 What's a closure?
@@ -274,7 +274,7 @@ around when the subroutine was defined (deep binding).
 Closures make sense in any programming language where you can have the
 return value of a function be itself a function, as you can in Perl.
 Note that some languages provide anonymous functions but are not
-capable of providing proper closures; the Python language, for
+capable of providing proper closures: the Python language, for
 example.  For more information on closures, check out any textbook on
 functional programming.  Scheme is a language that not only supports
 but encourages closures.
@@ -349,11 +349,14 @@ With the exception of regexes, you need to pass references to these
 objects.  See L<perlsub/"Pass by Reference"> for this particular
 question, and L<perlref> for information on references.
 
+See ``Passing Regexes'', below, for information on passing regular
+expressions.
+
 =over 4
 
 =item Passing Variables and Functions
 
-Regular variables and functions are quite easy: just pass in a
+Regular variables and functions are quite easy to pass: just pass in a
 reference to an existing or anonymous variable or function:
 
     func( \$some_scalar );
@@ -370,7 +373,7 @@ reference to an existing or anonymous variable or function:
 =item Passing Filehandles
 
 To pass filehandles to subroutines, use the C<*FH> or C<\*FH> notations.
-These are "typeglobs" - see L<perldata/"Typeglobs and Filehandles">
+These are "typeglobs"--see L<perldata/"Typeglobs and Filehandles">
 and especially L<perlsub/"Pass by Reference"> for more information.
 
 Here's an excerpt:
@@ -460,8 +463,8 @@ To pass an object method into a subroutine, you can do this:
         }
     }
 
-Or you can use a closure to bundle up the object and its method call
-and arguments:
+Or, you can use a closure to bundle up the object, its
+method call, and arguments:
 
     my $whatnot =  sub { $some_obj->obfuscate(@args) };
     func($whatnot);
@@ -495,8 +498,8 @@ Now prev_counter() and next_counter() share a private variable $counter
 that was initialized at compile time.
 
 To declare a file-private variable, you'll still use a my(), putting
-it at the outer scope level at the top of the file.  Assume this is in
-file Pax.pm:
+the declaration at the outer scope level at the top of the file.
+Assume this is in file Pax.pm:
 
     package Pax;
     my $started = scalar(localtime(time()));
@@ -516,14 +519,14 @@ See L<perlsub/"Persistent Private Variables"> for details.
 
 =head2 What's the difference between dynamic and lexical (static) scoping?  Between local() and my()?
 
-C<local($x)> saves away the old value of the global variable C<$x>,
-and assigns a new value for the duration of the subroutine, I<which is
+C<local($x)> saves away the old value of the global variable C<$x>
+and assigns a new value for the duration of the subroutine I<which is
 visible in other functions called from that subroutine>.  This is done
 at run-time, so is called dynamic scoping.  local() always affects global
 variables, also called package variables or dynamic variables.
 
 C<my($x)> creates a new variable that is only visible in the current
-subroutine.  This is done at compile-time, so is called lexical or
+subroutine.  This is done at compile-time, so it is called lexical or
 static scoping.  my() always affects private variables, also called
 lexical variables or (improperly) static(ly scoped) variables.
 
@@ -557,8 +560,8 @@ In summary, local() doesn't make what you think of as private, local
 variables.  It gives a global variable a temporary value.  my() is
 what you're looking for if you want private variables.
 
-See L<perlsub/"Private Variables via my()"> and L<perlsub/"Temporary
-Values via local()"> for excruciating details.
+See L<perlsub/"Private Variables via my()"> and 
+L<perlsub/"Temporary Values via local()"> for excruciating details.
 
 =head2 How can I access a dynamic variable while a similarly named lexical is in scope?
 
@@ -634,8 +637,8 @@ see L<perltoot/"Overridden Methods">.
 =head2 What's the difference between calling a function as &foo and foo()?
 
 When you call a function as C<&foo>, you allow that function access to
-your current @_ values, and you by-pass prototypes.  That means that
-the function doesn't get an empty @_, it gets yours!  While not
+your current @_ values, and you bypass prototypes.
+The function doesn't get an empty @_--it gets yours!  While not
 strictly speaking a bug (it's documented that way in L<perlsub>), it
 would be hard to consider this a feature in most cases.
 
@@ -709,7 +712,7 @@ Sometimes you should change the positions of the constant and the variable.
 For example, let's say you wanted to test which of many answers you were
 given, but in a case-insensitive way that also allows abbreviations.
 You can use the following technique if the strings all start with
-different characters, or if you want to arrange the matches so that
+different characters or if you want to arrange the matches so that
 one takes precedence over another, as C<"SEND"> has precedence over
 C<"STOP"> here:
 
@@ -767,15 +770,16 @@ C<__WARN__> like this:
 
 Some possible reasons: your inheritance is getting confused, you've
 misspelled the method name, or the object is of the wrong type.  Check
-out L<perltoot> for details on these.  You may also use C<print
-ref($object)> to find out the class C<$object> was blessed into.
+out L<perltoot> for details about any of the above cases.  You may
+also use C<print ref($object)> to find out the class C<$object> was
+blessed into.
 
 Another possible reason for problems is because you've used the
 indirect object syntax (eg, C<find Guru "Samy">) on a class name
 before Perl has seen that such a package exists.  It's wisest to make
 sure your packages are all defined before you start using them, which
 will be taken care of if you use the C<use> statement instead of
-C<require>.  If not, make sure to use arrow notation (eg,
+C<require>.  If not, make sure to use arrow notation (eg.,
 C<< Guru->find("Samy") >>) instead.  Object notation is explained in
 L<perlobj>.
 
@@ -789,7 +793,7 @@ out what the currently compiled package is:
 
     my $packname = __PACKAGE__;
 
-But if you're a method and you want to print an error message
+But, if you're a method and you want to print an error message
 that includes the kind of object you were called on (which is
 not necessarily the same as the one in which you were compiled):
 
@@ -861,19 +865,19 @@ of a variable.
 
 This works I<sometimes>, but it is a very bad idea for two reasons.
 
-The first reason is that they I<only work on global variables>.
-That means above that if $fred is a lexical variable created with my(),
-that the code won't work at all: you'll accidentally access the global
-and skip right over the private lexical altogether.  Global variables
-are bad because they can easily collide accidentally and in general make
-for non-scalable and confusing code.
+The first reason is that this technique I<only works on global
+variables>.  That means that if $fred is a lexical variable created
+with my() in the above example, the code wouldn't work at all: you'd
+accidentally access the global and skip right over the private lexical
+altogether.  Global variables are bad because they can easily collide
+accidentally and in general make for non-scalable and confusing code.
 
 Symbolic references are forbidden under the C<use strict> pragma.
 They are not true references and consequently are not reference counted
 or garbage collected.
 
 The other reason why using a variable to hold the name of another
-variable a bad idea is that the question often stems from a lack of
+variable is a bad idea is that the question often stems from a lack of
 understanding of Perl data structures, particularly hashes.  By using
 symbolic references, you are just using the package's symbol-table hash
 (like C<%main::>) instead of a user-defined hash.  The solution is to
@@ -894,7 +898,7 @@ own variables:
     $str = 'this has a $fred and $barney in it';
     $str =~ s/(\$\w+)/$1/eeg;            # need double eval
 
-Instead, it would be better to keep a hash around like %USER_VARS and have
+it would be better to keep a hash around like %USER_VARS and have
 variable references actually refer to entries in that hash:
 
     $str =~ s/\$(\w+)/$USER_VARS{$1}/g;   # no /e here at all
@@ -906,11 +910,11 @@ make it less confusing, like bracketed percent symbols, etc.
     $str = 'this has a %fred% and %barney% in it';
     $str =~ s/%(\w+)%/$USER_VARS{$1}/g;   # no /e here at all
 
-Another reason that folks sometimes think they want a variable to contain
-the name of a variable is because they don't know how to build proper
-data structures using hashes.  For example, let's say they wanted two
-hashes in their program: %fred and %barney, and to use another scalar
-variable to refer to those by name.
+Another reason that folks sometimes think they want a variable to
+contain the name of a variable is because they don't know how to build
+proper data structures using hashes.  For example, let's say they
+wanted two hashes in their program: %fred and %barney, and that they
+wanted to use another scalar variable to refer to those by name.
 
     $name = "fred";
     $$name{WIFE} = "wilma";     # set %fred
@@ -946,9 +950,9 @@ but the real code in the closure actually was compiled only once.
 
 So, sometimes you might want to use symbolic references to directly
 manipulate the symbol table.  This doesn't matter for formats, handles, and
-subroutines, because they are always global -- you can't use my() on them.
-But for scalars, arrays, and hashes -- and usually for subroutines --
-you probably want to use hard references only.
+subroutines, because they are always global--you can't use my() on them.
+For scalars, arrays, and hashes, though--and usually for subroutines--
+you probably only want to use hard references.
 
 =head1 AUTHOR AND COPYRIGHT
 
@@ -967,3 +971,4 @@ are hereby placed into the public domain.  You are permitted and
 encouraged to use this code in your own programs for fun
 or for profit as you see fit.  A simple comment in the code giving
 credit would be courteous but is not required.
+
index 0ac4620..d806ed6 100644 (file)
@@ -5,7 +5,7 @@ perlfaq8 - System Interaction ($Revision: 1.39 $, $Date: 1999/05/23 18:37:57 $)
 =head1 DESCRIPTION
 
 This section of the Perl FAQ covers questions involving operating
-system interaction.  This involves interprocess communication (IPC),
+system interaction.  Topics include interprocess communication (IPC),
 control over the user-interface (keyboard, screen and pointing
 devices), and most anything else not related to data manipulation.
 
@@ -95,10 +95,10 @@ It even includes limited support for Windows.
     $key = ReadKey(0);
     ReadMode('normal');
 
-However, that requires that you have a working C compiler and can use it
-to build and install a CPAN module.  Here's a solution using
-the standard POSIX module, which is already on your systems (assuming
-your system supports POSIX).
+However, using the code requires that you have a working C compiler
+and can use it to build and install a CPAN module.  Here's a solution
+using the standard POSIX module, which is already on your systems
+(assuming your system supports POSIX).
 
     use HotKey;
     $key = readkey();
@@ -214,10 +214,10 @@ illustrative:
 (This question has nothing to do with the web.  See a different
 FAQ for that.)
 
-There's an example of this in L<perlfunc/crypt>).  First, you put
-the terminal into "no echo" mode, then just read the password
-normally.  You may do this with an old-style ioctl() function, POSIX
-terminal control (see L<POSIX>, and Chapter 7 of the Camel), or a call
+There's an example of this in L<perlfunc/crypt>).  First, you put the
+terminal into "no echo" mode, then just read the password normally.
+You may do this with an old-style ioctl() function, POSIX terminal
+control (see L<POSIX> or its documentation the Camel Book), or a call
 to the B<stty> program, with varying degrees of portability.
 
 You can also do this for most systems using the Term::ReadKey module
@@ -232,16 +232,16 @@ from CPAN, which is easier to use and in theory more portable.
 
 This depends on which operating system your program is running on.  In
 the case of Unix, the serial ports will be accessible through files in
-/dev; on other systems, the devices names will doubtless differ.
+/dev; on other systems, device names will doubtless differ.
 Several problem areas common to all device interaction are the
-following
+following:
 
 =over 4
 
 =item lockfiles
 
 Your system may use lockfiles to control multiple access.  Make sure
-you follow the correct protocol.  Unpredictable behaviour can result
+you follow the correct protocol.  Unpredictable behavior can result
 from multiple processes reading from one device.
 
 =item open mode
@@ -264,7 +264,7 @@ give the numeric values you want directly, using octal ("\015"), hex
     print DEV "atv1\012";      # wrong, for some devices
     print DEV "atv1\015";      # right, for some devices
 
-Even though with normal text files, a "\n" will do the trick, there is
+Even though with normal text files a "\n" will do the trick, there is
 still no unified scheme for terminating a line that is portable
 between Unix, DOS/Win, and Macintosh, except to terminate I<ALL> line
 ends with "\015\012", and strip what you don't need from the output.
@@ -276,7 +276,8 @@ next.
 If you expect characters to get to your device when you print() them,
 you'll want to autoflush that filehandle.  You can use select()
 and the C<$|> variable to control autoflushing (see L<perlvar/$|>
-and L<perlfunc/select>):
+and L<perlfunc/select>, or L<perlfaq5>, ``How do I flush/unbuffer an
+output filehandle?  Why must I do this?''):
 
     $oldh = select(DEV);
     $| = 1;
@@ -331,7 +332,7 @@ go bump in the night, finally came up with this:
 You spend lots and lots of money on dedicated hardware, but this is
 bound to get you talked about.
 
-Seriously, you can't if they are Unix password files - the Unix
+Seriously, you can't if they are Unix password files--the Unix
 password system employs one-way encryption.  It's more like hashing than
 encryption.  The best you can check is whether something else hashes to
 the same string.  You can't turn a hash back into the original string.
@@ -388,7 +389,8 @@ Zombies are not an issue with C<system("prog &")>.
 You don't actually "trap" a control character.  Instead, that character
 generates a signal which is sent to your terminal's currently
 foregrounded process group, which you then trap in your process.
-Signals are documented in L<perlipc/"Signals"> and chapter 6 of the Camel.
+Signals are documented in L<perlipc/"Signals"> and the
+section on ``Signals'' in the Camel.
 
 Be warned that very few C libraries are re-entrant.  Therefore, if you
 attempt to print() in a handler that got invoked during another stdio
@@ -397,7 +399,7 @@ inconsistent state, and your program will dump core.  You can
 sometimes avoid this by using syswrite() instead of print().
 
 Unless you're exceedingly careful, the only safe things to do inside a
-signal handler are: set a variable and exit.  And in the first case,
+signal handler are (1) set a variable and (2) exit.  In the first case,
 you should only set a variable in such a way that malloc() is not
 called (eg, by setting a variable that already has a value).
 
@@ -413,15 +415,16 @@ However, because syscalls restart by default, you'll find that if
 you're in a "slow" call, such as <FH>, read(), connect(), or
 wait(), that the only way to terminate them is by "longjumping" out;
 that is, by raising an exception.  See the time-out handler for a
-blocking flock() in L<perlipc/"Signals"> or chapter 6 of the Camel.
+blocking flock() in L<perlipc/"Signals"> or the section on ``Signals''
+in the Camel book.
 
 =head2 How do I modify the shadow password file on a Unix system?
 
-If perl was installed correctly, and your shadow library was written
+If perl was installed correctly and your shadow library was written
 properly, the getpw*() functions described in L<perlfunc> should in
 theory provide (read-only) access to entries in the shadow password
 file.  To change the file, make a new shadow password file (the format
-varies from system to system - see L<passwd(5)> for specifics) and use
+varies from system to system--see L<passwd(5)> for specifics) and use
 pwd_mkdb(8) to install it (see L<pwd_mkdb(8)> for more details).
 
 =head2 How do I set the time and date?
@@ -494,15 +497,16 @@ managed to finish its output without filling up the disk:
        close(STDOUT) || die "stdout close failed: $!";
     } 
 
-The END block isn't called when untrapped signals kill the program, though, so if
-you use END blocks you should also use
+The END block isn't called when untrapped signals kill the program,
+though, so if you use END blocks you should also use
 
        use sigtrap qw(die normal-signals);
 
 Perl's exception-handling mechanism is its eval() operator.  You can
 use eval() as setjmp and die() as longjmp.  For details of this, see
 the section on signals, especially the time-out handler for a blocking
-flock() in L<perlipc/"Signals"> and chapter 6 of the Camel.
+flock() in L<perlipc/"Signals"> or the section on ``Signals'' in
+the Camel Book.
 
 If exception handling is all you're interested in, try the
 exceptions.pl library (part of the standard perl distribution).
@@ -510,7 +514,7 @@ exceptions.pl library (part of the standard perl distribution).
 If you want the atexit() syntax (and an rmexit() as well), try the
 AtExit module available from CPAN.
 
-=head2 Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
+=head2 Why doesn't my sockets program work under System V (Solaris)?  What does the error message "Protocol not supported" mean?
 
 Some Sys-V based systems, notably Solaris 2.X, redefined some of the
 standard socket constants.  Since these were constant across all
@@ -522,14 +526,14 @@ values are different.  Go figure.
 
 =head2 How can I call my system's unique C functions from Perl?
 
-In most cases, you write an external module to do it - see the answer
+In most cases, you write an external module to do it--see the answer
 to "Where can I learn about linking C with Perl? [h2xs, xsubpp]".
 However, if the function is a system call, and your system supports
 syscall(), you can use the syscall function (documented in
 L<perlfunc>).
 
 Remember to check the modules that came with your distribution, and
-CPAN as well - someone may already have written a module to do it.
+CPAN as well--someone may already have written a module to do it.
 
 =head2 Where do I get the include files to do ioctl() or syscall()?
 
@@ -567,9 +571,9 @@ scripts inherently insecure.  Perl gives you a number of options
 The IPC::Open2 module (part of the standard perl distribution) is an
 easy-to-use approach that internally uses pipe(), fork(), and exec() to do
 the job.  Make sure you read the deadlock warnings in its documentation,
-though (see L<IPC::Open2>).  See L<perlipc/"Bidirectional Communication
-with Another Process"> and L<perlipc/"Bidirectional Communication with
-Yourself">
+though (see L<IPC::Open2>).  See 
+L<perlipc/"Bidirectional Communication with Another Process"> and 
+L<perlipc/"Bidirectional Communication with Yourself">
 
 You may also use the IPC::Open3 module (part of the standard perl
 distribution), but be warned that it has a different order of
@@ -595,7 +599,7 @@ There are three basic ways of running external commands:
     open (PIPE, "cmd |");      # using open()
 
 With system(), both STDOUT and STDERR will go the same place as the
-script's versions of these, unless the command redirects them.
+script's STDOUT and STDERR, unless the system() command redirects them.
 Backticks and open() read B<only> the STDOUT of your command.
 
 With any of these, you can change file descriptors before the call:
@@ -688,7 +692,7 @@ In some cases, even this won't work.  If the second argument to a
 piped open() contains shell metacharacters, perl fork()s, then exec()s
 a shell to decode the metacharacters and eventually run the desired
 program.  Now when you call wait(), you only learn whether or not the
-I<shell> could be successfully started.  Best to avoid shell
+I<shell> could be successfully started...it's best to avoid shell
 metacharacters.
 
 On systems that follow the spawn() paradigm, open() I<might> do what
@@ -715,17 +719,17 @@ Consider this line:
     `cat /etc/termcap`;
 
 You haven't assigned the output anywhere, so it just wastes memory
-(for a little while).  Plus you forgot to check C<$?> to see whether
-the program even ran correctly.  Even if you wrote
+(for a little while).  You forgot to check C<$?> to see whether
+the program even ran correctly, too.  Even if you wrote
 
     print `cat /etc/termcap`;
 
-In most cases, this could and probably should be written as
+this code could and probably should be written as
 
     system("cat /etc/termcap") == 0
        or die "cat program failed!";
 
-Which will get the output quickly (as it is generated, instead of only
+which will get the output quickly (as it is generated, instead of only
 at the end) and also check the return value.
 
 system() also provides direct control over whether shell wildcard
@@ -762,7 +766,7 @@ and fix it for you.
 
 =head2 Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
 
-Because some stdio's set error and eof flags that need clearing.  The
+Some stdio's set error and eof flags that need clearing.  The
 POSIX module defines clearerr() that you can use.  That is the
 technically correct way to do it.  Here are some less reliable
 workarounds:
@@ -855,9 +859,9 @@ state there, as in:
 
 =item Unix
 
-In the strictest sense, it can't be done -- the script executes as a
+In the strictest sense, it can't be done--the script executes as a
 different process from the shell it was started from.  Changes to a
-process are not reflected in its parent, only in its own children
+process are not reflected in its parent--only in any children
 created after the change.  There is shell magic that may allow you to
 fake it by eval()ing the script's output in your shell; check out the
 comp.unix.questions FAQ for details.  
@@ -867,7 +871,7 @@ comp.unix.questions FAQ for details.
 =head2 How do I close a process's filehandle without waiting for it to complete?
 
 Assuming your system supports such things, just send an appropriate signal
-to the process (see L<perlfunc/"kill">.  It's common to first send a TERM
+to the process (see L<perlfunc/"kill">).  It's common to first send a TERM
 signal, wait a little bit, and then send a KILL signal to finish it off.
 
 =head2 How do I fork a daemon process?
@@ -930,9 +934,9 @@ the current process group of your controlling terminal as follows:
 =head2 How do I timeout a slow event?
 
 Use the alarm() function, probably in conjunction with a signal
-handler, as documented in L<perlipc/"Signals"> and chapter 6 of the
-Camel.  You may instead use the more flexible Sys::AlarmCall module
-available from CPAN.
+handler, as documented in L<perlipc/"Signals"> and the section on
+``Signals'' in the Camel.  You may instead use the more flexible
+Sys::AlarmCall module available from CPAN.
 
 =head2 How do I set CPU limits?
 
@@ -971,9 +975,6 @@ sysopen():
     sysopen(FH, "/tmp/somefile", O_WRONLY|O_NDELAY|O_CREAT, 0644)
         or die "can't open /tmp/somefile: $!":
 
-
-
-
 =head2 How do I install a module from CPAN?
 
 The easiest way is to have a module also named CPAN do it for you.
@@ -1010,26 +1011,27 @@ just need to replace step 3 (B<make>) with B<make perl> and you will
 get a new F<perl> binary with your extension linked in.
 
 See L<ExtUtils::MakeMaker> for more details on building extensions.
-See also the next question.
+See also the next question, ``What's the difference between require
+and use?''.
 
 =head2 What's the difference between require and use?
 
 Perl offers several different ways to include code from one file into
 another.  Here are the deltas between the various inclusion constructs:
 
-    1)  do $file is like eval `cat $file`, except the former:
+    1)  do $file is like eval `cat $file`, except the former
        1.1: searches @INC and updates %INC.
        1.2: bequeaths an *unrelated* lexical scope on the eval'ed code.
 
-    2)  require $file is like do $file, except the former:
+    2)  require $file is like do $file, except the former
        2.1: checks for redundant loading, skipping already loaded files.
        2.2: raises an exception on failure to find, compile, or execute $file.
 
-    3)  require Module is like require "Module.pm", except the former:
+    3)  require Module is like require "Module.pm", except the former
        3.1: translates each "::" into your system's directory separator.
        3.2: primes the parser to disambiguate class Module as an indirect object.
 
-    4)  use Module is like require Module, except the former:
+    4)  use Module is like require Module, except the former
        4.1: loads the module at compile time, not run-time.
        4.2: imports symbols and semantics from that package to the current one.
 
@@ -1047,7 +1049,7 @@ scripts that use the modules/libraries (see L<perlrun>) or say
 
     use lib '/u/mydir/perl';
 
-This is almost the same as:
+This is almost the same as
 
     BEGIN {
        unshift(@INC, '/u/mydir/perl');
index d1bd593..ddc577b 100644 (file)
@@ -7,7 +7,7 @@ perlfaq9 - Networking ($Revision: 1.26 $, $Date: 1999/05/23 16:08:30 $)
 This section deals with questions related to networking, the internet,
 and a few on the web.
 
-=head2 My CGI script runs from the command line but not the browser.   (500 Server Error)
+=head2 My CGI script runs from the command line but not the browser.  (500 Server Error)
 
 If you can demonstrate that you've read the following FAQs and that
 your problem isn't something simple that can be easily answered, you'll
@@ -84,8 +84,8 @@ attempts to do a little simple formatting of the resulting plain text.
 Many folks attempt a simple-minded regular expression approach, like
 C<< s/<.*?>//g >>, but that fails in many cases because the tags
 may continue over line breaks, they may contain quoted angle-brackets,
-or HTML comment may be present.  Plus folks forget to convert
-entitieslike C<&lt;> for example.
+or HTML comment may be present.  Plus, folks forget to convert
+entities--like C<&lt;> for example.
 
 Here's one "simple-minded" approach, that works for most files:
 
@@ -248,12 +248,12 @@ in the header.
 
     EOF
 
-To be correct to the spec, each of those virtual newlines should really be
-physical C<"\015\012"> sequences by the time you hit the client browser.
-Except for NPH scripts, though, that local newline should get translated
-by your server into standard form, so you shouldn't have a problem
-here, even if you are stuck on MacOS.  Everybody else probably won't
-even notice.
+To be correct to the spec, each of those virtual newlines should
+really be physical C<"\015\012"> sequences by the time your message is
+received by the client browser.  Except for NPH scripts, though, that
+local newline should get translated by your server into standard form,
+so you shouldn't have a problem here, even if you are stuck on MacOS.
+Everybody else probably won't even notice.
 
 =head2 How do I put a password on my web pages?
 
@@ -276,9 +276,9 @@ DBI compatible driver.  HTTPD::UserAdmin supports files used by the
 =head2 How do I make sure users can't enter values into a form that cause my CGI script to do bad things?
 
 Read the CGI security FAQ, at
-http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html, and the
+http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html , and the
 Perl/CGI FAQ at
-http://www.perl.com/CPAN/doc/FAQs/cgi/perl-cgi-faq.html.
+http://www.perl.com/CPAN/doc/FAQs/cgi/perl-cgi-faq.html .
 
 In brief: use tainting (see L<perlsec>), which makes sure that data
 from outside your script (eg, CGI parameters) are never used in
@@ -289,7 +289,7 @@ command and arguments as a list, which prevents shell globbing.
 =head2 How do I parse a mail header?
 
 For a quick-and-dirty solution, try this solution derived
-from page 222 of the 2nd edition of "Programming Perl":
+from L<perlfunc/split>:
 
     $/ = '';
     $header = <MSG>;
@@ -397,7 +397,7 @@ format after minor transliterations:
 
 =head2 How do I return the user's mail address?
 
-On systems that support getpwuid, the $< variable and the
+On systems that support getpwuid, the $< variable, and the
 Sys::Hostname module (which is part of the standard perl distribution),
 you can probably try using something like this:
 
@@ -465,7 +465,7 @@ include queueing, MX records, and security.
 
 While you could use the Mail::Folder module from CPAN (part of the
 MailFolder package) or the Mail::Internet module from CPAN (also part
-of the MailTools package), often a module is overkill, though.  Here's a
+of the MailTools package), often a module is overkill.  Here's a
 mail sorter.
 
     #!/usr/bin/perl
@@ -520,7 +520,7 @@ systems.)
 =head2 How do I fetch a news article or the active newsgroups?
 
 Use the Net::NNTP or News::NNTPClient modules, both available from CPAN.
-This can make tasks like fetching the newsgroup list as simple as:
+This can make tasks like fetching the newsgroup list as simple as
 
     perl -MNews::NNTPClient
       -e 'print News::NNTPClient->new->list("newsgroups")'
@@ -532,7 +532,7 @@ available from CPAN) is more complex but can put as well as fetch.
 
 =head2 How can I do RPC in Perl?
 
-A DCE::RPC module is being developed (but is not yet available), and
+A DCE::RPC module is being developed (but is not yet available) and
 will be released as part of the DCE-Perl package (available from
 CPAN).  The rpcgen suite, available from CPAN/authors/id/JAKE/, is
 an RPC stub generator and includes an RPC::ONC module.
index c3c8315..4327809 100644 (file)
@@ -2,7 +2,6 @@
 
 perlfilter - Source Filters
 
-
 =head1 DESCRIPTION
 
 This article is about a little-known feature of Perl called
index d69c7ee..2d5b61c 100644 (file)
@@ -91,7 +91,7 @@ functions, like some keywords and named operators)
 arranged by category.  Some functions appear in more
 than one place.
 
-=over
+=over 4
 
 =item Functions for SCALARs or strings
 
@@ -2348,8 +2348,8 @@ it succeeded, false otherwise.  See the example in L<perlipc/"Sockets: Client/Se
 =item local EXPR
 
 You really probably want to be using C<my> instead, because C<local> isn't
-what most people think of as "local".  See L<perlsub/"Private Variables
-via my()"> for details.
+what most people think of as "local".  See 
+L<perlsub/"Private Variables via my()"> for details.
 
 A local modifies the listed variables to be local to the enclosing
 block, file, or eval.  If more than one value is listed, the list must
@@ -4267,9 +4267,9 @@ Examples:
 If you're using strict, you I<must not> declare $a
 and $b as lexicals.  They are package globals.  That means
 if you're in the C<main> package and type
-  
+
     @articles = sort {$b <=> $a} @files;
-  
+
 then C<$a> and C<$b> are C<$main::a> and C<$main::b> (or C<$::a> and C<$::b>),
 but if you're in the C<FooPack> package, it's the same as typing
 
index f525a07..b16af6c 100644 (file)
@@ -1088,7 +1088,7 @@ an C<ENTER>/C<LEAVE> pair.
 
 Inside such a I<pseudo-block> the following service is available:
 
-=over
+=over 4
 
 =item C<SAVEINT(int i)>
 
@@ -1161,7 +1161,7 @@ provide pointers to the modifiable data explicitly (either C pointers,
 or Perlish C<GV *>s).  Where the above macros take C<int>, a similar 
 function takes C<int *>.
 
-=over
+=over 4
 
 =item C<SV* save_scalar(GV *gv)>
 
index 3abc1f7..21d8850 100644 (file)
@@ -194,6 +194,8 @@ around.  It refers to the standard distribution.  ``Hacking on the
 core'' means you're changing the C source code to the Perl
 interpreter.  ``A core module'' is one that ships with Perl.
 
+=head2 Keeping in sync
+
 The source code to the Perl interpreter, in its different versions, is
 kept in a repository managed by a revision control system (which is
 currently the Perforce program, see http://perforce.com/).  The
@@ -206,20 +208,256 @@ public release are available at this location:
 
     ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/
 
-Selective parts are also visible via the rsync protocol.  To get all
-the individual changes to the mainline since the last development
-release, use the following command:
-
-    rsync -avz rsync://ftp.linux.activestate.com/perl-diffs perl-diffs
-
-Use this to get the latest source tree in full:
-
-    rsync -avz rsync://ftp.linux.activestate.com/perl-current perl-current
+If you are a member of the perl5-porters mailing list, it is a good
+thing to keep in touch with the most recent changes. If not only to
+verify if what you would have posted as a bug report isn't already
+solved in the most recent available perl development branch, also
+known as perl-current, bleading edge perl, bleedperl or bleadperl.
 
 Needless to say, the source code in perl-current is usually in a perpetual
 state of evolution.  You should expect it to be very buggy.  Do B<not> use
 it for any purpose other than testing and development.
 
+Keeping in sync with the most recent branch can be done in several ways,
+but the most convenient and reliable way is using B<rsync>, available at
+ftp://rsync.samba.org/pub/rsync/ .  (You can also get the most recent
+branch by FTP.)
+
+If you choose to keep in sync using rsync, there are two approaches
+to doing so:
+
+=over 4
+
+=item rsync'ing the source tree
+
+Presuming you are in the directory where your perl source resides
+and you have rsync installed and available, you can `upgrade' to
+the bleadperl using:
+
+ # rsync -avz rsync://ftp.linux.activestate.com/perl-current/ .
+
+This takes care of updating every single item in the source tree to
+the latest applied patch level, creating files that are new (to your
+distribution) and setting date/time stamps of existing files to
+reflect the bleadperl status.
+
+You can than check what patch was the latest that was applied by
+looking in the file B<.patch>, which will show the number of the
+latest patch.
+
+If you have more than one machine to keep in sync, and not all of
+them have access to the WAN (so you are not able to rsync all the
+source trees to the real source), there are some ways to get around
+this problem.
+
+=over 4
+
+=item Using rsync over the LAN
+
+Set up a local rsync server which makes the rsynced source tree
+available to the LAN and sync the other machines against this
+directory.
+
+From http://rsync.samba.org/README.html:
+
+   "Rsync uses rsh or ssh for communication. It does not need to be
+    setuid and requires no special privileges for installation.  It
+    does not require a inetd entry or a deamon.  You must, however,
+    have a working rsh or ssh system.  Using ssh is recommended for
+    its security features."
+
+=item Using pushing over the NFS
+
+Having the other systems mounted over the NFS, you can take an
+active pushing approach by checking the just updated tree against
+the other not-yet synced trees. An example would be
+
+  #!/usr/bin/perl -w
+
+  use strict;
+  use File::Copy;
+
+  my %MF = map {
+      m/(\S+)/;
+      $1 => [ (stat $1)[2, 7, 9] ];    # mode, size, mtime
+      } `cat MANIFEST`;
+
+  my %remote = map { $_ => "/$_/pro/3gl/CPAN/perl-5.7.1" } qw(host1 host2);
+
+  foreach my $host (keys %remote) {
+      unless (-d $remote{$host}) {
+         print STDERR "Cannot Xsync for host $host\n";
+         next;
+         }
+      foreach my $file (keys %MF) {
+         my $rfile = "$remote{$host}/$file";
+         my ($mode, $size, $mtime) = (stat $rfile)[2, 7, 9];
+         defined $size or ($mode, $size, $mtime) = (0, 0, 0);
+         $size == $MF{$file}[1] && $mtime == $MF{$file}[2] and next;
+         printf "%4s %-34s %8d %9d  %8d %9d\n",
+             $host, $file, $MF{$file}[1], $MF{$file}[2], $size, $mtime;
+         unlink $rfile;
+         copy ($file, $rfile);
+         utime time, $MF{$file}[2], $rfile;
+         chmod $MF{$file}[0], $rfile;
+         }
+      }
+
+though this is not perfect. It could be improved with checking
+file checksums before updating. Not all NFS systems support
+reliable utime support (when used over the NFS).
+
+=back
+
+=item rsync'ing the patches
+
+The source tree is maintained by the pumpking who applies patches to
+the files in the tree. These patches are either created by the
+pumpking himself using C<diff -c> after updating the file manually or
+by applying patches sent in by posters on the perl5-porters list.
+These patches are also saved and rsync'able, so you can apply them
+yourself to the source files.
+
+Presuming you are in a directory where your patches reside, you can
+get them in sync with
+
+ # rsync -avz rsync://ftp.linux.activestate.com/perl-current-diffs/ .
+
+This makes sure the latest available patch is downloaded to your
+patch directory.
+
+It's then up to you to apply these patches, using something like
+
+ # last=`ls -rt1 *.gz | tail -1`
+ # rsync -avz rsync://ftp.linux.activestate.com/perl-current-diffs/ .
+ # find . -name '*.gz' -newer $last -exec gzcat {} \; >blead.patch
+ # cd ../perl-current
+ # patch -p1 -N <../perl-current-diffs/blead.patch
+
+or, since this is only a hint towards how it works, use CPAN-patchaperl
+from Andreas König to have better control over the patching process.
+
+=back
+
+=head3 Why rsync the source tree
+
+=over 4
+
+=item It's easier
+
+Since you don't have to apply the patches yourself, you are sure all
+files in the source tree are in the right state.
+
+=item It's more recent
+
+According to Gurusamy Sarathy:
+
+   "... The rsync mirror is automatic and syncs with the repository
+    every five minutes.
+
+   "Updating the patch  area  still  requires  manual  intervention
+    (with all the goofiness that implies,  which you've noted)  and
+    is typically on a daily cycle.   Making this process  automatic
+    is on my tuit list, but don't ask me when."
+
+=item It's more reliable
+
+Well, since the patches are updated by hand, I don't have to say any
+more ... (see Sarathy's remark).
+
+=back
+
+=head3 Why rsync the patches
+
+=over 4
+
+=item It's easier
+
+If you have more than one machine that you want to keep in track with
+bleadperl, it's easier to rsync the patches only once and then apply
+them to all the source trees on the different machines.
+
+In case you try to keep in pace on 5 different machines, for which
+only one of them has access to the WAN, rsync'ing all the source
+trees should than be done 5 times over the NFS. Having
+rsync'ed the patches only once, I can apply them to all the source
+trees automatically. Need you say more ;-)
+
+=item It's a good reference
+
+If you do not only like to have the most recent development branch,
+but also like to B<fix> bugs, or extend features, you want to dive
+into the sources. If you are a seasoned perl core diver, you don't
+need no manuals, tips, roadmaps, perlguts.pod or other aids to find
+your way around. But if you are a starter, the patches may help you
+in finding where you should start and how to change the bits that
+bug you.
+
+The file B<Changes> is updated on occasions the pumpking sees as his
+own little sync points. On those occasions, he releases a tar-ball of
+the current source tree (i.e. perl@7582.tar.gz), which will be an
+excellent point to start with when choosing to use the 'rsync the
+patches' scheme. Starting with perl@7582, which means a set of source
+files on which the latest applied patch is number 7582, you apply all
+succeeding patches available from than on (7583, 7584, ...).
+
+You can use the patches later as a kind of search archive.
+
+=over 4
+
+=item Finding a start point
+
+If you want to fix/change the behaviour of function/feature Foo, just
+scan the patches for patches that mention Foo either in the subject,
+the comments, or the body of the fix. A good chance the patch shows
+you the files that are affected by that patch which are very likely
+to be the starting point of your journey into the guts of perl.
+
+=item Finding how to fix a bug
+
+If you've found I<where> the function/feature Foo misbehaves, but you
+don't know how to fix it (but you do know the change you want to
+make), you can, again, peruse the patches for similar changes and
+look how others apply the fix.
+
+=item Finding the source of misbehaviour
+
+When you keep in sync with bleadperl, the pumpking would love to
+I<see> that the community efforts realy work. So after each of his
+sync points, you are to 'make test' to check if everything is still
+in working order. If it is, you do 'make ok', which will send an OK
+report to perlbug@perl.org. (If you do not have access to a mailer
+from the system you just finished successfully 'make test', you can
+do 'make okfile', which creates the file C<perl.ok>, which you can
+than take to your favourite mailer and mail yourself).
+
+But of course, as always, things will not allways lead to a success
+path, and one or more test do not pass the 'make test'. Before
+sending in a bug report (using 'make nok' or 'make nokfile'), check
+the mailing list if someone else has reported the bug already and if
+so, confirm it by replying to that message. If not, you might want to
+trace the source of that misbehaviour B<before> sending in the bug,
+which will help all the other porters in finding the solution.
+
+Here the saved patches come in very handy. You can check the list of
+patches to see which patch changed what file and what change caused
+the misbehaviour. If you note that in the bug report, it saves the
+one trying to solve it, looking for that point.
+
+=back
+
+If searching the patches is too bothersome, you might consider using
+perl's bugtron to find more information about discussions and
+ramblings on posted bugs.
+
+=back
+
+If you want to get the best of both worlds, rsync both the source
+tree for convenience, reliability and ease and rsync the patches
+for reference.
+
+=head2 Submitting patches
+
 Always submit patches to I<perl5-porters@perl.org>.  This lets other
 porters review your patch, which catches a surprising number of errors
 in patches.  Either use the diff program (available in source code
@@ -827,7 +1065,7 @@ the tied C<push> is implemented; see C<av_push> in F<av.c>:
      7 call_method("PUSH", G_SCALAR|G_DISCARD);
      8 LEAVE;
      9 POPSTACK;
-       
+
 The lines which concern the mark stack are the first, fifth and last
 lines: they save away, restore and remove the current position of the
 argument stack. 
@@ -950,7 +1188,7 @@ useful options are probably
 
 Some of the functionality of the debugging code can be achieved using XS
 modules.
-    
+
     -Dr => use re 'debug'
     -Dx => use O 'Debug'
 
@@ -1012,7 +1250,7 @@ Run until the next breakpoint.
 
 Run until the end of the current function, then stop again.
 
-=item
+=item 'enter'
 
 Just pressing Enter will do the most recent operation again - it's a
 blessing when stepping through miles of source code.
@@ -1256,7 +1494,7 @@ this text in the description of C<pack>:
 All done. Now let's create the patch. F<Porting/patching.pod> tells us
 that if we're making major changes, we should copy the entire directory
 to somewhere safe before we begin fiddling, and then do
-    
+
     diff -ruN old new > patch
 
 However, we know which files we've changed, and we can simply do this:
@@ -1454,6 +1692,12 @@ working on and the changes they're making.
 
 =item *
 
+Do read the README associated with your operating system, e.g. README.aix
+on the IBM AIX OS. Don't hesitate to supply patches to that README if
+you find anything missing or changed over a new OS release.
+
+=item *
+
 Find an area of Perl that seems interesting to you, and see if you can
 work out how it works. Scan through the source, and step over it in the
 debugger. Play, poke, investigate, fiddle! You'll probably get to
index 2aa928c..f5a9602 100644 (file)
@@ -1,5 +1,3 @@
-=pod
-
 =head1 NAME
 
 perlhist - the Perl history records
index 94b6bde..758f303 100644 (file)
@@ -952,7 +952,7 @@ looks like this:
 
 Here are what those parameters to the C<new> constructor mean:
 
-=over
+=over 4
 
 =item C<Proto>
 
@@ -1147,7 +1147,7 @@ does nothing but listen on a particular port for incoming connections.
 It does this by calling the C<< IO::Socket::INET->new() >> method with
 slightly different arguments than the client did.
 
-=over
+=over 4
 
 =item Proto
 
index 3dd3ba9..b98e333 100644 (file)
@@ -468,7 +468,7 @@ Consider this example:
         bless [], $class ;
     }
 
-   
+
     1 ;
 
 The code below makes use of both modules, but it only enables warnings from 
index 3d9a58a..fb93792 100644 (file)
@@ -124,8 +124,8 @@ B<The POSIX date formatting function> (strftime()) uses C<LC_TIME>.
 
 =back
 
-C<LC_COLLATE>, C<LC_CTYPE>, and so on, are discussed further in L<LOCALE
-CATEGORIES>.
+C<LC_COLLATE>, C<LC_CTYPE>, and so on, are discussed further in 
+L<LOCALE CATEGORIES>.
 
 The default behavior is restored with the S<C<no locale>> pragma, or
 upon reaching the end of block enclosing C<use locale>.
@@ -348,8 +348,8 @@ commands.  You may see things like "en_US.ISO8859-1", but that isn't
 the same.  In this case, try running under a locale
 that you can list and which somehow matches what you tried.  The
 rules for matching locale names are a bit vague because
-standardization is weak in this area.  See again the L<Finding
-locales> about general rules.
+standardization is weak in this area.  See again the 
+L<Finding locales> about general rules.
 
 =head2 Fixing system locale configuration
 
@@ -580,11 +580,12 @@ The C standard defines the C<LC_MONETARY> category, but no function
 that is affected by its contents.  (Those with experience of standards
 committees will recognize that the working group decided to punt on the
 issue.)  Consequently, Perl takes no notice of it.  If you really want
-to use C<LC_MONETARY>, you can query its contents--see L<The localeconv
-function>--and use the information that it returns in your application's
-own formatting of currency amounts.  However, you may well find that
-the information, voluminous and complex though it may be, still does not
-quite meet your requirements: currency formatting is a hard nut to crack.
+to use C<LC_MONETARY>, you can query its contents--see 
+L<The localeconv function>--and use the information that it returns in your 
+application's own formatting of currency amounts.  However, you may well 
+find that the information, voluminous and complex though it may be, still 
+does not quite meet your requirements: currency formatting is a hard nut 
+to crack.
 
 =head2 LC_TIME
 
index f37279d..c5afea2 100644 (file)
@@ -98,10 +98,6 @@ Compute arithmetic in integer instead of double
 
 Request less of something from the compiler
 
-=item lib
-
-Manipulate @INC at compile time
-
 =item locale
 
 Use and avoid POSIX locales for built-in operations
@@ -146,6 +142,10 @@ Predeclare global variable names (obsolete)
 
 Control optional warnings
 
+=item warnings::register
+
+Warnings import function
+
 =back
 
 =head2 Standard Modules
@@ -220,6 +220,10 @@ Show lexical variables used in functions or files
 
 Helper module for CC backend
 
+=item B::Stash
+
+Show what stashes are loaded
+
 =item B::Terse
 
 Walk Perl syntax tree, printing terse info about ops
@@ -316,6 +320,10 @@ Supply object methods for directory handles
 
 Provides screen dump of Perl data.
 
+=item Encode
+
+Character encodings
+
 =item English
 
 Use nice English (or awk) names for ugly punctuation variables
@@ -572,6 +580,10 @@ Module to convert pod files to HTML
 
 Objects representing POD input paragraphs, commands, etc.
 
+=item Pod::LaTeX
+
+Convert Pod data to formatted Latex
+
 =item Pod::Man
 
 Convert POD data to formatted *roff input
@@ -636,6 +648,10 @@ Run shell commands transparently within perl
 
 Load the C socket.h defines and structure manipulators 
 
+=item Storable
+
+Persistency for perl data structures
+
 =item Symbol
 
 Manipulate Perl symbols and their names
@@ -775,7 +791,7 @@ Most importantly, CPAN includes around a thousand unbundled modules,
 some of which require a C compiler to build.  Major categories of
 modules are:
 
-=over
+=over 4
 
 =item *
 Language Extensions and Documentation Tools
@@ -845,7 +861,7 @@ Miscellaneous Modules
 Registered CPAN sites as of this writing include the following.
 You should try to choose one close to you:
 
-=over
+=over 4
 
 =item Africa
 
index d179d8c..44d921c 100644 (file)
@@ -91,7 +91,7 @@ Six such conversions are possible:
 
 These conversions are governed by the following general rules:
 
-=over
+=over 4
 
 =item *
 
@@ -141,7 +141,7 @@ argument as in modular arithmetic, e.g., C<mod 2**32> on a 32-bit
 architecture.  C<sprintf "%u", -1> therefore provides the same result as
 C<sprintf "%u", ~0>.
 
-=over
+=over 4
 
 =item Arithmetic operators except, C<no integer>
 
index e97a25b..70fef45 100644 (file)
@@ -798,7 +798,7 @@ the trailing delimiter.  This avoids expensive run-time recompilations,
 and is useful when the value you are interpolating won't change over
 the life of the script.  However, mentioning C</o> constitutes a promise
 that you won't change the variables in the pattern.  If you change them,
-Perl won't even notice.  See also L<"qr//">.
+Perl won't even notice.  See also L<"qr/STRING/imosx">.
 
 If the PATTERN evaluates to the empty string, the last
 I<successfully> matched regular expression is used instead.
@@ -951,7 +951,7 @@ A double-quoted, interpolated string.
 
 =item qr/STRING/imosx
 
-This operators quotes--and compiles--its I<STRING> as a regular
+This operator quotes (and possibly compiles) its I<STRING> as a regular
 expression.  I<STRING> is interpolated the same way as I<PATTERN>
 in C<m/PATTERN/>.  If "'" is used as the delimiter, no interpolation
 is done.  Returns a Perl value which may be used instead of the
@@ -1338,7 +1338,7 @@ their results are the same, we consider them individually.  For different
 quoting constructs, Perl performs different numbers of passes, from
 one to five, but these passes are always performed in the same order.
 
-=over
+=over 4
 
 =item Finding the end
 
@@ -1392,7 +1392,7 @@ used in parsing.
 The next step is interpolation in the text obtained, which is now
 delimiter-independent.  There are four different cases.
 
-=over
+=over 4
 
 =item C<<<'EOF'>, C<m''>, C<s'''>, C<tr///>, C<y///>
 
@@ -1842,8 +1842,8 @@ integer>, if you take the C<sqrt(2)>, you'll still get C<1.4142135623731>
 or so.
 
 Used on numbers, the bitwise operators ("&", "|", "^", "~", "<<",
-and ">>") always produce integral results.  (But see also L<Bitwise
-String Operators>.)  However, C<use integer> still has meaning for
+and ">>") always produce integral results.  (But see also 
+L<Bitwise String Operators>.)  However, C<use integer> still has meaning for
 them.  By default, their results are interpreted as unsigned integers, but
 if C<use integer> is in effect, their results are interpreted
 as signed integers.  For example, C<~0> usually evaluates to a large
index 5d2d48e..b4003f4 100644 (file)
@@ -73,8 +73,8 @@ from a different file, and forget to trim it before opening:
 This is not a bug, but a feature.  Because C<open> mimics the shell in
 its style of using redirection arrows to specify how to open the file, it
 also does so with respect to extra white space around the filename itself
-as well.  For accessing files with naughty names, see L<"Dispelling
-the Dweomer">.
+as well.  For accessing files with naughty names, see 
+L<"Dispelling the Dweomer">.
 
 =head2 Pipe Opens
 
@@ -107,13 +107,13 @@ In most systems, such an C<open> will not return an error. That's
 because in the traditional C<fork>/C<exec> model, running the other
 program happens only in the forked child process, which means that
 the failed C<exec> can't be reflected in the return value of C<open>.
-Only a failed C<fork> shows up there.  See L<perlfaq8/"Why doesn't open()
-return an error when a pipe open fails?"> to see how to cope with this.
-There's also an explanation in L<perlipc>.
+Only a failed C<fork> shows up there.  See 
+L<perlfaq8/"Why doesn't open() return an error when a pipe open fails?"> 
+to see how to cope with this.  There's also an explanation in L<perlipc>.
 
 If you would like to open a bidirectional pipe, the IPC::Open2
-library will handle this for you.  Check out L<perlipc/"Bidirectional
-Communication with Another Process">
+library will handle this for you.  Check out 
+L<perlipc/"Bidirectional Communication with Another Process">
 
 =head2 The Minus File
 
@@ -126,8 +126,8 @@ access the standard output.
 If minus can be used as the default input or default output, what happens
 if you open a pipe into or out of minus?  What's the default command it
 would run?  The same script as you're currently running!  This is actually
-a stealth C<fork> hidden inside an C<open> call.  See L<perlipc/"Safe Pipe
-Opens"> for details.
+a stealth C<fork> hidden inside an C<open> call.  See 
+L<perlipc/"Safe Pipe Opens"> for details.
 
 =head2 Mixing Reads and Writes
 
@@ -684,9 +684,9 @@ also some high-level modules on CPAN that can help you with these games.
 Check out Term::ReadKey and Term::ReadLine.
 
 What else can you open?  To open a connection using sockets, you won't use
-one of Perl's two open functions.  See L<perlipc/"Sockets: Client/Server
-Communication"> for that.  Here's an example.  Once you have it,
-you can use FH as a bidirectional filehandle.
+one of Perl's two open functions.  See 
+L<perlipc/"Sockets: Client/Server Communication"> for that.  Here's an 
+example.  Once you have it, you can use FH as a bidirectional filehandle.
 
     use IO::Socket;
     local *FH = IO::Socket::INET->new("www.perl.com:80");
index d1887bf..1078e58 100644 (file)
@@ -334,7 +334,10 @@ operating systems put mandatory locks on such files.
 
 Don't count on a specific environment variable existing in C<%ENV>.
 Don't count on C<%ENV> entries being case-sensitive, or even
-case-preserving.
+case-preserving.  Don't try to clear %ENV by saying C<%ENV = ();>, or,
+if you really have to, make it conditional on C<$^O ne 'VMS'> since in
+VMS the C<%ENV> table is much more than a per-process key-value string
+table.
 
 Don't count on signals or C<%SIG> for anything.
 
@@ -683,7 +686,7 @@ The ActiveState Pages, http://www.activestate.com/
 =item *
 
 The Cygwin environment for Win32; F<README.cygwin> (installed 
-as L<perlcygwin>), http://sources.redhat.com/cygwin/
+as L<perlcygwin>), http://www.cygwin.com/
 
 =item *
 
@@ -1210,7 +1213,7 @@ A free perl5-based PERL.NLM for Novell Netware is available in
 precompiled binary and source code form from http://www.novell.com/
 as well as from CPAN.
 
-=item 
+=item  *
 
 Plan 9, F<README.plan9>
 
index 380bc5f..8a85241 100644 (file)
@@ -1129,7 +1129,7 @@ one match at a given position is possible.  This section describes the
 notion of better/worse for combining operators.  In the description
 below C<S> and C<T> are regular subexpressions.
 
-=over
+=over 4
 
 =item C<ST>
 
index 6b50b92..3870c2e 100644 (file)
@@ -38,9 +38,22 @@ msgrcv(), the password, gcos and shell fields returned by the
 getpwxxx() calls), and all file input are marked as "tainted".
 Tainted data may not be used directly or indirectly in any command
 that invokes a sub-shell, nor in any command that modifies files,
-directories, or processes. (B<Important exception>: If you pass a list
-of arguments to either C<system> or C<exec>, the elements of that list
-are B<NOT> checked for taintedness.) Any variable set to a value
+directories, or processes, B<with the following exceptions>:
+
+=over 4
+
+=item *
+
+If you pass a list of arguments to either C<system> or C<exec>,
+the elements of that list are B<not> checked for taintedness.
+
+=item *
+
+Arguments to C<print> and C<syswrite> are B<not> checked for taintedness.
+
+=back
+
+Any variable set to a value
 derived from tainted data will itself be tainted, even if it is
 logically impossible for the tainted data to alter the variable.
 Because taintedness is associated with each scalar value, some
@@ -217,25 +230,31 @@ not called with a string that the shell could expand.  This is by far the
 best way to call something that might be subjected to shell escapes: just
 never call the shell at all.  
 
-    use English;
-    die "Can't fork: $!" unless defined $pid = open(KID, "-|");
-    if ($pid) {                  # parent
-       while (<KID>) {
-           # do something
-       }
-       close KID;
-    } else {
-       my @temp = ($EUID, $EGID);
-       $EUID = $UID;
-       $EGID = $GID;    #      initgroups() also called!
-       # Make sure privs are really gone
-       ($EUID, $EGID) = @temp;
-       die "Can't drop privileges" 
-               unless $UID == $EUID  && $GID eq $EGID; 
-       $ENV{PATH} = "/bin:/usr/bin";
-       exec 'myprog', 'arg1', 'arg2' 
-           or die "can't exec myprog: $!";
-    }
+        use English;
+        die "Can't fork: $!" unless defined($pid = open(KID, "-|"));
+        if ($pid) {           # parent
+            while (<KID>) {
+                # do something
+            }
+            close KID;
+        } else {
+            my @temp     = ($EUID, $EGID);
+            my $orig_uid = $UID;
+            my $orig_gid = $GID;
+            $EUID = $UID;
+            $EGID = $GID;
+            # Drop privileges
+            $UID  = $orig_uid;
+            $GID  = $orig_gid;
+            # Make sure privs are really gone
+            ($EUID, $EGID) = @temp;
+            die "Can't drop privileges"
+                unless $UID == $EUID  && $GID eq $EGID;
+            $ENV{PATH} = "/bin:/usr/bin"; # Minimal PATH.
+           # Consider sanitizing the environment even more.
+            exec 'myprog', 'arg1', 'arg2'
+                or die "can't exec myprog: $!";
+        }
 
 A similar strategy would work for wildcard expansion via C<glob>, although
 you can use C<readdir> instead.
index 9976316..ae128ce 100644 (file)
@@ -169,8 +169,8 @@ Do not, however, be tempted to do this:
 
 Like the flattened incoming parameter list, the return list is also
 flattened on return.  So all you have managed to do here is stored
-everything in C<@a> and made C<@b> an empty list.  See L<Pass by
-Reference> for alternatives.
+everything in C<@a> and made C<@b> an empty list.  See 
+L<Pass by Reference> for alternatives.
 
 A subroutine may be called using an explicit C<&> prefix.  The
 C<&> is optional in modern Perl, as are parentheses if the
@@ -697,7 +697,7 @@ Despite the existence of C<my>, there are still three places where the
 C<local> operator still shines.  In fact, in these three places, you
 I<must> use C<local> instead of C<my>.
 
-=over
+=over 4
 
 =item 1. You need to give a global variable a temporary value, especially $_.
 
index 1a58965..0c55c6a 100644 (file)
@@ -71,7 +71,7 @@ calls.  Here's the preamble of the class.
     use strict;
     $Nice::DEBUG = 0 unless defined $Nice::DEBUG;
 
-=over
+=over 4
 
 =item TIESCALAR classname, LIST
 
@@ -225,7 +225,7 @@ The preamble code for the class is as follows:
     use Carp;
     use strict;
 
-=over
+=over 4
 
 =item TIEARRAY classname, LIST
 
@@ -400,7 +400,7 @@ that calls it.
 
 Here are the methods for the DotFiles tied hash.
 
-=over
+=over 4
 
 =item TIEHASH classname, LIST
 
@@ -655,7 +655,7 @@ In our example we're going to create a shouting handle.
 
     package Shout;
 
-=over
+=over 4
 
 =item TIEHANDLE classname, LIST
 
index 31a7c76..e923673 100644 (file)
@@ -1700,7 +1700,7 @@ as with any other local().
 It would be nice to combine Alias with
 something like Class::Struct or Class::MethodMaker.
 
-=head2 NOTES
+=head1 NOTES
 
 =head2 Object Terminology
 
index 0bcb638..ee0bd02 100644 (file)
@@ -12,7 +12,7 @@ the class itself.
 
 Here are a few examples where class attributes might come in handy:
 
-=over
+=over 4
 
 =item *
 
index c9954d8..e567e18 100644 (file)
@@ -10,7 +10,7 @@ WARNING: The implementation of Unicode support in Perl is incomplete.
 
 The following areas need further work.
 
-=over
+=over 4
 
 =item Input and Output Disciplines
 
index 83f4d9c..49cdcb2 100644 (file)
@@ -619,7 +619,8 @@ across fork() calls.  (Mnemonic: same as shells.)
 =item $<
 
 The real uid of this process.  (Mnemonic: it's the uid you came I<from>,
-if you're running setuid.)
+if you're running setuid.)  You can change both the real uid and
+the effective uid at the same time by using POSIX::setuid().
 
 =item $EFFECTIVE_USER_ID
 
@@ -632,6 +633,9 @@ The effective uid of this process.  Example:
     $< = $>;           # set real to effective uid
     ($<,$>) = ($>,$<); # swap real and effective uid
 
+You can change both the effective uid and the real uid at the same
+time by using POSIX::setuid().
+
 (Mnemonic: it's the uid you went I<to>, if you're running setuid.)
 C<< $< >> and C<< $> >> can be swapped only on machines
 supporting setreuid().
@@ -652,6 +656,9 @@ However, a value assigned to C<$(> must be a single number used to
 set the real gid.  So the value given by C<$(> should I<not> be assigned
 back to C<$(> without being forced numeric, such as by adding zero.
 
+You can change both the real gid and the effective gid at the same
+time by using POSIX::setgid().
+
 (Mnemonic: parentheses are used to I<group> things.  The real gid is the
 group you I<left>, if you're running setgid.)
 
@@ -674,6 +681,9 @@ empty list for setgroups(), just repeat the new effective gid; that is,
 to force an effective gid of 5 and an effectively empty setgroups()
 list, say C< $) = "5 5" >.
 
+You can change both the effective gid and the real gid at the same
+time by using POSIX::setgid() (use only a single numeric argument).
+
 (Mnemonic: parentheses are used to I<group> things.  The effective gid
 is the group that's I<right> for you, if you're running setgid.)
 
index a28f307..1726a8b 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -211,6 +211,21 @@ PP(pp_substcont)
     cx->sb_m = m = rx->startp[0] + orig;
     sv_catpvn(dstr, s, m-s);
     cx->sb_s = rx->endp[0] + orig;
+    { /* Update the pos() information. */
+       SV *sv = cx->sb_targ;
+       MAGIC *mg;
+       I32 i;
+       if (SvTYPE(sv) < SVt_PVMG)
+           SvUPGRADE(sv, SVt_PVMG);
+       if (!(mg = mg_find(sv, 'g'))) {
+           sv_magic(sv, Nullsv, 'g', Nullch, 0);
+           mg = mg_find(sv, 'g');
+       }
+       i = m - orig;
+       if (DO_UTF8(sv))
+           sv_pos_b2u(sv, &i);
+       mg->mg_len = i;
+    }
     cx->sb_rxtainted |= RX_MATCH_TAINTED(rx);
     rxres_save(&cx->sb_rxres, rx);
     RETURNOP(pm->op_pmreplstart);
index ea77e1d..b5b4728 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1450,6 +1450,13 @@ Perl_do_readline(pTHX)
        offset = 0;
     }
 
+    /* This should not be marked tainted if the fp is marked clean */
+#define MAYBE_TAINT_LINE(io, sv) \
+    if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
+       TAINT;                          \
+       SvTAINTED_on(sv);               \
+    }
+
 /* delay EOF state for a snarfed empty file */
 #define SNARF_EOF(gimme,rs,io,sv) \
     (gimme != G_SCALAR || SvCUR(sv)                                    \
@@ -1478,13 +1485,10 @@ Perl_do_readline(pTHX)
                (void)SvOK_off(TARG);
                PUSHTARG;
            }
+           MAYBE_TAINT_LINE(io, sv);
            RETURN;
        }
-       /* This should not be marked tainted if the fp is marked clean */
-       if (!(IoFLAGS(io) & IOf_UNTAINT)) {
-           TAINT;
-           SvTAINTED_on(sv);
-       }
+       MAYBE_TAINT_LINE(io, sv);
        IoLINES(io)++;
        IoFLAGS(io) |= IOf_NOLINE;
        SvSETMAGIC(sv);
index 1b56290..5678f0e 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -150,7 +150,7 @@ extern int h_errno;
 #    include <fcntl.h>
 #  endif
 
-#  if defined(HAS_FCNTL) && defined(F_SETLK) && defined (F_SETLKW)
+#  if defined(HAS_FCNTL) && defined(FCNTL_CAN_LOCK)
 #    define FLOCK fcntl_emulate_flock
 #    define FCNTL_EMULATE_FLOCK
 #  else /* no flock() or fcntl(F_SETLK,...) */
diff --git a/proto.h b/proto.h
index 5d24000..1390e48 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -594,9 +594,9 @@ PERL_CALLCONV HV*   Perl_get_hv(pTHX_ const char* name, I32 create);
 PERL_CALLCONV CV*      Perl_get_cv(pTHX_ const char* name, I32 create);
 PERL_CALLCONV int      Perl_init_i18nl10n(pTHX_ int printwarn);
 PERL_CALLCONV int      Perl_init_i18nl14n(pTHX_ int printwarn);
-PERL_CALLCONV void     Perl_new_collate(pTHX_ const char* newcoll);
-PERL_CALLCONV void     Perl_new_ctype(pTHX_ const char* newctype);
-PERL_CALLCONV void     Perl_new_numeric(pTHX_ const char* newcoll);
+PERL_CALLCONV void     Perl_new_collate(pTHX_ char* newcoll);
+PERL_CALLCONV void     Perl_new_ctype(pTHX_ char* newctype);
+PERL_CALLCONV void     Perl_new_numeric(pTHX_ char* newcoll);
 PERL_CALLCONV void     Perl_set_numeric_local(pTHX);
 PERL_CALLCONV void     Perl_set_numeric_radix(pTHX);
 PERL_CALLCONV void     Perl_set_numeric_standard(pTHX);
@@ -1257,6 +1257,7 @@ STATIC SV*        S_isa_lookup(pTHX_ HV *stash, const char *name, int len, int level);
 #endif
 
 #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+STATIC char*   S_stdize_locale(pTHX_ char* locs);
 STATIC SV*     S_mess_alloc(pTHX);
 #  if defined(LEAKTEST)
 STATIC void    S_xstat(pTHX_ int);
diff --git a/sv.c b/sv.c
index 5323e48..9b337ec 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -2555,7 +2555,8 @@ Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
            SvIVX(dstr) = SvIVX(sstr);
            if (SvIsUV(sstr))
                SvIsUV_on(dstr);
-           SvTAINT(dstr);
+           if (SvTAINTED(sstr))
+               SvTAINT(dstr);
            return;
        }
        goto undef_sstr;
@@ -2575,7 +2576,8 @@ Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
            }
            SvNVX(dstr) = SvNVX(sstr);
            (void)SvNOK_only(dstr);
-           SvTAINT(dstr);
+           if (SvTAINTED(sstr))
+               SvTAINT(dstr);
            return;
        }
        goto undef_sstr;
@@ -2644,7 +2646,8 @@ Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
            GvINTRO_off(dstr);          /* one-shot flag */
            gp_free((GV*)dstr);
            GvGP(dstr) = gp_ref(GvGP(sstr));
-           SvTAINT(dstr);
+           if (SvTAINTED(sstr))
+               SvTAINT(dstr);
            if (GvIMPORTED(dstr) != GVf_IMPORTED
                && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
            {
@@ -2790,7 +2793,8 @@ Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
                    SvREFCNT_dec(dref);
                if (intro)
                    SAVEFREESV(sref);
-               SvTAINT(dstr);
+               if (SvTAINTED(sstr))
+                   SvTAINT(dstr);
                return;
            }
            if (SvPVX(dstr)) {
@@ -2898,7 +2902,8 @@ Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
        else
            (void)SvOK_off(dstr);
     }
-    SvTAINT(dstr);
+    if (SvTAINTED(sstr))
+       SvTAINT(dstr);
 }
 
 /*
@@ -6516,15 +6521,7 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
                *--eptr = '#';
            *--eptr = '%';
 
-           {
-               STORE_NUMERIC_STANDARD_SET_LOCAL();
-#ifdef USE_LOCALE_NUMERIC
-               if (!was_standard && maybe_tainted)
-                   *maybe_tainted = TRUE;
-#endif
-               (void)sprintf(PL_efloatbuf, eptr, nv);
-               RESTORE_NUMERIC_STANDARD();
-           }
+           (void)sprintf(PL_efloatbuf, eptr, nv);
 
            eptr = PL_efloatbuf;
            elen =