Fix merge issues, remove excess files - match perl-5.20.2 dist
authorafresh1 <afresh1@openbsd.org>
Sat, 25 Apr 2015 19:14:36 +0000 (19:14 +0000)
committerafresh1 <afresh1@openbsd.org>
Sat, 25 Apr 2015 19:14:36 +0000 (19:14 +0000)
117 files changed:
gnu/usr.bin/perl/Configure
gnu/usr.bin/perl/Cross/config.sh-arm-linux
gnu/usr.bin/perl/INSTALL
gnu/usr.bin/perl/MANIFEST
gnu/usr.bin/perl/Makefile.SH
gnu/usr.bin/perl/NetWare/config.wc
gnu/usr.bin/perl/Porting/Maintainers.pl
gnu/usr.bin/perl/Porting/config.sh
gnu/usr.bin/perl/Porting/config_H
gnu/usr.bin/perl/Porting/pumpkin.pod
gnu/usr.bin/perl/README
gnu/usr.bin/perl/README.os2
gnu/usr.bin/perl/README.vms
gnu/usr.bin/perl/README.win32
gnu/usr.bin/perl/config_h.SH
gnu/usr.bin/perl/configpm
gnu/usr.bin/perl/configure.com
gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm
gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm
gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs
gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t
gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm
gnu/usr.bin/perl/cpan/NEXT/lib/NEXT.pm
gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/PlainText.pm
gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm
gnu/usr.bin/perl/cpan/autodie/t/truncate.t
gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm
gnu/usr.bin/perl/deb.c
gnu/usr.bin/perl/dist/Data-Dumper/Dumper.pm
gnu/usr.bin/perl/dist/Data-Dumper/Dumper.xs
gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
gnu/usr.bin/perl/dist/Math-BigInt/lib/Math/BigInt.pm
gnu/usr.bin/perl/dist/Module-CoreList/t/corevers.t [deleted file]
gnu/usr.bin/perl/dist/threads-shared/t/stress.t
gnu/usr.bin/perl/ext/DynaLoader/Makefile.PL
gnu/usr.bin/perl/ext/DynaLoader/dl_dlopen.xs
gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL
gnu/usr.bin/perl/ext/POSIX/POSIX.xs
gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod
gnu/usr.bin/perl/ext/POSIX/t/posix.t
gnu/usr.bin/perl/ext/re/t/reflags.t
gnu/usr.bin/perl/gv.c
gnu/usr.bin/perl/hints/dec_osf.sh
gnu/usr.bin/perl/hints/irix_6.sh
gnu/usr.bin/perl/hints/netbsd.sh
gnu/usr.bin/perl/hints/openbsd.sh
gnu/usr.bin/perl/installperl
gnu/usr.bin/perl/lib/AnyDBM_File.pm
gnu/usr.bin/perl/lib/Config.t
gnu/usr.bin/perl/lib/Getopt/Std.pm
gnu/usr.bin/perl/lib/locale.t
gnu/usr.bin/perl/makedef.pl
gnu/usr.bin/perl/mg.c
gnu/usr.bin/perl/op.c
gnu/usr.bin/perl/op.h
gnu/usr.bin/perl/patchlevel.h
gnu/usr.bin/perl/perl.c
gnu/usr.bin/perl/perl.h
gnu/usr.bin/perl/plan9/config.plan9
gnu/usr.bin/perl/plan9/config_sh.sample
gnu/usr.bin/perl/plan9/mkfile
gnu/usr.bin/perl/pod/perl.pod
gnu/usr.bin/perl/pod/perldelta.pod
gnu/usr.bin/perl/pod/perldiag.pod
gnu/usr.bin/perl/pod/perlfunc.pod
gnu/usr.bin/perl/pod/perlguts.pod
gnu/usr.bin/perl/pod/perlhist.pod
gnu/usr.bin/perl/pod/perlipc.pod
gnu/usr.bin/perl/pod/perllocale.pod
gnu/usr.bin/perl/pod/perlmod.pod
gnu/usr.bin/perl/pod/perlmodinstall.pod
gnu/usr.bin/perl/pod/perlop.pod
gnu/usr.bin/perl/pod/perlref.pod
gnu/usr.bin/perl/pod/perlsec.pod
gnu/usr.bin/perl/pod/perlsub.pod
gnu/usr.bin/perl/pod/perlsyn.pod
gnu/usr.bin/perl/pod/perlthrtut.pod
gnu/usr.bin/perl/pod/perlvar.pod
gnu/usr.bin/perl/pp.c
gnu/usr.bin/perl/pp_ctl.c
gnu/usr.bin/perl/pp_sys.c
gnu/usr.bin/perl/regcomp.c
gnu/usr.bin/perl/regexec.c
gnu/usr.bin/perl/sv.c
gnu/usr.bin/perl/sv.h
gnu/usr.bin/perl/symbian/config.sh
gnu/usr.bin/perl/t/lib/h2ph.pht
gnu/usr.bin/perl/t/loc_tools.pl
gnu/usr.bin/perl/t/op/list.t
gnu/usr.bin/perl/t/op/quotemeta.t
gnu/usr.bin/perl/t/op/sort.t
gnu/usr.bin/perl/t/op/taint.t
gnu/usr.bin/perl/t/op/time.t
gnu/usr.bin/perl/t/op/write.t
gnu/usr.bin/perl/t/porting/customized.dat
gnu/usr.bin/perl/t/porting/dual-life.t
gnu/usr.bin/perl/t/re/pat.t
gnu/usr.bin/perl/t/uni/fold.t
gnu/usr.bin/perl/t/uni/overload.t
gnu/usr.bin/perl/toke.c
gnu/usr.bin/perl/uconfig.h
gnu/usr.bin/perl/uconfig.sh
gnu/usr.bin/perl/uconfig64.sh
gnu/usr.bin/perl/util.c
gnu/usr.bin/perl/utils.lst
gnu/usr.bin/perl/utils/Makefile.PL
gnu/usr.bin/perl/utils/h2ph.PL
gnu/usr.bin/perl/utils/perlbug.PL
gnu/usr.bin/perl/vutil.c
gnu/usr.bin/perl/win32/Makefile
gnu/usr.bin/perl/win32/config.ce
gnu/usr.bin/perl/win32/config.gc
gnu/usr.bin/perl/win32/config.vc
gnu/usr.bin/perl/win32/makefile.mk
gnu/usr.bin/perl/win32/pod.mak
gnu/usr.bin/perl/win32/win32.h

index d34fded..2f91ba1 100644 (file)
@@ -589,7 +589,6 @@ d_localtime_r=''
 d_localtime_r_needs_tzset=''
 localtime_r_proto=''
 d_locconv=''
-d_lc_monetary_2008=''
 d_lockf=''
 d_longdbl=''
 longdblsize=''
@@ -2796,31 +2795,38 @@ $define|true|[yY]*)
        *)      case "$lns:$issymlink" in
                *"ln"*" -s:"*"test -"?)
                        echo "Creating the symbolic links..." >&4
+                       echo "(First creating the subdirectories...)" >&4
                        cd ..
-                       awk -v src="$src" '{
-                               dir=$1;
-                               if (!sub(/\/[^\/]*$/, "", dir)) { dir = "." }
-                               mf[dir] = mf[dir]" "src"/"$1;
-                       } END {
-                               for (d in mf) {
-                                       if (d != ".") { system("mkdir -p "d) }
-                                       system("ln -sf "mf[d]" "d);
-                               }
-                       }' $src/MANIFEST
+                       awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
+                               read directory
+                               test -z "$directory" && break
+                               mkdir -p $directory
+                       done
                        # Sanity check 1.
                        if test ! -d t/base; then
                                echo "Failed to create the subdirectories.  Aborting." >&4
                                exit 1
                        fi
+                       echo "(Then creating the symlinks...)" >&4
+                       awk '{print $1}' $src/MANIFEST | while true; do
+                               read filename
+                               test -z "$filename" && break
+                               if test -f $filename; then
+                                       if $issymlink $filename; then
+                                               rm -f $filename
+                                       fi
+                               fi
+                               if test -f $filename; then
+                                       echo "$filename already exists, not symlinking."
+                               else
+                                       ln -s $src/$filename $filename
+                               fi
+                       done
                        # Sanity check 2.
                        if test ! -f t/base/lex.t; then
                                echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
                                exit 1
                        fi
-                       if test ! -f x2p/walk.c; then
-                               echo "Failed to create the symlinks (x2p/walk.c missing).  Aborting." >&4
-                               exit 1
-                       fi
                        cd UU
                        ;;
                *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
@@ -5343,25 +5349,6 @@ default|recommended)
                eval $checkccflag
                ;;
        esac
-       case "$gccversion" in
-       1*) ;;
-       2*) ;;
-       ?*)     echo " "
-               echo "Checking if your compiler accepts -fno-delete-null-pointer-checks" 2>&1
-               echo 'int main(void) { return 0; }' > gcctest.c
-               if $cc -O2 -fno-delete-null-pointer-checks -o gcctest gcctest.c; then
-                       echo "Yes, it does." 2>&1
-                       case "$ccflags" in
-                       *delete-null-pointer-checks*)
-                               echo "Leaving current flags $ccflags alone." 2>&1
-                               ;;
-                       *) dflt="$dflt -fno-delete-null-pointer-checks" ;;
-                       esac
-               else
-                       echo "Nope, it doesn't, but that's ok." 2>&1
-               fi
-               ;;
-       esac
        # For gcc, adding -pipe speeds up compilations for some, but apparently
        # some assemblers can't read from stdin.  (It also slows down compilations
        # in other cases, but those are apparently rarer these days.)  AD 5/2004.
@@ -8555,15 +8542,12 @@ if "$useshrplib"; then
        freebsd|mirbsd|netbsd|openbsd|interix|dragonfly|bitrig)
                xxx="-Wl,-R$shrpdir"
                ;;
-       bsdos|linux|irix*|dec_osf|gnu*)
+       bsdos|linux|irix*|dec_osf|gnu*|haiku)
                xxx="-Wl,-rpath,$shrpdir"
                ;;
        next)
                # next doesn't like the default...
                ;;
-       haiku)
-               # Haiku doesn't like the default, either.
-               ;;
        hpux*)
                # hpux doesn't like the default, either.
                tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
@@ -15598,27 +15582,6 @@ $rm_try
 set localeconv d_locconv
 eval $inlibc
 
-: see if localtime_r calls tzset
-case "$d_locconv:$d_lc_monetary_2008" in
-define:)
-       $cat >try.c <<EOCP
-#include <locale.h>
-int main() {
-       struct lconv *lc = localeconv();
-       char int_p_cs_precedes = lc->int_p_cs_precedes;
-       return 0;
-}
-EOCP
-       set try
-       if eval $compile; then
-               d_lc_monetary_2008="$define"
-       else
-               d_lc_monetary_2008="$undef"
-       fi;
-       $rm_try
-       ;;
-esac
-
 : see if lockf exists
 set lockf d_lockf
 eval $inlibc
@@ -19620,9 +19583,9 @@ case "$ccflags" in
        ;;
 esac
 
-randfunc=drand48
-drand01="drand48()"
-seedfunc="srand48"
+randfunc=Perl_drand48
+drand01="Perl_drand48()"
+seedfunc="Perl_drand48_init"
 randbits=48
 randseedtype=U32
 
@@ -22427,7 +22390,6 @@ xs_extensions=''
 find_extensions='
     for xxx in *; do
        case "$xxx" in
-           CVS) ;;
            DynaLoader|dynaload) ;;
            *)
            this_ext=`echo $xxx | $sed -e s/-/\\\//g`;
@@ -22655,8 +22617,6 @@ esac
 nonxs_ext=''
 for xxx in $nonxs_extensions ; do
        case "$xxx" in
-       CVS|RCS|SCCS|.svn)
-               ;;
        VMS*)
                ;;
        *)      nonxs_ext="$nonxs_ext $xxx"
@@ -23216,7 +23176,6 @@ d_localtime64='$d_localtime64'
 d_localtime_r='$d_localtime_r'
 d_localtime_r_needs_tzset='$d_localtime_r_needs_tzset'
 d_locconv='$d_locconv'
-d_lc_monetary_2008='$d_lc_monetary_2008'
 d_lockf='$d_lockf'
 d_longdbl='$d_longdbl'
 d_longlong='$d_longlong'
index 29c0cbc..a6e2219 100644 (file)
@@ -34,10 +34,10 @@ aphostname='/bin/hostname'
 api_revision='5'
 api_subversion='0'
 api_version='20'
-api_versionstring='5.20.1'
+api_versionstring='5.20.2'
 ar='ar'
-archlib='/usr/lib/perl5/5.20.1/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.20.1/armv4l-linux'
+archlib='/usr/lib/perl5/5.20.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.20.2/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -56,7 +56,7 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.20.1/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.20.2/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -296,7 +296,6 @@ d_isinf='define'
 d_isnan='define'
 d_isnanl='define'
 d_killpg='define'
-d_lc_monetary_2008='undef'
 d_lchown='define'
 d_ldbl_dig='define'
 d_libm_lib_version='define'
@@ -729,7 +728,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.20.1/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.20.2/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -737,13 +736,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.20.1'
+installprivlib='./install_me_here/usr/lib/perl5/5.20.2'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.20.2/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.20.1'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.20.2'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -872,8 +871,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.20.1'
-privlibexp='/usr/lib/perl5/5.20.1'
+privlib='/usr/lib/perl5/5.20.2'
+privlibexp='/usr/lib/perl5/5.20.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -938,17 +937,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.20.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.20.2/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.20.1'
+sitelib='/usr/lib/perl5/site_perl/5.20.2'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.20.1'
+sitelibexp='/usr/lib/perl5/site_perl/5.20.2'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -987,7 +986,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1077,8 +1076,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.20.1'
-version_patchlevel_string='version 20 subversion 1'
+version='5.20.2'
+version_patchlevel_string='version 20 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1092,7 +1091,7 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=20
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=20
 PERL_API_SUBVERSION=0
index b1028ea..bc2374a 100644 (file)
@@ -89,7 +89,8 @@ potential incompatibilities introduced with this release.  A few of
 the most important issues are listed below, but you should refer
 to pod/perldelta.pod for more detailed information.
 
-B<WARNING:> This version is not binary compatible with prior releases of Perl.
+B<WARNING:> This version is not binary compatible with versions of Perl
+earlier than 5.20.0.
 If you have built extensions (i.e. modules that include C code)
 using an earlier version of Perl, you will need to rebuild and reinstall
 those extensions.
@@ -563,7 +564,7 @@ The directories set up by Configure fall into three broad categories.
 
 =item Directories for the perl distribution
 
-By default, Configure will use the following directories for 5.20.1.
+By default, Configure will use the following directories for 5.20.2.
 $version is the full perl version number, including subversion, e.g.
 5.12.3, and $archname is a string like sun4-sunos,
 determined by Configure.  The full definitions of all Configure
@@ -2417,7 +2418,7 @@ http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
 
 =head1 Coexistence with earlier versions of perl 5
 
-Perl 5.20.1 is not binary compatible with earlier versions of Perl.
+Perl 5.20.2 is not binary compatible with versions of Perl earlier than 5.20.0.
 In other words, you will have to recompile your XS modules.
 
 In general, you can usually safely upgrade from one version of Perl (e.g.
@@ -2491,9 +2492,9 @@ won't interfere with another version.  (The defaults guarantee this for
 libraries after 5.6.0, but not for executables. TODO?)  One convenient
 way to do this is by using a separate prefix for each version, such as
 
-       sh Configure -Dprefix=/opt/perl5.20.1
+       sh Configure -Dprefix=/opt/perl5.20.2
 
-and adding /opt/perl5.20.1/bin to the shell PATH variable.  Such users
+and adding /opt/perl5.20.2/bin to the shell PATH variable.  Such users
 may also wish to add a symbolic link /usr/local/bin/perl so that
 scripts can still start with #!/usr/local/bin/perl.
 
@@ -2506,13 +2507,13 @@ seriously consider using a separate directory, since development
 subversions may not have all the compatibility wrinkles ironed out
 yet.
 
-=head2 Upgrading from 5.19.0 or earlier
+=head2 Upgrading from 5.19.11 or earlier
 
-B<Perl 5.20.1 may not be binary compatible with Perl 5.19.11 or
+B<Perl 5.20.2 may not be binary compatible with Perl 5.19.11 or
 earlier Perl releases.>  Perl modules having binary parts
 (meaning that a C compiler is used) will have to be recompiled to be
-used with 5.20.1.  If you find you do need to rebuild an extension with
-5.20.1, you may safely do so without disturbing the older
+used with 5.20.2.  If you find you do need to rebuild an extension with
+5.20.2, you may safely do so without disturbing the older
 installations.  (See L<"Coexistence with earlier versions of perl 5">
 above.)
 
@@ -2545,15 +2546,15 @@ Firstly, the bare minimum to run this script
      print("$f\n");
   }
 
-in Linux with perl-5.20.1 is as follows (under $Config{prefix}):
+in Linux with perl-5.20.2 is as follows (under $Config{prefix}):
 
   ./bin/perl
-  ./lib/perl5/5.20.1/strict.pm
-  ./lib/perl5/5.20.1/warnings.pm
-  ./lib/perl5/5.20.1/i686-linux/File/Glob.pm
-  ./lib/perl5/5.20.1/feature.pm
-  ./lib/perl5/5.20.1/XSLoader.pm
-  ./lib/perl5/5.20.1/i686-linux/auto/File/Glob/Glob.so
+  ./lib/perl5/5.20.2/strict.pm
+  ./lib/perl5/5.20.2/warnings.pm
+  ./lib/perl5/5.20.2/i686-linux/File/Glob.pm
+  ./lib/perl5/5.20.2/feature.pm
+  ./lib/perl5/5.20.2/XSLoader.pm
+  ./lib/perl5/5.20.2/i686-linux/auto/File/Glob/Glob.so
 
 Secondly, for perl-5.10.1, the Debian perl-base package contains 591 files,
 (of which 510 are for lib/unicore) totaling about 3.5MB in its i386 version.
index 19068c0..6896854 100644 (file)
@@ -8,7 +8,6 @@ cflags.SH               A script that emits C compilation flags per file
 Changes                        Describe how to peruse changes between releases
 charclass_invlists.h   Compiled-in inversion lists
 config_h.SH            Produces config.h
-config.over            Site-specific overrides for Configure defaults
 configpm               Produces lib/Config.pm
 Configure              Portability tool
 configure.com          Configure-equivalent for VMS
@@ -1725,10 +1724,6 @@ cpan/NEXT/t/dynamically_scoped_regex_vars.t      NEXT
 cpan/NEXT/t/next.t             NEXT
 cpan/NEXT/t/stringify.t                NEXT
 cpan/NEXT/t/unseen.t           NEXT
-cpan/OpenBSD-MkTemp/lib/OpenBSD/MkTemp.pm      OpenBSD::MkTemp
-cpan/OpenBSD-MkTemp/MkTemp.xs  OpenBSD::MkTemp
-cpan/OpenBSD-MkTemp/README     OpenBSD::MkTemp Readme
-cpan/OpenBSD-MkTemp/t/OpenBSD-MkTemp.t OpenBSD::MkTemp test file
 cpan/Package-Constants/lib/Package/Constants.pm        Package::Constants
 cpan/Package-Constants/t/01_list.t             Package::Constants tests
 cpan/Params-Check/lib/Params/Check.pm  Params::Check
@@ -3311,7 +3306,6 @@ dist/Module-CoreList/Makefile.PL          Module::CoreList
 dist/Module-CoreList/MANIFEST                  Module::CoreList
 dist/Module-CoreList/README                    Module::CoreList
 dist/Module-CoreList/t/corelist.t              Module::CoreList tests
-dist/Module-CoreList/t/corevers.t              Module::CoreList tests
 dist/Module-CoreList/t/deprecated.t            Module::CoreList tests
 dist/Module-CoreList/t/find_modules.t          Module::CoreList tests
 dist/Module-CoreList/t/is_core.t               Module::CoreList tests
@@ -3593,6 +3587,7 @@ ext/B/B/Terse.pm  Compiler Terse backend
 ext/B/B/Xref.pm                Compiler Xref backend
 ext/B/B.xs             Compiler backend external subroutines
 ext/B/hints/darwin.pl  Hints for named architecture
+ext/B/hints/openbsd.pl Hints for named architecture
 ext/B/Makefile.PL      Compiler backend makefile writer
 ext/B/O.pm             Compiler front-end module (-MO=...)
 ext/B/t/b.t            See if B works
@@ -4021,7 +4016,6 @@ fakesdio.h                        stdio in terms of PerlIO
 feature.h                      Feature header
 form.h                         Public declarations for formats
 generate_uudmap.c              Generate uudmap.h, the uuencode decoding map
-git_version.h                  Pre-generated git_version.h for OpenBSD
 globals.c                      File to declare global symbols (for shared library)
 globvar.sym                    Global variables that need hiding when embedded
 gv.c                           Glob value code
@@ -4167,7 +4161,6 @@ lib/Class/Struct.pm               Declare struct-like datatypes as Perl classes
 lib/Class/Struct.t             See if Class::Struct works
 lib/Config/Extensions.pm       Convenient hash lookup for built extensions
 lib/Config/Extensions.t                See if Config::Extensions works
-lib/Config_git.pl              Pre-generated Config_git.pl for OpenBSD
 lib/Config.t                   See if Config works
 lib/CORE.pod                   document the CORE namespace
 lib/DBM_Filter/compress.pm     DBM Filter to compress keys/values
@@ -4324,444 +4317,54 @@ lib/Unicode/README             Explanation what happened to lib/unicode.
 lib/Unicode/UCD.pm             Unicode character database
 lib/Unicode/UCD.t              See if Unicode character database works
 lib/unicore/ArabicShaping.txt                  Unicode character database
-lib/unicore/auxiliary/GCBTest.txt                      Unicode character database
-lib/unicore/auxiliary/GraphemeBreakProperty.txt                        Unicode character database
-lib/unicore/auxiliary/SentenceBreakProperty.txt                        Unicode character database
-lib/unicore/auxiliary/WordBreakProperty.txt                    Unicode character database
+lib/unicore/auxiliary/GCBTest.txt      Unicode character database
+lib/unicore/auxiliary/GraphemeBreakProperty.txt        Unicode character database
+lib/unicore/auxiliary/SentenceBreakProperty.txt        Unicode character database
+lib/unicore/auxiliary/WordBreakProperty.txt    Unicode character database
 lib/unicore/BidiBrackets.txt                   Unicode character database
 lib/unicore/BidiMirroring.txt                  Unicode character database
 lib/unicore/Blocks.txt                         Unicode character database
 lib/unicore/CaseFolding.txt                    Unicode character database
 lib/unicore/CJKRadicals.txt                    Unicode character database
-lib/unicore/CombiningClass.pl                  Unicode character database
-lib/unicore/CompositionExclusions.txt                  Unicode character database
+lib/unicore/CompositionExclusions.txt          Unicode character database
 lib/unicore/DAge.txt                           Unicode character database
 lib/unicore/DCoreProperties.txt                        Unicode character database
-lib/unicore/Decomposition.pl                   Unicode character database
-lib/unicore/DNormalizationProps.txt                    Unicode character database
+lib/unicore/DNormalizationProps.txt            Unicode character database
 lib/unicore/EastAsianWidth.txt                 Unicode character database
 lib/unicore/EmojiSources.txt                   Unicode character database
-lib/unicore/extracted/DBidiClass.txt                   Unicode character database
-lib/unicore/extracted/DBinaryProperties.txt                    Unicode character database
-lib/unicore/extracted/DCombiningClass.txt                      Unicode character database
-lib/unicore/extracted/DDecompositionType.txt                   Unicode character database
-lib/unicore/extracted/DEastAsianWidth.txt                      Unicode character database
-lib/unicore/extracted/DGeneralCategory.txt                     Unicode character database
-lib/unicore/extracted/DJoinGroup.txt                   Unicode character database
-lib/unicore/extracted/DJoinType.txt                    Unicode character database
-lib/unicore/extracted/DLineBreak.txt                   Unicode character database
-lib/unicore/extracted/DNumType.txt                     Unicode character database
-lib/unicore/extracted/DNumValues.txt                   Unicode character database
-lib/unicore/HangulSyllableType.txt                     Unicode character database
-lib/unicore/Heavy.pl                   Unicode character database
+lib/unicore/extracted/DBidiClass.txt           Unicode character database
+lib/unicore/extracted/DBinaryProperties.txt    Unicode character database
+lib/unicore/extracted/DCombiningClass.txt      Unicode character database
+lib/unicore/extracted/DDecompositionType.txt   Unicode character database
+lib/unicore/extracted/DEastAsianWidth.txt      Unicode character database
+lib/unicore/extracted/DGeneralCategory.txt     Unicode character database
+lib/unicore/extracted/DJoinGroup.txt           Unicode character database
+lib/unicore/extracted/DJoinType.txt            Unicode character database
+lib/unicore/extracted/DLineBreak.txt           Unicode character database
+lib/unicore/extracted/DNumType.txt             Unicode character database
+lib/unicore/extracted/DNumValues.txt           Unicode character database
+lib/unicore/HangulSyllableType.txt             Unicode character database
 lib/unicore/Index.txt                          Unicode character database
-lib/unicore/IndicMatraCategory.txt                     Unicode character database
-lib/unicore/IndicSyllabicCategory.txt                  Unicode character database
+lib/unicore/IndicMatraCategory.txt             Unicode character database
+lib/unicore/IndicSyllabicCategory.txt          Unicode character database
 lib/unicore/Jamo.txt                           Unicode character database
-lib/unicore/lib/Age/NA.pl                      Unicode character database
-lib/unicore/lib/Age/V11.pl                     Unicode character database
-lib/unicore/lib/Age/V20.pl                     Unicode character database
-lib/unicore/lib/Age/V30.pl                     Unicode character database
-lib/unicore/lib/Age/V31.pl                     Unicode character database
-lib/unicore/lib/Age/V32.pl                     Unicode character database
-lib/unicore/lib/Age/V40.pl                     Unicode character database
-lib/unicore/lib/Age/V41.pl                     Unicode character database
-lib/unicore/lib/Age/V50.pl                     Unicode character database
-lib/unicore/lib/Age/V51.pl                     Unicode character database
-lib/unicore/lib/Age/V52.pl                     Unicode character database
-lib/unicore/lib/Age/V60.pl                     Unicode character database
-lib/unicore/lib/Age/V61.pl                     Unicode character database
-lib/unicore/lib/Alpha/Y.pl                     Unicode character database
-lib/unicore/lib/Bc/AL.pl                       Unicode character database
-lib/unicore/lib/Bc/AN.pl                       Unicode character database
-lib/unicore/lib/Bc/BN.pl                       Unicode character database
-lib/unicore/lib/Bc/B.pl                        Unicode character database
-lib/unicore/lib/Bc/CS.pl                       Unicode character database
-lib/unicore/lib/Bc/EN.pl                       Unicode character database
-lib/unicore/lib/Bc/ES.pl                       Unicode character database
-lib/unicore/lib/Bc/ET.pl                       Unicode character database
-lib/unicore/lib/Bc/L.pl                        Unicode character database
-lib/unicore/lib/Bc/NSM.pl                      Unicode character database
-lib/unicore/lib/Bc/ON.pl                       Unicode character database
-lib/unicore/lib/Bc/R.pl                        Unicode character database
-lib/unicore/lib/Bc/WS.pl                       Unicode character database
-lib/unicore/lib/BidiC/Y.pl                     Unicode character database
-lib/unicore/lib/BidiM/Y.pl                     Unicode character database
-lib/unicore/lib/Blk/NB.pl                      Unicode character database
-lib/unicore/lib/Bpt/C.pl                       Unicode character database
-lib/unicore/lib/Bpt/N.pl                       Unicode character database
-lib/unicore/lib/Bpt/O.pl                       Unicode character database
-lib/unicore/lib/Cased/Y.pl                     Unicode character database
-lib/unicore/lib/Ccc/A.pl                       Unicode character database
-lib/unicore/lib/Ccc/AR.pl                      Unicode character database
-lib/unicore/lib/Ccc/ATAR.pl                    Unicode character database
-lib/unicore/lib/Ccc/B.pl                       Unicode character database
-lib/unicore/lib/Ccc/BR.pl                      Unicode character database
-lib/unicore/lib/Ccc/DB.pl                      Unicode character database
-lib/unicore/lib/Ccc/NK.pl                      Unicode character database
-lib/unicore/lib/Ccc/NR.pl                      Unicode character database
-lib/unicore/lib/Ccc/OV.pl                      Unicode character database
-lib/unicore/lib/Ccc/VR.pl                      Unicode character database
-lib/unicore/lib/CE/Y.pl                        Unicode character database
-lib/unicore/lib/CI/Y.pl                        Unicode character database
-lib/unicore/lib/CompEx/Y.pl                    Unicode character database
-lib/unicore/lib/CWCF/Y.pl                      Unicode character database
-lib/unicore/lib/CWCM/Y.pl                      Unicode character database
-lib/unicore/lib/CWKCF/Y.pl                     Unicode character database
-lib/unicore/lib/CWL/Y.pl                       Unicode character database
-lib/unicore/lib/CWT/Y.pl                       Unicode character database
-lib/unicore/lib/CWU/Y.pl                       Unicode character database
-lib/unicore/lib/Dash/Y.pl                      Unicode character database
-lib/unicore/lib/Dep/Y.pl                       Unicode character database
-lib/unicore/lib/Dia/Y.pl                       Unicode character database
-lib/unicore/lib/DI/Y.pl                        Unicode character database
-lib/unicore/lib/Dt/Com.pl                      Unicode character database
-lib/unicore/lib/Dt/Enc.pl                      Unicode character database
-lib/unicore/lib/Dt/Fin.pl                      Unicode character database
-lib/unicore/lib/Dt/Font.pl                     Unicode character database
-lib/unicore/lib/Dt/Init.pl                     Unicode character database
-lib/unicore/lib/Dt/Iso.pl                      Unicode character database
-lib/unicore/lib/Dt/Med.pl                      Unicode character database
-lib/unicore/lib/Dt/Nar.pl                      Unicode character database
-lib/unicore/lib/Dt/Nb.pl                       Unicode character database
-lib/unicore/lib/Dt/NonCanon.pl                 Unicode character database
-lib/unicore/lib/Dt/Sqr.pl                      Unicode character database
-lib/unicore/lib/Dt/Sub.pl                      Unicode character database
-lib/unicore/lib/Dt/Sup.pl                      Unicode character database
-lib/unicore/lib/Dt/Vert.pl                     Unicode character database
-lib/unicore/lib/Ea/A.pl                        Unicode character database
-lib/unicore/lib/Ea/H.pl                        Unicode character database
-lib/unicore/lib/Ea/Na.pl                       Unicode character database
-lib/unicore/lib/Ea/N.pl                        Unicode character database
-lib/unicore/lib/Ea/W.pl                        Unicode character database
-lib/unicore/lib/Ext/Y.pl                       Unicode character database
-lib/unicore/lib/GCB/CN.pl                      Unicode character database
-lib/unicore/lib/GCB/EX.pl                      Unicode character database
-lib/unicore/lib/GCB/LV.pl                      Unicode character database
-lib/unicore/lib/GCB/LVT.pl                     Unicode character database
-lib/unicore/lib/GCB/SM.pl                      Unicode character database
-lib/unicore/lib/GCB/XX.pl                      Unicode character database
-lib/unicore/lib/Gc/Cf.pl                       Unicode character database
-lib/unicore/lib/Gc/Cn.pl                       Unicode character database
-lib/unicore/lib/Gc/C.pl                        Unicode character database
-lib/unicore/lib/Gc/LC.pl                       Unicode character database
-lib/unicore/lib/Gc/Ll.pl                       Unicode character database
-lib/unicore/lib/Gc/Lm.pl                       Unicode character database
-lib/unicore/lib/Gc/Lo.pl                       Unicode character database
-lib/unicore/lib/Gc/L.pl                        Unicode character database
-lib/unicore/lib/Gc/Lt.pl                       Unicode character database
-lib/unicore/lib/Gc/Lu.pl                       Unicode character database
-lib/unicore/lib/Gc/Mc.pl                       Unicode character database
-lib/unicore/lib/Gc/Me.pl                       Unicode character database
-lib/unicore/lib/Gc/Mn.pl                       Unicode character database
-lib/unicore/lib/Gc/M.pl                        Unicode character database
-lib/unicore/lib/Gc/Nd.pl                       Unicode character database
-lib/unicore/lib/Gc/Nl.pl                       Unicode character database
-lib/unicore/lib/Gc/No.pl                       Unicode character database
-lib/unicore/lib/Gc/N.pl                        Unicode character database
-lib/unicore/lib/Gc/Pd.pl                       Unicode character database
-lib/unicore/lib/Gc/Pe.pl                       Unicode character database
-lib/unicore/lib/Gc/Pf.pl                       Unicode character database
-lib/unicore/lib/Gc/Pi.pl                       Unicode character database
-lib/unicore/lib/Gc/Po.pl                       Unicode character database
-lib/unicore/lib/Gc/P.pl                        Unicode character database
-lib/unicore/lib/Gc/Ps.pl                       Unicode character database
-lib/unicore/lib/Gc/Sc.pl                       Unicode character database
-lib/unicore/lib/Gc/Sk.pl                       Unicode character database
-lib/unicore/lib/Gc/Sm.pl                       Unicode character database
-lib/unicore/lib/Gc/So.pl                       Unicode character database
-lib/unicore/lib/Gc/S.pl                        Unicode character database
-lib/unicore/lib/Gc/Z.pl                        Unicode character database
-lib/unicore/lib/Gc/Zs.pl                       Unicode character database
-lib/unicore/lib/GrBase/Y.pl                    Unicode character database
-lib/unicore/lib/Hex/Y.pl                       Unicode character database
-lib/unicore/lib/Hst/NA.pl                      Unicode character database
-lib/unicore/lib/Hyphen/Y.pl                    Unicode character database
-lib/unicore/lib/IDC/Y.pl                       Unicode character database
-lib/unicore/lib/Ideo/Y.pl                      Unicode character database
-lib/unicore/lib/IDS/Y.pl                       Unicode character database
-lib/unicore/lib/In/2_0.pl                      Unicode character database
-lib/unicore/lib/In/2_1.pl                      Unicode character database
-lib/unicore/lib/In/3_0.pl                      Unicode character database
-lib/unicore/lib/In/3_1.pl                      Unicode character database
-lib/unicore/lib/In/3_2.pl                      Unicode character database
-lib/unicore/lib/In/4_0.pl                      Unicode character database
-lib/unicore/lib/In/4_1.pl                      Unicode character database
-lib/unicore/lib/In/5_0.pl                      Unicode character database
-lib/unicore/lib/In/5_1.pl                      Unicode character database
-lib/unicore/lib/In/5_2.pl                      Unicode character database
-lib/unicore/lib/In/6_0.pl                      Unicode character database
-lib/unicore/lib/In/6_1.pl                      Unicode character database
-lib/unicore/lib/In/6_2.pl                      Unicode character database
-lib/unicore/lib/In/6_3.pl                      Unicode character database
-lib/unicore/lib/Jg/Ain.pl                      Unicode character database
-lib/unicore/lib/Jg/Alef.pl                     Unicode character database
-lib/unicore/lib/Jg/Beh.pl                      Unicode character database
-lib/unicore/lib/Jg/Dal.pl                      Unicode character database
-lib/unicore/lib/Jg/FarsiYeh.pl                 Unicode character database
-lib/unicore/lib/Jg/Feh.pl                      Unicode character database
-lib/unicore/lib/Jg/Gaf.pl                      Unicode character database
-lib/unicore/lib/Jg/Hah.pl                      Unicode character database
-lib/unicore/lib/Jg/Lam.pl                      Unicode character database
-lib/unicore/lib/Jg/NoJoinin.pl                 Unicode character database
-lib/unicore/lib/Jg/Qaf.pl                      Unicode character database
-lib/unicore/lib/Jg/Reh.pl                      Unicode character database
-lib/unicore/lib/Jg/Seen.pl                     Unicode character database
-lib/unicore/lib/Jg/Waw.pl                      Unicode character database
-lib/unicore/lib/Jg/Yeh.pl                      Unicode character database
-lib/unicore/lib/Jt/C.pl                        Unicode character database
-lib/unicore/lib/Jt/D.pl                        Unicode character database
-lib/unicore/lib/Jt/R.pl                        Unicode character database
-lib/unicore/lib/Jt/T.pl                        Unicode character database
-lib/unicore/lib/Jt/U.pl                        Unicode character database
-lib/unicore/lib/Lb/AI.pl                       Unicode character database
-lib/unicore/lib/Lb/AL.pl                       Unicode character database
-lib/unicore/lib/Lb/BA.pl                       Unicode character database
-lib/unicore/lib/Lb/BB.pl                       Unicode character database
-lib/unicore/lib/Lb/CJ.pl                       Unicode character database
-lib/unicore/lib/Lb/CL.pl                       Unicode character database
-lib/unicore/lib/Lb/CM.pl                       Unicode character database
-lib/unicore/lib/Lb/EX.pl                       Unicode character database
-lib/unicore/lib/Lb/GL.pl                       Unicode character database
-lib/unicore/lib/Lb/ID.pl                       Unicode character database
-lib/unicore/lib/Lb/IS.pl                       Unicode character database
-lib/unicore/lib/Lb/NS.pl                       Unicode character database
-lib/unicore/lib/Lb/OP.pl                       Unicode character database
-lib/unicore/lib/Lb/PO.pl                       Unicode character database
-lib/unicore/lib/Lb/PR.pl                       Unicode character database
-lib/unicore/lib/Lb/QU.pl                       Unicode character database
-lib/unicore/lib/Lb/SA.pl                       Unicode character database
-lib/unicore/lib/Lb/XX.pl                       Unicode character database
-lib/unicore/lib/LOE/Y.pl                       Unicode character database
-lib/unicore/lib/Lower/Y.pl                     Unicode character database
-lib/unicore/lib/Math/Y.pl                      Unicode character database
-lib/unicore/lib/NChar/Y.pl                     Unicode character database
-lib/unicore/lib/NFCQC/M.pl                     Unicode character database
-lib/unicore/lib/NFCQC/Y.pl                     Unicode character database
-lib/unicore/lib/NFDQC/N.pl                     Unicode character database
-lib/unicore/lib/NFDQC/Y.pl                     Unicode character database
-lib/unicore/lib/NFKCQC/N.pl                    Unicode character database
-lib/unicore/lib/NFKCQC/Y.pl                    Unicode character database
-lib/unicore/lib/NFKDQC/N.pl                    Unicode character database
-lib/unicore/lib/NFKDQC/Y.pl                    Unicode character database
-lib/unicore/lib/Nt/Di.pl                       Unicode character database
-lib/unicore/lib/Nt/None.pl                     Unicode character database
-lib/unicore/lib/Nt/Nu.pl                       Unicode character database
-lib/unicore/lib/Nv/0.pl                        Unicode character database
-lib/unicore/lib/Nv/10000.pl                    Unicode character database
-lib/unicore/lib/Nv/1000.pl                     Unicode character database
-lib/unicore/lib/Nv/100.pl                      Unicode character database
-lib/unicore/lib/Nv/10.pl                       Unicode character database
-lib/unicore/lib/Nv/11.pl                       Unicode character database
-lib/unicore/lib/Nv/12.pl                       Unicode character database
-lib/unicore/lib/Nv/1_2.pl                      Unicode character database
-lib/unicore/lib/Nv/13.pl                       Unicode character database
-lib/unicore/lib/Nv/1_3.pl                      Unicode character database
-lib/unicore/lib/Nv/14.pl                       Unicode character database
-lib/unicore/lib/Nv/1_4.pl                      Unicode character database
-lib/unicore/lib/Nv/15.pl                       Unicode character database
-lib/unicore/lib/Nv/16.pl                       Unicode character database
-lib/unicore/lib/Nv/17.pl                       Unicode character database
-lib/unicore/lib/Nv/18.pl                       Unicode character database
-lib/unicore/lib/Nv/1_8.pl                      Unicode character database
-lib/unicore/lib/Nv/19.pl                       Unicode character database
-lib/unicore/lib/Nv/1.pl                        Unicode character database
-lib/unicore/lib/Nv/20.pl                       Unicode character database
-lib/unicore/lib/Nv/2_3.pl                      Unicode character database
-lib/unicore/lib/Nv/2.pl                        Unicode character database
-lib/unicore/lib/Nv/30.pl                       Unicode character database
-lib/unicore/lib/Nv/3_4.pl                      Unicode character database
-lib/unicore/lib/Nv/3.pl                        Unicode character database
-lib/unicore/lib/Nv/40.pl                       Unicode character database
-lib/unicore/lib/Nv/4.pl                        Unicode character database
-lib/unicore/lib/Nv/50000.pl                    Unicode character database
-lib/unicore/lib/Nv/5000.pl                     Unicode character database
-lib/unicore/lib/Nv/500.pl                      Unicode character database
-lib/unicore/lib/Nv/50.pl                       Unicode character database
-lib/unicore/lib/Nv/5.pl                        Unicode character database
-lib/unicore/lib/Nv/60.pl                       Unicode character database
-lib/unicore/lib/Nv/6.pl                        Unicode character database
-lib/unicore/lib/Nv/70.pl                       Unicode character database
-lib/unicore/lib/Nv/7.pl                        Unicode character database
-lib/unicore/lib/Nv/80.pl                       Unicode character database
-lib/unicore/lib/Nv/8.pl                        Unicode character database
-lib/unicore/lib/Nv/90.pl                       Unicode character database
-lib/unicore/lib/Nv/9.pl                        Unicode character database
-lib/unicore/lib/PatSyn/Y.pl                    Unicode character database
-lib/unicore/lib/PatWS/Y.pl                     Unicode character database
-lib/unicore/lib/Perl/Alnum.pl                  Unicode character database
-lib/unicore/lib/Perl/Assigned.pl                       Unicode character database
-lib/unicore/lib/Perl/Blank.pl                  Unicode character database
-lib/unicore/lib/Perl/Graph.pl                  Unicode character database
-lib/unicore/lib/Perl/_PerlAny.pl                       Unicode character database
-lib/unicore/lib/Perl/_PerlCh2.pl                       Unicode character database
-lib/unicore/lib/Perl/_PerlCha.pl                       Unicode character database
-lib/unicore/lib/Perl/_PerlFol.pl                       Unicode character database
-lib/unicore/lib/Perl/_PerlIDC.pl                       Unicode character database
-lib/unicore/lib/Perl/_PerlIDS.pl                       Unicode character database
-lib/unicore/lib/Perl/_PerlPr2.pl                       Unicode character database
-lib/unicore/lib/Perl/_PerlPro.pl                       Unicode character database
-lib/unicore/lib/Perl/_PerlQuo.pl                       Unicode character database
-lib/unicore/lib/Perl/PerlWord.pl                       Unicode character database
-lib/unicore/lib/Perl/PosixPun.pl                       Unicode character database
-lib/unicore/lib/Perl/Print.pl                  Unicode character database
-lib/unicore/lib/Perl/Word.pl                   Unicode character database
-lib/unicore/lib/Perl/_XExtend.pl                       Unicode character database
-lib/unicore/lib/Perl/XPosixPu.pl                       Unicode character database
-lib/unicore/lib/Perl/_XRegula.pl                       Unicode character database
-lib/unicore/lib/Perl/_XSpecia.pl                       Unicode character database
-lib/unicore/lib/QMark/Y.pl                     Unicode character database
-lib/unicore/lib/SB/AT.pl                       Unicode character database
-lib/unicore/lib/SB/CL.pl                       Unicode character database
-lib/unicore/lib/SB/EX.pl                       Unicode character database
-lib/unicore/lib/SB/FO.pl                       Unicode character database
-lib/unicore/lib/SB/LE.pl                       Unicode character database
-lib/unicore/lib/SB/LO.pl                       Unicode character database
-lib/unicore/lib/SB/NU.pl                       Unicode character database
-lib/unicore/lib/SB/SC.pl                       Unicode character database
-lib/unicore/lib/SB/Sp.pl                       Unicode character database
-lib/unicore/lib/SB/ST.pl                       Unicode character database
-lib/unicore/lib/SB/UP.pl                       Unicode character database
-lib/unicore/lib/SB/XX.pl                       Unicode character database
-lib/unicore/lib/Sc/Arab.pl                     Unicode character database
-lib/unicore/lib/Sc/Armn.pl                     Unicode character database
-lib/unicore/lib/Sc/Beng.pl                     Unicode character database
-lib/unicore/lib/Sc/Cham.pl                     Unicode character database
-lib/unicore/lib/Sc/Cprt.pl                     Unicode character database
-lib/unicore/lib/Sc/Cyrl.pl                     Unicode character database
-lib/unicore/lib/Sc/Deva.pl                     Unicode character database
-lib/unicore/lib/Sc/Ethi.pl                     Unicode character database
-lib/unicore/lib/Sc/Geor.pl                     Unicode character database
-lib/unicore/lib/Sc/Grek.pl                     Unicode character database
-lib/unicore/lib/Sc/Gujr.pl                     Unicode character database
-lib/unicore/lib/Sc/Guru.pl                     Unicode character database
-lib/unicore/lib/Sc/Hang.pl                     Unicode character database
-lib/unicore/lib/Sc/Han.pl                      Unicode character database
-lib/unicore/lib/Sc/Hebr.pl                     Unicode character database
-lib/unicore/lib/Sc/Hira.pl                     Unicode character database
-lib/unicore/lib/Sc/Kana.pl                     Unicode character database
-lib/unicore/lib/Sc/Khar.pl                     Unicode character database
-lib/unicore/lib/Sc/Khmr.pl                     Unicode character database
-lib/unicore/lib/Sc/Knda.pl                     Unicode character database
-lib/unicore/lib/Sc/Lana.pl                     Unicode character database
-lib/unicore/lib/Sc/Lao.pl                      Unicode character database
-lib/unicore/lib/Sc/Latn.pl                     Unicode character database
-lib/unicore/lib/Sc/Limb.pl                     Unicode character database
-lib/unicore/lib/Sc/Linb.pl                     Unicode character database
-lib/unicore/lib/Sc/Mlym.pl                     Unicode character database
-lib/unicore/lib/Sc/Mong.pl                     Unicode character database
-lib/unicore/lib/Sc/Orya.pl                     Unicode character database
-lib/unicore/lib/Sc/Sinh.pl                     Unicode character database
-lib/unicore/lib/Sc/Talu.pl                     Unicode character database
-lib/unicore/lib/Sc/Taml.pl                     Unicode character database
-lib/unicore/lib/Sc/Telu.pl                     Unicode character database
-lib/unicore/lib/Sc/Tibt.pl                     Unicode character database
-lib/unicore/lib/Scx/Arab.pl                    Unicode character database
-lib/unicore/lib/Scx/Armn.pl                    Unicode character database
-lib/unicore/lib/Scx/Beng.pl                    Unicode character database
-lib/unicore/lib/Scx/Bopo.pl                    Unicode character database
-lib/unicore/lib/Scx/Cakm.pl                    Unicode character database
-lib/unicore/lib/Scx/Cprt.pl                    Unicode character database
-lib/unicore/lib/Scx/Cyrl.pl                    Unicode character database
-lib/unicore/lib/Scx/Deva.pl                    Unicode character database
-lib/unicore/lib/Scx/Geor.pl                    Unicode character database
-lib/unicore/lib/Scx/Grek.pl                    Unicode character database
-lib/unicore/lib/Scx/Gujr.pl                    Unicode character database
-lib/unicore/lib/Scx/Guru.pl                    Unicode character database
-lib/unicore/lib/Scx/Hang.pl                    Unicode character database
-lib/unicore/lib/Scx/Han.pl                     Unicode character database
-lib/unicore/lib/Scx/Hira.pl                    Unicode character database
-lib/unicore/lib/Scx/Kana.pl                    Unicode character database
-lib/unicore/lib/Scx/Latn.pl                    Unicode character database
-lib/unicore/lib/Scx/Linb.pl                    Unicode character database
-lib/unicore/lib/Scx/Mong.pl                    Unicode character database
-lib/unicore/lib/Scx/Orya.pl                    Unicode character database
-lib/unicore/lib/Scx/Syrc.pl                    Unicode character database
-lib/unicore/lib/Scx/Tagb.pl                    Unicode character database
-lib/unicore/lib/Scx/Takr.pl                    Unicode character database
-lib/unicore/lib/Scx/Thaa.pl                    Unicode character database
-lib/unicore/lib/Scx/Yi.pl                      Unicode character database
-lib/unicore/lib/Scx/Zinh.pl                    Unicode character database
-lib/unicore/lib/Scx/Zyyy.pl                    Unicode character database
-lib/unicore/lib/Sc/Zinh.pl                     Unicode character database
-lib/unicore/lib/Sc/Zyyy.pl                     Unicode character database
-lib/unicore/lib/Sc/Zzzz.pl                     Unicode character database
-lib/unicore/lib/SD/Y.pl                        Unicode character database
-lib/unicore/lib/Space/Y.pl                     Unicode character database
-lib/unicore/lib/STerm/Y.pl                     Unicode character database
-lib/unicore/lib/Term/Y.pl                      Unicode character database
-lib/unicore/lib/UIdeo/Y.pl                     Unicode character database
-lib/unicore/lib/Upper/Y.pl                     Unicode character database
-lib/unicore/lib/WB/EX.pl                       Unicode character database
-lib/unicore/lib/WB/FO.pl                       Unicode character database
-lib/unicore/lib/WB/HL.pl                       Unicode character database
-lib/unicore/lib/WB/KA.pl                       Unicode character database
-lib/unicore/lib/WB/LE.pl                       Unicode character database
-lib/unicore/lib/WB/MB.pl                       Unicode character database
-lib/unicore/lib/WB/ML.pl                       Unicode character database
-lib/unicore/lib/WB/MN.pl                       Unicode character database
-lib/unicore/lib/WB/NU.pl                       Unicode character database
-lib/unicore/lib/WB/XX.pl                       Unicode character database
-lib/unicore/lib/XIDC/Y.pl                      Unicode character database
-lib/unicore/lib/XIDS/Y.pl                      Unicode character database
 lib/unicore/LineBreak.txt                      Unicode character database
 lib/unicore/Makefile                           Unicode character database
 lib/unicore/mktables                           Unicode character database generator
-lib/unicore/mktables.lst                       Unicode character database
 lib/unicore/NameAliases.txt                    Unicode character database
 lib/unicore/NamedSequences.txt                 Unicode character database
 lib/unicore/NamedSqProv.txt                    Unicode character database
-lib/unicore/Name.pl                    Unicode character database
-lib/unicore/Name.pm                    Unicode character database
 lib/unicore/NamesList.txt                      Unicode character database
-lib/unicore/NormalizationCorrections.txt                       Unicode character database
+lib/unicore/NormalizationCorrections.txt       Unicode character database
 lib/unicore/PropertyAliases.txt                        Unicode character database
 lib/unicore/PropList.txt                       Unicode character database
-lib/unicore/PropValueAliases.txt                       Unicode character database
+lib/unicore/PropValueAliases.txt               Unicode character database
 lib/unicore/README.perl                                Unicode character database
 lib/unicore/ReadMe.txt                         Unicode character database info
-lib/unicore/ScriptExtensions.txt                       Unicode character database
+lib/unicore/ScriptExtensions.txt               Unicode character database
 lib/unicore/Scripts.txt                                Unicode character database
 lib/unicore/SpecialCasing.txt                  Unicode character database
-lib/unicore/StandardizedVariants.txt                   Unicode character database
-lib/unicore/TestProp.pl                        Unicode character database
-lib/unicore/To/Age.pl                  Unicode character database
-lib/unicore/To/Bc.pl                   Unicode character database
-lib/unicore/To/Bmg.pl                  Unicode character database
-lib/unicore/To/Bpb.pl                  Unicode character database
-lib/unicore/To/Bpt.pl                  Unicode character database
-lib/unicore/To/Cf.pl                   Unicode character database
-lib/unicore/To/Digit.pl                        Unicode character database
-lib/unicore/To/Ea.pl                   Unicode character database
-lib/unicore/To/Fold.pl                 Unicode character database
-lib/unicore/To/GCB.pl                  Unicode character database
-lib/unicore/To/Gc.pl                   Unicode character database
-lib/unicore/To/Hst.pl                  Unicode character database
-lib/unicore/To/Isc.pl                  Unicode character database
-lib/unicore/To/Jg.pl                   Unicode character database
-lib/unicore/To/Jt.pl                   Unicode character database
-lib/unicore/To/Lb.pl                   Unicode character database
-lib/unicore/To/Lc.pl                   Unicode character database
-lib/unicore/To/Lower.pl                        Unicode character database
-lib/unicore/To/Na1.pl                  Unicode character database
-lib/unicore/To/NameAlia.pl                     Unicode character database
-lib/unicore/To/NFCQC.pl                        Unicode character database
-lib/unicore/To/NFDQC.pl                        Unicode character database
-lib/unicore/To/NFKCCF.pl                       Unicode character database
-lib/unicore/To/NFKCQC.pl                       Unicode character database
-lib/unicore/To/NFKDQC.pl                       Unicode character database
-lib/unicore/To/Nt.pl                   Unicode character database
-lib/unicore/To/Nv.pl                   Unicode character database
-lib/unicore/To/PerlDeci.pl                     Unicode character database
-lib/unicore/To/SB.pl                   Unicode character database
-lib/unicore/To/Sc.pl                   Unicode character database
-lib/unicore/To/Scx.pl                  Unicode character database
-lib/unicore/To/Tc.pl                   Unicode character database
-lib/unicore/To/Title.pl                        Unicode character database
-lib/unicore/To/Uc.pl                   Unicode character database
-lib/unicore/To/Upper.pl                        Unicode character database
-lib/unicore/To/WB.pl                   Unicode character database
-lib/unicore/UCD.pl                     Unicode character database
+lib/unicore/StandardizedVariants.txt           Unicode character database
 lib/unicore/UnicodeData.txt                    Unicode character database
 lib/unicore/version                            The version of the Unicode
 lib/UNIVERSAL.pm               Base class for ALL classes
@@ -4996,7 +4599,9 @@ pod/perl5163delta.pod             Perl changes in version 5.16.3
 pod/perl5180delta.pod          Perl changes in version 5.18.0
 pod/perl5181delta.pod          Perl changes in version 5.18.1
 pod/perl5182delta.pod          Perl changes in version 5.18.2
+pod/perl5184delta.pod          Perl changes in version 5.18.4
 pod/perl5200delta.pod          Perl changes in version 5.20.0
+pod/perl5201delta.pod          Perl changes in version 5.20.1
 pod/perl561delta.pod           Perl changes in version 5.6.1
 pod/perl56delta.pod            Perl changes in version 5.6
 pod/perl581delta.pod           Perl changes in version 5.8.1
@@ -5092,9 +4697,9 @@ pod/perltooc.pod
 pod/perltoot.pod               
 pod/perltrap.pod               Perl traps for the unwary
 pod/perlunicode.pod            Perl Unicode support
+pod/perlunicook.pod            Perl Unicode cookbook
 pod/perlunifaq.pod             Perl Unicode FAQ
 pod/perluniintro.pod           Perl Unicode introduction
-pod/perluniprops.pod           Index of Unicode properties in Perl
 pod/perlunitut.pod             Perl Unicode tutorial
 pod/perlutil.pod               utilities packaged with the Perl distribution
 pod/perlvar.pod                        Perl predefined variables
@@ -5831,6 +5436,7 @@ t/re/reg_nc_tie.t         Test the tied methods of Tie::Hash::NamedCapture
 t/re/reg_pmod.t                        See if regexp /p modifier works as expected
 t/re/reg_posixcc.t             See if posix character classes behave consistently
 t/re/re_tests                  Regular expressions for regexp.t
+t/re/rt122747.t                        Test rt122747 assert faile (requires DEBUGGING)
 t/re/rxcode.t                  See if /(?{ code })/ works
 t/re/subst_amp.t               See if $&-related substitution works
 t/re/subst.t                   See if substitution works
index f064737..a2e6034 100644 (file)
@@ -491,7 +491,7 @@ mini_obj = $(minindt_obj) $(MINIDTRACE_O)
 ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
 obj = $(ndt_obj) $(DTRACE_O)
 
-perltoc_pod_prereqs = extra.pods pod/perl5201delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod
+perltoc_pod_prereqs = extra.pods pod/perl5202delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
 generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
 generated_headers = uudmap.h bitcount.h mg_data.h
 
@@ -571,13 +571,12 @@ all: $(FIRSTMAKEFILE) $(MINIPERL_EXE) $(generated_pods) $(private) $(unidatafile
 
 .PHONY: all translators utilities
 
-# OpenBSD uses pre-generated lib/Config_git.pl and git_version.h files
 # Both git_version.h and lib/Config_git.pl are built
 # by make_patchnum.pl.
-#git_version.h: lib/Config_git.pl
-#
-#lib/Config_git.pl: $(MINIPERL_EXE) make_patchnum.pl
-#      $(MINIPERL) make_patchnum.pl
+git_version.h: lib/Config_git.pl
+
+lib/Config_git.pl: $(MINIPERL_EXE) make_patchnum.pl
+       $(MINIPERL) make_patchnum.pl
 
 # make sure that we recompile perl.c if the git version changes
 perl$(OBJ_EXT): git_version.h
@@ -729,14 +728,6 @@ case "$osname" in
 esac
 
 case "$osname" in
-openbsd)
-       $spitshell >>$Makefile <<!GROK!THIS!
-# When building Perl itself, link with the thread library,
-# so that extensions can use thread functions even though Perl
-# is not threaded
-CCDLFLAGS = $ccdlflags -lpthread
-!GROK!THIS!
-       ;;
 aix)
        $spitshell >>$Makefile <<!GROK!THIS!
 LIBS                   = $perllibs
@@ -753,11 +744,11 @@ CCDLFLAGS         = `echo $ccdlflags|sed -e 's@-bE:.*/perl\.exp@-bE:perl.exp@'`
 LIBPERL_NONSHR         = libperl_nonshr$(LIB_EXT)
 MINIPERL_NONSHR                = miniperl_nonshr$(EXE_EXT)
 
-#$(LIBPERL_NONSHR): $(obj)
-#      $(RMS) $(LIBPERL_NONSHR)
-#      $(AR) rcu $(LIBPERL_NONSHR) $(obj)
+$(LIBPERL_NONSHR): $(obj)
+       $(RMS) $(LIBPERL_NONSHR)
+       $(AR) rcu $(LIBPERL_NONSHR) $(obj)
 
-$(MINIPERL_NONSHR): miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT)  perlmini$(OBJ_EXT)
+$(MINIPERL_NONSHR): $(LIBPERL_NONSHR) miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT)  perlmini$(OBJ_EXT)
        $(CC) $(LDFLAGS) -o $(MINIPERL_NONSHR) miniperlmain$(OBJ_EXT) \
            opmini$(OBJ_EXT) perlmini$(OBJ_EXT) $(LIBPERL_NONSHR) $(LIBS)
 
@@ -841,33 +832,33 @@ $(MINIDTRACE_O): perldtrace.d $(minindt_obj) perlmini$(OBJ_EXT)
                ;;
     esac
        $spitshell >>$Makefile <<'!NO!SUBS!'
-#$(LIBPERL): $& $(obj) $(DYNALOADER) $(LIBPERLEXPORT)
-#!NO!SUBS!
-#      case "$useshrplib" in
-#      true)
-#              $spitshell >>$Makefile <<'!NO!SUBS!'
-#      rm -f $@
-#      $(LD) -o $@ $(SHRPLDFLAGS) $(obj) $(DYNALOADER) $(libs)
-#!NO!SUBS!
-#              case "$osname" in
-#              aix)
-#                      $spitshell >>$Makefile <<'!NO!SUBS!'
-#      rm -f libperl$(OBJ_EXT)
-#      mv $@ libperl$(OBJ_EXT)
-#      $(AR) qv $(LIBPERL) libperl$(OBJ_EXT)
-#!NO!SUBS!
-#                      ;;
-#              esac
-#              ;;
-#      *)
-#              $spitshell >>$Makefile <<'!NO!SUBS!'
-#      rm -f $(LIBPERL)
-#      $(AR) rcu $(LIBPERL) $(obj) $(DYNALOADER)
-#      @$(ranlib) $(LIBPERL)
-#!NO!SUBS!
-#              ;;
-#      esac
-#      $spitshell >>$Makefile <<'!NO!SUBS!'
+$(LIBPERL): $& $(obj) $(DYNALOADER) $(LIBPERLEXPORT)
+!NO!SUBS!
+       case "$useshrplib" in
+       true)
+               $spitshell >>$Makefile <<'!NO!SUBS!'
+       rm -f $@
+       $(LD) -o $@ $(SHRPLDFLAGS) $(obj) $(DYNALOADER) $(libs)
+!NO!SUBS!
+               case "$osname" in
+               aix)
+                       $spitshell >>$Makefile <<'!NO!SUBS!'
+       rm -f libperl$(OBJ_EXT)
+       mv $@ libperl$(OBJ_EXT)
+       $(AR) qv $(LIBPERL) libperl$(OBJ_EXT)
+!NO!SUBS!
+                       ;;
+               esac
+               ;;
+       *)
+               $spitshell >>$Makefile <<'!NO!SUBS!'
+       rm -f $(LIBPERL)
+       $(AR) rcu $(LIBPERL) $(obj) $(DYNALOADER)
+       @$(ranlib) $(LIBPERL)
+!NO!SUBS!
+               ;;
+       esac
+       $spitshell >>$Makefile <<'!NO!SUBS!'
 
 # How to build executables.
 
@@ -942,6 +933,10 @@ lib/buildcustomize.pl: \$& \$(mini_obj) write_buildcustomize.pl
                else
                        $spitshell >>$Makefile <<'!NO!SUBS!'
 lib/buildcustomize.pl: $& $(mini_obj) write_buildcustomize.pl
+       -@rm -f miniperl.xok
+       $(CC) $(CLDFLAGS) -o $(MINIPERL_EXE) \
+           $(mini_obj) $(libs)
+       $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '<?>' || sh -c 'echo >&2 Failed to build miniperl.  Please run make minitest; exit 1'
        $(MINIPERL) -f write_buildcustomize.pl
 !NO!SUBS!
                fi
@@ -1002,7 +997,10 @@ $(CONFIGPOD): config.sh $(MINIPERL_EXE) configpm Porting/Glossary lib/Config_git
 unidatafiles $(unidatafiles) pod/perluniprops.pod: uni.data
 
 uni.data: $(MINIPERL_EXE) $(CONFIGPM) lib/unicore/mktables $(nonxs_ext)
-       touch uni.data
+       $(MINIPERL) lib/unicore/mktables -C lib/unicore -P pod -maketest -makelist -p
+#      Commented out so always runs, mktables looks at far more files than we
+#      can in this makefile to decide if needs to run or not
+#      touch uni.data
 
 # $(PERL_EXE) and ext because pod_lib.pl needs Digest::MD5
 # But also this ensures that all extensions are built before we try to scan
@@ -1018,9 +1016,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc
 pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
        $(MINIPERL) pod/perlmodlib.PL -q
 
-pod/perl5201delta.pod: pod/perldelta.pod
-       $(RMS) pod/perl5201delta.pod
-       $(LNS) perldelta.pod pod/perl5201delta.pod
+pod/perl5202delta.pod: pod/perldelta.pod
+       $(RMS) pod/perl5202delta.pod
+       $(LNS) perldelta.pod pod/perl5202delta.pod
 
 extra.pods: $(MINIPERL_EXE)
        -@test ! -f extra.pods || rm -f `cat extra.pods`
@@ -1265,13 +1263,14 @@ _mopup:
        -rm -f *perl.xok
        -rm -f cygwin.c libperl*.def libperl*.dll cygperl*.dll *.exe.stackdump
        -rm -f $(PERL_EXE) $(MINIPERL_EXE) $(LIBPERL) libperl.* microperl
-       -rm -f $(DTRACE_H)
+       -rm -f config.arch config.over $(DTRACE_H)
 
 # Do not 'make _tidy' directly.
 _tidy:
        -cd pod; $(LDLIBPTH) $(MAKE) clean
        -cd utils; $(LDLIBPTH) $(MAKE) clean
        -cd x2p; $(LDLIBPTH) $(MAKE) clean
+       -rm -f lib/Config_git.pl git_version.h
        -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \
        $(MINIPERL) make_ext.pl --target=clean $$x MAKE=$(MAKE) ; \
        done
@@ -1325,7 +1324,7 @@ _cleaner2:
        -rmdir lib/TAP/Formatter lib/TAP lib/Sys/Syslog lib/Sys lib/Search
        -rmdir lib/Scalar lib/Pod/Text lib/Pod/Simple lib/Pod/Perldoc
        -rmdir lib/PerlIO/via lib/PerlIO lib/Perl lib/Parse/CPAN lib/Parse
-       -rmdir lib/Params lib/Package lib/OpenBSD lib/Net/FTP lib/Module/Load
+       -rmdir lib/Params lib/Package lib/Net/FTP lib/Module/Load
        -rmdir lib/Module/CoreList lib/Module/Build/Platform lib/Module/Build
        -rmdir lib/Module lib/Memoize lib/Math/BigInt lib/Math/BigFloat
        -rmdir lib/Math lib/MIME lib/Locale/Maketext lib/Locale/Codes
index 7f2ab6d..5ad00a8 100644 (file)
@@ -285,7 +285,6 @@ d_isinf='undef'
 d_isnan='undef'
 d_isnanl='undef'
 d_killpg='undef'
-d_lc_monetary_2008='undef'
 d_lchown='undef'
 d_ldbl_dig='define'
 d_libm_lib_version='undef'
index 8941179..8ad84f9 100644 (file)
@@ -290,6 +290,18 @@ use File::Glob qw(:case);
                 t/yaml_code.yml
                 ),
         ],
+        # Waiting to be merged upstream: see pull request #83
+        'CUSTOMIZED'   => [
+            qw( lib/CPAN/Author.pm
+                lib/CPAN/CacheMgr.pm
+                lib/CPAN/FTP.pm
+                lib/CPAN/HTTP/Client.pm
+                lib/CPAN/HandleConfig.pm
+                lib/CPAN/Index.pm
+                lib/CPAN/LWP/UserAgent.pm
+                lib/CPAN/Mirrors.pm
+                ),
+        ],
     },
 
     # Note: When updating CPAN-Meta the META.* files will need to be regenerated
@@ -948,6 +960,8 @@ use File::Glob qw(:case);
     'Pod::Parser' => {
         'DISTRIBUTION' => 'MAREKR/Pod-Parser-1.62.tar.gz',
         'FILES'        => q[cpan/Pod-Parser],
+        # Waiting to be merged upstream: see CPAN RT#101847
+        'CUSTOMIZED'   => [ qw( lib/Pod/PlainText.pm) ],
     },
 
     'Pod::Perldoc' => {
@@ -1493,9 +1507,6 @@ use File::Glob qw(:case);
                 lib/vmsish.{pm,t}
                 ],
     },
-    'openbsd' => {
-        'FILES'      => q[lib/Config_git.pl],
-    },
 );
 
 # legacy CPAN flag
index 61cc8ad..a9e84aa 100644 (file)
@@ -41,10 +41,10 @@ aphostname='/bin/hostname'
 api_revision='5'
 api_subversion='0'
 api_version='20'
-api_versionstring='5.20.1'
+api_versionstring='5.20.2'
 ar='ar'
-archlib='/pro/lib/perl5/5.20.1/i686-linux-64int'
-archlibexp='/pro/lib/perl5/5.20.1/i686-linux-64int'
+archlib='/pro/lib/perl5/5.20.2/i686-linux-64int'
+archlibexp='/pro/lib/perl5/5.20.2/i686-linux-64int'
 archname64='64int'
 archname='i686-linux-64int'
 archobjs=''
@@ -305,7 +305,6 @@ d_isinf='define'
 d_isnan='define'
 d_isnanl='define'
 d_killpg='define'
-d_lc_monetary_2008='undef'
 d_lchown='define'
 d_ldbl_dig='define'
 d_libm_lib_version='define'
@@ -746,7 +745,7 @@ incpath=''
 incpth='/usr/lib/gcc/i586-suse-linux/4.8/include /usr/local/include /usr/lib/gcc/i586-suse-linux/4.8/include-fixed /usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/include /usr/include'
 inews=''
 initialinstalllocation='/pro/bin'
-installarchlib='/pro/lib/perl5/5.20.1/i686-linux-64int'
+installarchlib='/pro/lib/perl5/5.20.2/i686-linux-64int'
 installbin='/pro/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -754,13 +753,13 @@ installman1dir='/pro/local/man/man1'
 installman3dir='/pro/local/man/man3'
 installprefix='/pro'
 installprefixexp='/pro'
-installprivlib='/pro/lib/perl5/5.20.1'
+installprivlib='/pro/lib/perl5/5.20.2'
 installscript='/pro/bin'
-installsitearch='/pro/lib/perl5/site_perl/5.20.1/i686-linux-64int'
+installsitearch='/pro/lib/perl5/site_perl/5.20.2/i686-linux-64int'
 installsitebin='/pro/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='/pro/lib/perl5/site_perl/5.20.1'
+installsitelib='/pro/lib/perl5/site_perl/5.20.2'
 installsiteman1dir='/pro/local/man/man1'
 installsiteman3dir='/pro/local/man/man3'
 installsitescript='/pro/bin'
@@ -884,7 +883,7 @@ perl_patchlevel=''
 perl_static_inline='static __inline__'
 perladmin='hmbrand@cpan.org'
 perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/pro/bin/perl5.20.1'
+perlpath='/pro/bin/perl5.20.2'
 pg='pg'
 phostname='hostname'
 pidtype='pid_t'
@@ -893,8 +892,8 @@ pmake=''
 pr=''
 prefix='/pro'
 prefixexp='/pro'
-privlib='/pro/lib/perl5/5.20.1'
-privlibexp='/pro/lib/perl5/5.20.1'
+privlib='/pro/lib/perl5/5.20.2'
+privlibexp='/pro/lib/perl5/5.20.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -960,17 +959,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
 sig_size='69'
 signal_t='void'
-sitearch='/pro/lib/perl5/site_perl/5.20.1/i686-linux-64int'
-sitearchexp='/pro/lib/perl5/site_perl/5.20.1/i686-linux-64int'
+sitearch='/pro/lib/perl5/site_perl/5.20.2/i686-linux-64int'
+sitearchexp='/pro/lib/perl5/site_perl/5.20.2/i686-linux-64int'
 sitebin='/pro/bin'
 sitebinexp='/pro/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/pro/lib/perl5/site_perl/5.20.1'
+sitelib='/pro/lib/perl5/site_perl/5.20.2'
 sitelib_stem='/pro/lib/perl5/site_perl'
-sitelibexp='/pro/lib/perl5/site_perl/5.20.1'
+sitelibexp='/pro/lib/perl5/site_perl/5.20.2'
 siteman1dir='/pro/local/man/man1'
 siteman1direxp='/pro/local/man/man1'
 siteman3dir='/pro/local/man/man3'
@@ -996,7 +995,7 @@ src='.'
 ssizetype='ssize_t'
 st_ino_sign='1'
 st_ino_size='8'
-startperl='#!/pro/bin/perl5.20.1'
+startperl='#!/pro/bin/perl5.20.2'
 startsh='#!/bin/sh'
 static_ext=' '
 stdchar='char'
@@ -1009,7 +1008,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/usr/share/man/man1'
 sysroot=''
 tail=''
@@ -1106,8 +1105,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.20.1'
-version_patchlevel_string='version 20 subversion 1'
+version='5.20.2'
+version_patchlevel_string='version 20 subversion 2'
 versiononly='define'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1117,7 +1116,7 @@ zcat=''
 zip='zip'
 PERL_REVISION=5
 PERL_VERSION=20
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=20
 PERL_API_SUBVERSION=0
index d1e17c7..e7eb91b 100644 (file)
  *     This symbol contains the ~name expanded version of ARCHLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "/pro/lib/perl5/5.20.1/i686-linux-64int-ld"            /**/
-#define ARCHLIB_EXP "/pro/lib/perl5/5.20.1/i686-linux-64int-ld"                /**/
+#define ARCHLIB "/pro/lib/perl5/5.20.2/i686-linux-64int-ld"            /**/
+#define ARCHLIB_EXP "/pro/lib/perl5/5.20.2/i686-linux-64int-ld"                /**/
 
 /* ARCHNAME:
  *     This symbol holds a string representing the architecture name.
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/pro/lib/perl5/5.20.1"                /**/
-#define PRIVLIB_EXP "/pro/lib/perl5/5.20.1"            /**/
+#define PRIVLIB "/pro/lib/perl5/5.20.2"                /**/
+#define PRIVLIB_EXP "/pro/lib/perl5/5.20.2"            /**/
 
 /* PTRSIZE:
  *     This symbol contains the size of a pointer, so that the C preprocessor
  *     This symbol contains the ~name expanded version of SITEARCH, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/pro/lib/perl5/site_perl/5.20.1/i686-linux-64int-ld"         /**/
-#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.20.1/i686-linux-64int-ld"             /**/
+#define SITEARCH "/pro/lib/perl5/site_perl/5.20.2/i686-linux-64int-ld"         /**/
+#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.20.2/i686-linux-64int-ld"             /**/
 
 /* SITELIB:
  *     This symbol contains the name of the private library for this package.
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/pro/lib/perl5/site_perl/5.20.1"              /**/
-#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.20.1"          /**/
+#define SITELIB "/pro/lib/perl5/site_perl/5.20.2"              /**/
+#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.20.2"          /**/
 #define SITELIB_STEM "/pro/lib/perl5/site_perl"                /**/
 
 /* SSize_t:
  *     script to make sure (one hopes) that it runs with perl and not
  *     some shell.
  */
-#define STARTPERL "#!/pro/bin/perl5.20.1"              /**/
+#define STARTPERL "#!/pro/bin/perl5.20.2"              /**/
 
 /* HAS_STDIO_STREAM_ARRAY:
  *     This symbol, if defined, tells that there is an array
index 40fda82..a8c8fb0 100644 (file)
@@ -540,9 +540,9 @@ Here's how I generate a new patch.  I'll use the hypothetical
 5.004_07 to 5.004_08 patch as an example.
 
        # unpack perl5.004_07/
-       gzip -d -c perl5.004_07.tar.gz | tar -xf -
+       gzip -d -c perl5.004_07.tar.gz | tar -xof -
        # unpack perl5.004_08/
-       gzip -d -c perl5.004_08.tar.gz | tar -xf -
+       gzip -d -c perl5.004_08.tar.gz | tar -xof -
        makepatch perl5.004_07 perl5.004_08 > perl5.004_08.pat
 
 Makepatch will automatically generate appropriate B<rm> commands to remove
index 804d41d..e69b0ec 100644 (file)
@@ -1,6 +1,6 @@
 Perl is Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
-2013, 2014 by Larry Wall and others.  All rights reserved.
+2013, 2014, 2015 by Larry Wall and others.  All rights reserved.
 
 
 
index 146c965..86324c1 100644 (file)
@@ -619,7 +619,7 @@ C<set PERLLIB_PREFIX> in F<Config.sys>, see L<"PERLLIB_PREFIX">.
 
 =item Additional Perl modules
 
-  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.20.1/
+  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.20.2/
 
 Same remark as above applies.  Additionally, if this directory is not
 one of directories on @INC (and @INC is influenced by C<PERLLIB_PREFIX>), you
index e0e0d91..365705f 100644 (file)
@@ -142,11 +142,11 @@ You may need to set up a foreign symbol for the unpacking utility of
 choice.  Once you have done so, use a command like the following to
 unpack the archive:
 
-    vmstar -xvf perl-5^.20^.1.tar
+    vmstar -xvf perl-5^.20^.2.tar
 
 Then set default to the top-level source directory like so:
 
-    set default [.perl-5^.20^.1]
+    set default [.perl-5^.20^.2]
 
 and proceed with configuration as described in the next section.
 
index e4d457a..d697459 100644 (file)
@@ -120,10 +120,20 @@ build usually works in this circumstance, but some tests will fail.
 
 =item Microsoft Visual C++
 
-The nmake that comes with Visual C++ will suffice for building.
-You will need to run the VCVARS32.BAT file, usually found somewhere
-like C:\Program Files\Microsoft Visual Studio\VC98\Bin.
-This will set your build environment.
+The nmake that comes with Visual C++ will suffice for building. Visual C
+requires that certain things be set up in the console before Visual C will
+sucessfully run. To make a console box be able to run the C compiler, you will
+need to beforehand, run the C<vcvars32.bat> file to compile for x86-32 and for
+x86-64 C<vcvarsall.bat x64> or C<vcvarsamd64.bat>. On a typical install of a
+Microsoft C compiler product, these batch files will already be in your C<PATH>
+environment variable so you may just type them without an absolute path into
+your console. If you need to find the absolute path to the batch file, it is
+usually found somewhere like C:\Program Files\Microsoft Visual Studio\VC98\Bin.
+With some newer Micrsoft C products (released after ~2004), the installer will
+put a shortcut in the start menu to launch a new console window with the
+console already set up for your target architecture (x86-32 or x86-64 or IA64).
+With the newer compilers, you may also use the older batch files if you choose
+so.
 
 You can also use dmake to build using Visual C++; provided, however,
 you set OSRELEASE to "microsft" (or whatever the directory name
@@ -387,6 +397,13 @@ perl520.dll at the perl toplevel, and various other extension dll's
 under the lib\auto directory.  If the build fails for any reason, make
 sure you have done the previous steps correctly.
 
+If you are advanced enough with building C code, here is a suggestion to speed
+up building perl, and the later C<make test>. Try to keep your PATH enviromental
+variable with the least number of folders possible (remember to keep your C
+compiler's folders there). C<C:\WINDOWS\system32> or C<C:\WINNT\system32>
+depending on your OS version should be first folder in PATH, since "cmd.exe"
+is the most commonly launched program during the build and later testing.
+
 =back
 
 =head2 Testing Perl on Windows
@@ -588,7 +605,7 @@ Look in L<http://www.cpan.org/> for more information on CPAN.
 
 Note that not all of the extensions available from CPAN may work
 in the Windows environment; you should check the information at
-L<http://testers.cpan.org/> before investing too much effort into
+L<http://www.cpantesters.org/> before investing too much effort into
 porting modules that don't readily build.
 
 Most extensions (whether they require a C compiler or not) can
@@ -632,7 +649,8 @@ edit Config.pm to fix it.
 
 If a module implements XSUBs, you will need one of the supported
 C compilers.  You must make sure you have set up the environment for
-the compiler for command-line compilation.
+the compiler for command-line compilation before running C<perl Makefile.PL>
+or any invocation of make.
 
 If a module does not build for some reason, look carefully for
 why it failed, and report problems to the module author.  If
@@ -846,6 +864,14 @@ updating it). The build does complete with
 
 but that may be just luck. Other AntiVirus software may have similar issues.
 
+A git GUI shell extension for Windows such as TortoiseGit will cause the build
+and later C<make test> to run much slower since every file is checked for its
+git status as soon as it is created and/or modified. TortoiseGit doesn't cause
+any test failures or build problems unlike the antivirus software described
+above, but it does cause similar slowness. It is suggested to use Task Manager
+to look for background processes which use high CPU amounts during the building
+process.
+
 Some of the built-in functions do not act exactly as documented in
 L<perlfunc>, and a few are not implemented at all.  To avoid
 surprises, particularly if you have had prior exposure to Perl
@@ -915,6 +941,6 @@ Win9x support was added in 5.6 (Benjamin Stuhl).
 
 Support for 64-bit Windows added in 5.8 (ActiveState Corp).
 
-Last updated: 22 October 2013
+Last updated: 07 October 2014
 
 =cut
index 5bdd95e..fd46735 100644 (file)
@@ -261,12 +261,6 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #$d_locconv HAS_LOCALECONV     /**/
 
-/* HAS_LC_MONETARY_2008:
- *     This symbol, if defined, indicates that the localeconv routine is
- *     available and has the additional members added in POSIX 1003.1-2008.
- */
-#$d_lc_monetary_2008 HAS_LC_MONETARY_2008      /**/
-
 /* HAS_LOCKF:
  *     This symbol, if defined, indicates that the lockf routine is
  *     available to do file locking.
index 39743d6..d5bf5f2 100644 (file)
@@ -87,11 +87,6 @@ $header_files =~ s/(?=.{64})   # If line is still overlength
                   (.{1,64})\  # Split at the last convenient space
                  /$1\n              /gx;
 
-# libpaths that should be truncated after the first path element
-my %Libpathtrunc = map {($_,$_)}
-                   qw(archlib archlibexp privlib privlibexp sitearch sitearchexp
-                      sitelib sitelibexp);
-
 # allowed opts as well as specifies default and initial values
 my %Allowed_Opts = (
     'glossary' => 1,  # --no-glossary  - no glossary file inclusion,
@@ -257,9 +252,6 @@ my %seen_quotes;
     $in_v = $val !~ /$quote\n/;
     next if $in_v;
 
-    # XXX - should use PERLLIB_SEP, not hard-code ':'
-    $val =~ s/^([^:]+).*${quote}\w*$/$1${quote}/ if $Libpathtrunc{$name};
-
     s,/,::,g if $Extensions{$name};
 
     $val =~ s/$quote\n?\z//;
index 49b14f0..34f3309 100644 (file)
@@ -5407,7 +5407,6 @@ $   d_wctomb="define"
 $   i_locale="define"
 $   i_langinfo="define"
 $   d_locconv="define"
-$   d_lc_monetary_2008="define"
 $   d_nl_langinfo="define"
 $   d_setlocale="define"
 $   vms_cc_type="decc"
@@ -5428,7 +5427,6 @@ $   d_wctomb="undef"
 $   i_locale="undef"
 $   i_langinfo="undef"
 $   d_locconv="undef"
-$   d_lc_monetary_2008="undef"
 $   d_nl_langinfo="undef"
 $   d_setlocale="undef"
 $ ENDIF
@@ -6101,7 +6099,6 @@ $ WC "d_link='" + d_link + "'"
 $ WC "d_llseek='undef'"
 $ WC "d_localtime64='undef'"
 $ WC "d_locconv='" + d_locconv + "'"
-$ WC "d_lc_monetary_2008='" + d_lc_monetary_2008 + "'"
 $ WC "d_lockf='undef'"
 $ WC "d_longdbl='" + d_longdbl + "'"
 $ WC "d_longlong='" + d_longlong + "'"
index 9d7e5ed..47aebd6 100644 (file)
@@ -35,8 +35,7 @@ sub MY::libscan
     my $path = shift;
 
     return undef
-        if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ ||
-           $path =~ /(~|\.bak|_bak)$/ ||
+        if $path =~ /(~|\.bak|_bak)$/ ||
            $path =~ /\..*\.sw(o|p)$/  ||
            $path =~ /\B\.svn\b/;
 
index 9d7e5ed..47aebd6 100644 (file)
@@ -35,8 +35,7 @@ sub MY::libscan
     my $path = shift;
 
     return undef
-        if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ ||
-           $path =~ /(~|\.bak|_bak)$/ ||
+        if $path =~ /(~|\.bak|_bak)$/ ||
            $path =~ /\..*\.sw(o|p)$/  ||
            $path =~ /\B\.svn\b/;
 
index e3696a4..f3b58f7 100644 (file)
@@ -39,8 +39,6 @@ extern "C" {
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
-#include <sys/types.h>
-#include <md5.h>
 #ifdef __cplusplus
 }
 #endif
@@ -90,6 +88,61 @@ static MAGIC *THX_sv_magicext(pTHX_ SV *sv, SV *obj, int type,
 # define SvPVbyte(sv, lp) (sv_utf8_downgrade((sv), 0), SvPV((sv), (lp)))
 #endif
 
+/* Perl does not guarantee that U32 is exactly 32 bits.  Some system
+ * has no integral type with exactly 32 bits.  For instance, A Cray has
+ * short, int and long all at 64 bits so we need to apply this macro
+ * to reduce U32 values to 32 bits at appropriate places. If U32
+ * really does have 32 bits then this is a no-op.
+ */
+#if BYTEORDER > 0x4321 || defined(TRUNCATE_U32)
+  #define TO32(x)    ((x) &  0xFFFFffff)
+  #define TRUNC32(x) ((x) &= 0xFFFFffff)
+#else
+  #define TO32(x)    (x)
+  #define TRUNC32(x) /*nothing*/
+#endif
+
+/* The MD5 algorithm is defined in terms of little endian 32-bit
+ * values.  The following macros (and functions) allow us to convert
+ * between native integers and such values.
+ */
+#undef BYTESWAP
+#ifndef U32_ALIGNMENT_REQUIRED
+ #if BYTEORDER == 0x1234      /* 32-bit little endian */
+  #define BYTESWAP(x) (x)     /* no-op */
+
+ #elif BYTEORDER == 0x4321    /* 32-bit big endian */
+  #define BYTESWAP(x)  ((((x)&0xFF)<<24)       \
+                       |(((x)>>24)&0xFF)       \
+                       |(((x)&0x0000FF00)<<8)  \
+                       |(((x)&0x00FF0000)>>8)  )
+ #endif
+#endif
+
+#ifndef BYTESWAP
+static void u2s(U32 u, U8* s)
+{
+    *s++ = (U8)(u         & 0xFF);
+    *s++ = (U8)((u >>  8) & 0xFF);
+    *s++ = (U8)((u >> 16) & 0xFF);
+    *s   = (U8)((u >> 24) & 0xFF);
+}
+
+#define s2u(s,u) ((u) =  (U32)(*s)            |  \
+                        ((U32)(*(s+1)) << 8)  |  \
+                        ((U32)(*(s+2)) << 16) |  \
+                        ((U32)(*(s+3)) << 24))
+#endif
+
+/* This structure keeps the current state of algorithm.
+ */
+typedef struct {
+  U32 A, B, C, D;  /* current digest */
+  U32 bytes_low;   /* counts bytes in message */
+  U32 bytes_high;  /* turn it into a 64-bit counter */
+  U8 buffer[128];  /* collect complete 64 byte blocks */
+} MD5_CTX;
+
 #if defined(USE_ITHREADS) && defined(MGf_DUP)
 STATIC int dup_md5_ctx(pTHX_ MAGIC *mg, CLONE_PARAMS *params)
 {
@@ -123,6 +176,325 @@ STATIC MGVTBL vtbl_md5 = {
 #endif
 };
 
+
+/* Padding is added at the end of the message in order to fill a
+ * complete 64 byte block (- 8 bytes for the message length).  The
+ * padding is also the reason the buffer in MD5_CTX have to be
+ * 128 bytes.
+ */
+static const unsigned char PADDING[64] = {
+  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/* Constants for MD5Transform routine.
+ */
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+/* F, G, H and I are basic MD5 functions.
+ */
+#define F(x, y, z) ((((x) & ((y) ^ (z))) ^ (z)))
+#define G(x, y, z) F(z, x, y)
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#define ROTATE_LEFT(x, n) (((x) << (n) | ((x) >> (32-(n)))))
+
+/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+ * Rotation is separate from addition to prevent recomputation.
+ */
+#define FF(a, b, c, d, s, ac)                    \
+ (a) += F ((b), (c), (d)) + (NEXTx) + (U32)(ac); \
+ TRUNC32((a));                                   \
+ (a) = ROTATE_LEFT ((a), (s));                   \
+ (a) += (b);                                     \
+ TRUNC32((a));
+
+#define GG(a, b, c, d, x, s, ac)                 \
+ (a) += G ((b), (c), (d)) + X[x] + (U32)(ac);    \
+ TRUNC32((a));                                   \
+ (a) = ROTATE_LEFT ((a), (s));                   \
+ (a) += (b);                                     \
+ TRUNC32((a));
+
+#define HH(a, b, c, d, x, s, ac)                 \
+ (a) += H ((b), (c), (d)) + X[x] + (U32)(ac);    \
+ TRUNC32((a));                                   \
+ (a) = ROTATE_LEFT ((a), (s));                   \
+ (a) += (b);                                     \
+ TRUNC32((a));
+
+#define II(a, b, c, d, x, s, ac)                 \
+ (a) += I ((b), (c), (d)) + X[x] + (U32)(ac);    \
+ TRUNC32((a));                                   \
+ (a) = ROTATE_LEFT ((a), (s));                   \
+ (a) += (b);                                     \
+ TRUNC32((a));
+
+
+static void
+MD5Init(MD5_CTX *ctx)
+{
+  /* Start state */
+  ctx->A = 0x67452301;
+  ctx->B = 0xefcdab89;
+  ctx->C = 0x98badcfe;
+  ctx->D = 0x10325476;
+
+  /* message length */
+  ctx->bytes_low = ctx->bytes_high = 0;
+}
+
+
+static void
+MD5Transform(MD5_CTX* ctx, const U8* buf, STRLEN blocks)
+{
+#ifdef MD5_DEBUG
+    static int tcount = 0;
+#endif
+
+    U32 A = ctx->A;
+    U32 B = ctx->B;
+    U32 C = ctx->C;
+    U32 D = ctx->D;
+
+#ifndef U32_ALIGNMENT_REQUIRED
+    const U32 *x = (U32*)buf;  /* really just type casting */
+#endif
+
+    do {
+       U32 a = A;
+       U32 b = B;
+       U32 c = C;
+       U32 d = D;
+
+#if BYTEORDER == 0x1234 && !defined(U32_ALIGNMENT_REQUIRED)
+       const U32 *X = x;
+        #define NEXTx  (*x++)
+#else
+       U32 X[16];      /* converted values, used in round 2-4 */
+       U32 *uptr = X;
+       U32 tmp;
+ #ifdef BYTESWAP
+        #define NEXTx  (tmp=*x++, *uptr++ = BYTESWAP(tmp))
+ #else
+        #define NEXTx  (s2u(buf,tmp), buf += 4, *uptr++ = tmp)
+ #endif
+#endif
+
+#ifdef MD5_DEBUG
+       if (buf == ctx->buffer)
+           fprintf(stderr,"%5d: Transform ctx->buffer", ++tcount);
+       else 
+           fprintf(stderr,"%5d: Transform %p (%d)", ++tcount, buf, blocks);
+
+       {
+           int i;
+           fprintf(stderr,"[");
+           for (i = 0; i < 16; i++) {
+               fprintf(stderr,"%x,", x[i]);
+           }
+           fprintf(stderr,"]\n");
+       }
+#endif
+
+       /* Round 1 */
+       FF (a, b, c, d, S11, 0xd76aa478); /* 1 */
+       FF (d, a, b, c, S12, 0xe8c7b756); /* 2 */
+       FF (c, d, a, b, S13, 0x242070db); /* 3 */
+       FF (b, c, d, a, S14, 0xc1bdceee); /* 4 */
+       FF (a, b, c, d, S11, 0xf57c0faf); /* 5 */
+       FF (d, a, b, c, S12, 0x4787c62a); /* 6 */
+       FF (c, d, a, b, S13, 0xa8304613); /* 7 */
+       FF (b, c, d, a, S14, 0xfd469501); /* 8 */
+       FF (a, b, c, d, S11, 0x698098d8); /* 9 */
+       FF (d, a, b, c, S12, 0x8b44f7af); /* 10 */
+       FF (c, d, a, b, S13, 0xffff5bb1); /* 11 */
+       FF (b, c, d, a, S14, 0x895cd7be); /* 12 */
+       FF (a, b, c, d, S11, 0x6b901122); /* 13 */
+       FF (d, a, b, c, S12, 0xfd987193); /* 14 */
+       FF (c, d, a, b, S13, 0xa679438e); /* 15 */
+       FF (b, c, d, a, S14, 0x49b40821); /* 16 */
+
+       /* Round 2 */
+       GG (a, b, c, d,  1, S21, 0xf61e2562); /* 17 */
+       GG (d, a, b, c,  6, S22, 0xc040b340); /* 18 */
+       GG (c, d, a, b, 11, S23, 0x265e5a51); /* 19 */
+       GG (b, c, d, a,  0, S24, 0xe9b6c7aa); /* 20 */
+       GG (a, b, c, d,  5, S21, 0xd62f105d); /* 21 */
+       GG (d, a, b, c, 10, S22,  0x2441453); /* 22 */
+       GG (c, d, a, b, 15, S23, 0xd8a1e681); /* 23 */
+       GG (b, c, d, a,  4, S24, 0xe7d3fbc8); /* 24 */
+       GG (a, b, c, d,  9, S21, 0x21e1cde6); /* 25 */
+       GG (d, a, b, c, 14, S22, 0xc33707d6); /* 26 */
+       GG (c, d, a, b,  3, S23, 0xf4d50d87); /* 27 */
+       GG (b, c, d, a,  8, S24, 0x455a14ed); /* 28 */
+       GG (a, b, c, d, 13, S21, 0xa9e3e905); /* 29 */
+       GG (d, a, b, c,  2, S22, 0xfcefa3f8); /* 30 */
+       GG (c, d, a, b,  7, S23, 0x676f02d9); /* 31 */
+       GG (b, c, d, a, 12, S24, 0x8d2a4c8a); /* 32 */
+
+       /* Round 3 */
+       HH (a, b, c, d,  5, S31, 0xfffa3942); /* 33 */
+       HH (d, a, b, c,  8, S32, 0x8771f681); /* 34 */
+       HH (c, d, a, b, 11, S33, 0x6d9d6122); /* 35 */
+       HH (b, c, d, a, 14, S34, 0xfde5380c); /* 36 */
+       HH (a, b, c, d,  1, S31, 0xa4beea44); /* 37 */
+       HH (d, a, b, c,  4, S32, 0x4bdecfa9); /* 38 */
+       HH (c, d, a, b,  7, S33, 0xf6bb4b60); /* 39 */
+       HH (b, c, d, a, 10, S34, 0xbebfbc70); /* 40 */
+       HH (a, b, c, d, 13, S31, 0x289b7ec6); /* 41 */
+       HH (d, a, b, c,  0, S32, 0xeaa127fa); /* 42 */
+       HH (c, d, a, b,  3, S33, 0xd4ef3085); /* 43 */
+       HH (b, c, d, a,  6, S34,  0x4881d05); /* 44 */
+       HH (a, b, c, d,  9, S31, 0xd9d4d039); /* 45 */
+       HH (d, a, b, c, 12, S32, 0xe6db99e5); /* 46 */
+       HH (c, d, a, b, 15, S33, 0x1fa27cf8); /* 47 */
+       HH (b, c, d, a,  2, S34, 0xc4ac5665); /* 48 */
+
+       /* Round 4 */
+       II (a, b, c, d,  0, S41, 0xf4292244); /* 49 */
+       II (d, a, b, c,  7, S42, 0x432aff97); /* 50 */
+       II (c, d, a, b, 14, S43, 0xab9423a7); /* 51 */
+       II (b, c, d, a,  5, S44, 0xfc93a039); /* 52 */
+       II (a, b, c, d, 12, S41, 0x655b59c3); /* 53 */
+       II (d, a, b, c,  3, S42, 0x8f0ccc92); /* 54 */
+       II (c, d, a, b, 10, S43, 0xffeff47d); /* 55 */
+       II (b, c, d, a,  1, S44, 0x85845dd1); /* 56 */
+       II (a, b, c, d,  8, S41, 0x6fa87e4f); /* 57 */
+       II (d, a, b, c, 15, S42, 0xfe2ce6e0); /* 58 */
+       II (c, d, a, b,  6, S43, 0xa3014314); /* 59 */
+       II (b, c, d, a, 13, S44, 0x4e0811a1); /* 60 */
+       II (a, b, c, d,  4, S41, 0xf7537e82); /* 61 */
+       II (d, a, b, c, 11, S42, 0xbd3af235); /* 62 */
+       II (c, d, a, b,  2, S43, 0x2ad7d2bb); /* 63 */
+       II (b, c, d, a,  9, S44, 0xeb86d391); /* 64 */
+
+       A += a;  TRUNC32(A);
+       B += b;  TRUNC32(B);
+       C += c;  TRUNC32(C);
+       D += d;  TRUNC32(D);
+
+    } while (--blocks);
+    ctx->A = A;
+    ctx->B = B;
+    ctx->C = C;
+    ctx->D = D;
+}
+
+
+#ifdef MD5_DEBUG
+static char*
+ctx_dump(MD5_CTX* ctx)
+{
+    static char buf[1024];
+    sprintf(buf, "{A=%x,B=%x,C=%x,D=%x,%d,%d(%d)}",
+           ctx->A, ctx->B, ctx->C, ctx->D,
+           ctx->bytes_low, ctx->bytes_high, (ctx->bytes_low&0x3F));
+    return buf;
+}
+#endif
+
+
+static void
+MD5Update(MD5_CTX* ctx, const U8* buf, STRLEN len)
+{
+    STRLEN blocks;
+    STRLEN fill = ctx->bytes_low & 0x3F;
+
+#ifdef MD5_DEBUG  
+    static int ucount = 0;
+    fprintf(stderr,"%5i: Update(%s, %p, %d)\n", ++ucount, ctx_dump(ctx),
+                                               buf, len);
+#endif
+
+    ctx->bytes_low += len;
+    if (ctx->bytes_low < len) /* wrap around */
+       ctx->bytes_high++;
+
+    if (fill) {
+       STRLEN missing = 64 - fill;
+       if (len < missing) {
+           Copy(buf, ctx->buffer + fill, len, U8);
+           return;
+       }
+       Copy(buf, ctx->buffer + fill, missing, U8);
+       MD5Transform(ctx, ctx->buffer, 1);
+       buf += missing;
+       len -= missing;
+    }
+
+    blocks = len >> 6;
+    if (blocks)
+       MD5Transform(ctx, buf, blocks);
+    if ( (len &= 0x3F)) {
+       Copy(buf + (blocks << 6), ctx->buffer, len, U8);
+    }
+}
+
+
+static void
+MD5Final(U8* digest, MD5_CTX *ctx)
+{
+    STRLEN fill = ctx->bytes_low & 0x3F;
+    STRLEN padlen = (fill < 56 ? 56 : 120) - fill;
+    U32 bits_low, bits_high;
+#ifdef MD5_DEBUG
+    fprintf(stderr,"       Final:  %s\n", ctx_dump(ctx));
+#endif
+    Copy(PADDING, ctx->buffer + fill, padlen, U8);
+    fill += padlen;
+
+    bits_low = ctx->bytes_low << 3;
+    bits_high = (ctx->bytes_high << 3) | (ctx->bytes_low  >> 29);
+#ifdef BYTESWAP
+    *(U32*)(ctx->buffer + fill) = BYTESWAP(bits_low);    fill += 4;
+    *(U32*)(ctx->buffer + fill) = BYTESWAP(bits_high);   fill += 4;
+#else
+    u2s(bits_low,  ctx->buffer + fill);   fill += 4;
+    u2s(bits_high, ctx->buffer + fill);   fill += 4;
+#endif
+
+    MD5Transform(ctx, ctx->buffer, fill >> 6);
+#ifdef MD5_DEBUG
+    fprintf(stderr,"       Result: %s\n", ctx_dump(ctx));
+#endif
+
+#ifdef BYTESWAP
+    *(U32*)digest = BYTESWAP(ctx->A);  digest += 4;
+    *(U32*)digest = BYTESWAP(ctx->B);  digest += 4;
+    *(U32*)digest = BYTESWAP(ctx->C);  digest += 4;
+    *(U32*)digest = BYTESWAP(ctx->D);
+#else
+    u2s(ctx->A, digest);
+    u2s(ctx->B, digest+4);
+    u2s(ctx->C, digest+8);
+    u2s(ctx->D, digest+12);
+#endif
+}
+
+#ifndef INT2PTR
+#define INT2PTR(any,d) (any)(d)
+#endif
+
 static MD5_CTX* get_md5_ctx(pTHX_ SV* sv)
 {
     MAGIC *mg;
@@ -302,7 +674,7 @@ addfile(self, fh)
        InputStream fh
     PREINIT:
        MD5_CTX* context = get_md5_ctx(aTHX_ self);
-       STRLEN fill = (context->count >> 3) & (MD5_BLOCK_LENGTH - 1);
+       STRLEN fill = context->bytes_low & 0x3F;
 #ifdef USE_HEAP_INSTEAD_OF_STACK
        unsigned char* buffer;
 #else
index 4a45421..60d2847 100755 (executable)
@@ -21,7 +21,7 @@ EOT
     # This is the output of: 'md5sum README MD5.xs rfc1321.txt'
     $EXPECT = <<EOT;
 2f93400875dbb56f36691d5f69f3eba5  README
-1d2a7c4f7a6180a7f3369d703ffe7cd0  MD5.xs
+f908acbcf6bd32042f282b0deed61264  MD5.xs
 754b9db19f79dbc4992f7166eb0f37ce  rfc1321.txt
 EOT
 }
index da9e0f7..4140432 100644 (file)
@@ -911,7 +911,7 @@ OTHERLDFLAGS = '.$ld_opt.$otherldflags.'
 INST_DYNAMIC_DEP = '.$inst_dynamic_dep.'
 INST_DYNAMIC_FIX = '.$ld_fix.'
 
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
+$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)
 ');
     if ($armaybe ne ':'){
        $ldfrom = 'tmp$(LIB_EXT)';
@@ -963,7 +963,7 @@ MAKE
 
     push @m, <<'MAKE';
        $(CHMOD) $(PERM_RWX) $@
-       $(NOECHO) $(RM_RF) $(INST_BOOT)
+       $(NOECHO) $(RM_RF) $(BOOTSTRAP)
        - $(CP_NONEMPTY) $(BOOTSTRAP) $(INST_BOOT) $(PERM_RW)
 MAKE
 
index 9d7e5ed..47aebd6 100644 (file)
@@ -35,8 +35,7 @@ sub MY::libscan
     my $path = shift;
 
     return undef
-        if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ ||
-           $path =~ /(~|\.bak|_bak)$/ ||
+        if $path =~ /(~|\.bak|_bak)$/ ||
            $path =~ /\..*\.sw(o|p)$/  ||
            $path =~ /\B\.svn\b/;
 
index 72dbee8..a77bb38 100644 (file)
@@ -190,7 +190,7 @@ __END__
 
 =head1 NAME
 
-NEXT - Provide a pseudo-class NEXT (et al) that allows method redispatch
+NEXT.pm - Provide a pseudo-class NEXT (et al) that allows method redispatch
 
 
 =head1 SYNOPSIS
index 67bca0a..3db4d90 100644 (file)
@@ -29,7 +29,7 @@ use vars qw(@ISA %ESCAPES $VERSION);
 # by Pod::Usage.
 @ISA = qw(Pod::Select);
 
-$VERSION = '2.06';
+$VERSION = '2.07';
 
 BEGIN {
    if ($] < 5.006) {
@@ -596,11 +596,6 @@ sub pod2text {
     }
 }
 
-sub begin_pod {\r
-    my $self = shift;\r
-    $$self{EXCLUDE} = 0;\r
-    $$self{VERBATIM} = 0;\r
-}\r
 
 ############################################################################
 # Module return value and documentation
index 3f2f983..07d9567 100644 (file)
@@ -1508,7 +1508,7 @@ C<extract_tagged> returns the complete text up to the point of failure.
 If the string is "PARA", C<extract_tagged> returns only the first paragraph
 after the tag (up to the first line that is either empty or contains
 only whitespace characters).
-If the string is "", the default behaviour (i.e. failure) is reinstated.
+If the string is "", the the default behaviour (i.e. failure) is reinstated.
 
 For example, suppose the start tag "/para" introduces a paragraph, which then
 continues until the next "/endpara" tag or until another "/para" tag is
index df6270e..2472139 100755 (executable)
@@ -6,12 +6,13 @@ use File::Temp qw(tempfile);
 use IO::Handle;
 use File::Spec;
 use FindBin qw($Bin);
+use constant TRUNCATE_ME => File::Spec->catfile($Bin,'truncate_me');
 
-my ($truncate_status, $tmpfh, $tmpfile);
+my ($truncate_status, $tmpfh);
 
 # Some systems have a screwy tempfile. We don't run our tests there.
 eval {
-    ($tmpfh, $tmpfile) = tempfile();
+    $tmpfh = tempfile();
 };
 
 if ($@ or !defined $tmpfh) {
@@ -79,7 +80,7 @@ isa_ok($@, 'autodie::exception', "Truncating unopened file (TRUNCATE_FH)");
 # wrong with our tests, or autodie...
 {
     use autodie qw(open);
-    open(TRUNCATE_FH, '+<', $tmpfile);
+    open(TRUNCATE_FH, '+<', TRUNCATE_ME);
 }
 
 # Now try truncating the filehandle. This should succeed.
index c1e5afc..72ca9ff 100644 (file)
@@ -857,9 +857,7 @@ sub devise_title {
                 $cut = $i + 1;
                 $cut++ if ($dirs[$i + 1] && $dirs[$i + 1] eq 'lib');
                 last;
-            } elsif ($dirs[$i] eq 'lib' && $dirs[$i + 1] && $dirs[0] eq 'ext') {
-                $cut = $i + 1;
-           }
+            }
         }
         if ($cut > 0) {
             splice (@dirs, 0, $cut);
index f2ad660..d16103e 100644 (file)
@@ -236,7 +236,7 @@ Perl_deb_stack_all(pTHX)
                PerlIO_printf(Perl_debug_log, "\n");
            else {
 
-               /* Find the current context's stack range by searching
+               /* Find the the current context's stack range by searching
                 * forward for any higher contexts using this stack; failing
                 * that, it will be equal to the size of the stack for old
                 * stacks, or PL_stack_sp for the current stack
index 588c727..a084712 100644 (file)
@@ -1421,9 +1421,7 @@ modify it under the same terms as Perl itself.
 
 =head1 VERSION
 
-Version 2.151  (March 7 2014)
-
-Plus fix for CVS-2014-4330
+Version 2.151_01  (January 8 2015)
 
 =head1 SEE ALSO
 
index a7bb124..49937be 100644 (file)
@@ -28,8 +28,7 @@ static I32 DD_dump (pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval,
                    SV *pad, SV *xpad, SV *apad, SV *sep, SV *pair,
                    SV *freezer, SV *toaster,
                    I32 purity, I32 deepcopy, I32 quotekeys, SV *bless,
-                   I32 maxdepth, SV *sortkeys, int use_sparse_seen_hash, I32 useqq,
-            IV maxrecurse);
+                   I32 maxdepth, SV *sortkeys, int use_sparse_seen_hash, I32 useqq, IV maxrecurse);
 
 #ifndef HvNAME_get
 #define HvNAME_get HvNAME
@@ -679,7 +678,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv,
                        postav, levelp, indent, pad, xpad, apad, sep, pair,
                        freezer, toaster, purity, deepcopy, quotekeys, bless,
-                       maxdepth, sortkeys, use_sparse_seen_hash, useqq, maxrecurse);
+                       maxdepth, sortkeys, use_sparse_seen_hash, useqq,
+                       maxrecurse);
                sv_catpvn(retval, ")}", 2);
            }                                                /* plain */
            else {
@@ -687,7 +687,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv,
                        postav, levelp, indent, pad, xpad, apad, sep, pair,
                        freezer, toaster, purity, deepcopy, quotekeys, bless,
-                       maxdepth, sortkeys, use_sparse_seen_hash, useqq, maxrecurse);
+                       maxdepth, sortkeys, use_sparse_seen_hash, useqq,
+                       maxrecurse);
            }
            SvREFCNT_dec(namesv);
        }
@@ -699,7 +700,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
            DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv,
                    postav, levelp,     indent, pad, xpad, apad, sep, pair,
                    freezer, toaster, purity, deepcopy, quotekeys, bless,
-                   maxdepth, sortkeys, use_sparse_seen_hash, useqq, maxrecurse);
+                   maxdepth, sortkeys, use_sparse_seen_hash, useqq,
+                   maxrecurse);
            SvREFCNT_dec(namesv);
        }
        else if (realtype == SVt_PVAV) {
@@ -772,7 +774,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                DD_dump(aTHX_ elem, iname, ilen, retval, seenhv, postav,
                        levelp, indent, pad, xpad, apad, sep, pair,
                        freezer, toaster, purity, deepcopy, quotekeys, bless,
-                       maxdepth, sortkeys, use_sparse_seen_hash, useqq, maxrecurse);
+                       maxdepth, sortkeys, use_sparse_seen_hash,
+                       useqq, maxrecurse);
                if (ix < ixmax)
                    sv_catpvn(retval, ",", 1);
            }
@@ -975,7 +978,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                DD_dump(aTHX_ hval, SvPVX_const(sname), SvCUR(sname), retval, seenhv,
                        postav, levelp, indent, pad, xpad, newapad, sep, pair,
                        freezer, toaster, purity, deepcopy, quotekeys, bless,
-                       maxdepth, sortkeys, use_sparse_seen_hash, useqq, maxrecurse);
+                       maxdepth, sortkeys, use_sparse_seen_hash, useqq,
+                       maxrecurse);
                SvREFCNT_dec(sname);
                Safefree(nkey_buffer);
                if (indent >= 2)
@@ -1184,7 +1188,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
                                seenhv, postav, &nlevel, indent, pad, xpad,
                                newapad, sep, pair, freezer, toaster, purity,
                                deepcopy, quotekeys, bless, maxdepth, 
-                               sortkeys, use_sparse_seen_hash, useqq, maxrecurse);
+                               sortkeys, use_sparse_seen_hash, useqq,
+                               maxrecurse);
                        SvREFCNT_dec(e);
                    }
                }
@@ -1442,8 +1447,8 @@ Data_Dumper_Dumpxs(href, ...)
                    DD_dump(aTHX_ val, SvPVX_const(name), SvCUR(name), valstr, seenhv,
                            postav, &level, indent, pad, xpad, newapad, sep, pair,
                            freezer, toaster, purity, deepcopy, quotekeys,
-                           bless, maxdepth, sortkeys, use_sparse_seen_hash, useqq,
-                maxrecurse);
+                           bless, maxdepth, sortkeys, use_sparse_seen_hash,
+                           useqq, maxrecurse);
                    SPAGAIN;
                
                    if (indent >= 2 && !terse)
index 8fb3492..ae384fd 100644 (file)
@@ -3,6 +3,7 @@ use strict;
 use warnings;
 use Exporter;
 use File::Spec;
+use lib qw( lib );
 use ExtUtils::ParseXS::Constants ();
 
 our $VERSION = '3.24';
index a2aabc1..eff27b9 100644 (file)
@@ -2677,12 +2677,11 @@ sub objectify {
             next;
         }
 
-#        # Don't do anything with undefs.
-#
-#        unless (defined($a[$i])) {
-#            next;
-#        }
-        $a[$i] //= 0;
+        # Don't do anything with undefs.
+
+        unless (defined($a[$i])) {
+            next;
+        }
 
         # Perl scalars are fed to the appropriate constructor.
 
diff --git a/gnu/usr.bin/perl/dist/Module-CoreList/t/corevers.t b/gnu/usr.bin/perl/dist/Module-CoreList/t/corevers.t
deleted file mode 100644 (file)
index 09d5d72..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#!perl -w
-use strict;
-use Test::More;
-
-plan skip_all => 'This is perl core-only test' unless $ENV{PERL_CORE};
-plan skip_all => 'Special case v5.21.1 because rjbs' if sprintf("v%vd", $^V) eq 'v5.21.1';
-
-my @modules = qw[
-  Module::CoreList
-  Module::CoreList::Utils
-  Module::CoreList::TieHashDelta
-];
-
-plan tests => scalar @modules;
-
-foreach my $mod ( @modules ) {
-  eval "require $mod";
-  my $vers = eval $mod->VERSION;
-  ok( !( $vers < $] || $vers > $] ), "$mod version should match perl version in core" )
-    or diag("$mod $vers doesn't match $]");
-}
index e3c1441..1dd95e3 100755 (executable)
@@ -83,7 +83,7 @@ use threads::shared;
         print "# Looping for $busycount iterations should take about 0.025s\n";
     }
 
-    my $TIMEOUT = 600;
+    my $TIMEOUT = 60;
 
     my $mutex = 1;
     share($mutex);
index a0f83b6..76c3bc0 100644 (file)
@@ -64,8 +64,8 @@ sub MY::static {
 
     return "
 $object : \$(FIRST_MAKEFILE) \$(OBJECT)
-       #\$(RM_RF) $object
-       #\$(CP) \$(OBJECT) $object
+       \$(RM_RF) $object
+       \$(CP) \$(OBJECT) $object
 
 static :: $object
 ";
index 96d30de..cb513ab 100644 (file)
@@ -170,8 +170,8 @@ dl_load_file(filename, flags=0)
     char pathbuf[PATH_MAX + 2];
     if (*filename != '/' && strchr(filename, '/')) {
        if (getcwd(pathbuf, PATH_MAX - strlen(filename))) {
-           my_strlcat(pathbuf, "/", sizeof(pathbuf));
-           my_strlcat(pathbuf, filename, sizeof(pathbuf));
+           strcat(pathbuf, "/");
+           strcat(pathbuf, filename);
            filename = pathbuf;
        }
     }
index a48c039..a8adbf0 100644 (file)
@@ -1,7 +1,7 @@
 use ExtUtils::MakeMaker;
 WriteMakefile(
     NAME       => 'NDBM_File',
-    #LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"],
+    LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"],
     XSPROTOARG => '-noprototypes',             # XXX remove later?
     VERSION_FROM => 'NDBM_File.pm',
     INC => ($^O eq "MacOS" ? "-i ::::db:include" : "")
index 307d5bf..de0300c 100644 (file)
@@ -309,22 +309,14 @@ const struct lconv_offset lconv_strings[] = {
 };
 
 const struct lconv_offset lconv_integers[] = {
-    {"int_frac_digits",     offsetof(struct lconv, int_frac_digits)},
-    {"frac_digits",         offsetof(struct lconv, frac_digits)},
-    {"p_cs_precedes",       offsetof(struct lconv, p_cs_precedes)},
-    {"p_sep_by_space",      offsetof(struct lconv, p_sep_by_space)},
-    {"n_cs_precedes",       offsetof(struct lconv, n_cs_precedes)},
-    {"n_sep_by_space",      offsetof(struct lconv, n_sep_by_space)},
-    {"p_sign_posn",         offsetof(struct lconv, p_sign_posn)},
-    {"n_sign_posn",         offsetof(struct lconv, n_sign_posn)},
-#ifdef HAS_LC_MONETARY_2008
-    {"int_p_cs_precedes",   offsetof(struct lconv, int_p_cs_precedes)},
-    {"int_p_sep_by_space",  offsetof(struct lconv, int_p_sep_by_space)},
-    {"int_n_cs_precedes",   offsetof(struct lconv, int_n_cs_precedes)},
-    {"int_n_sep_by_space",  offsetof(struct lconv, int_n_sep_by_space)},
-    {"int_p_sign_posn",     offsetof(struct lconv, int_p_sign_posn)},
-    {"int_n_sign_posn",     offsetof(struct lconv, int_n_sign_posn)},
-#endif
+    {"int_frac_digits",   offsetof(struct lconv, int_frac_digits)},
+    {"frac_digits",       offsetof(struct lconv, frac_digits)},
+    {"p_cs_precedes",     offsetof(struct lconv, p_cs_precedes)},
+    {"p_sep_by_space",    offsetof(struct lconv, p_sep_by_space)},
+    {"n_cs_precedes",     offsetof(struct lconv, n_cs_precedes)},
+    {"n_sep_by_space",    offsetof(struct lconv, n_sep_by_space)},
+    {"p_sign_posn",       offsetof(struct lconv, p_sign_posn)},
+    {"n_sign_posn",       offsetof(struct lconv, n_sign_posn)},
     {NULL, 0}
 };
 
index f72beb6..94a5f9d 100644 (file)
@@ -848,12 +848,6 @@ Here is how to query the database for the B<de> (Deutsch or German) locale.
                n_sep_by_space
                p_sign_posn
                n_sign_posn
-               int_p_cs_precedes
-               int_p_sep_by_space
-               int_n_cs_precedes
-               int_n_sep_by_space
-               int_p_sign_posn
-               int_n_sign_posn
        ))
        {
                printf qq(%s: "%s",\n),
index cd46485..c2e4abe 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
     }
 }
 
-use Test::More tests => 115;
+use Test::More tests => 109;
 
 use POSIX qw(fcntl_h signal_h limits_h _exit getcwd open read strftime write
             errno localeconv dup dup2 lseek access);
@@ -343,24 +343,8 @@ SKIP: {
        }
     }
 
-    my @lconv = qw(
-        int_frac_digits frac_digits
-        p_cs_precedes   p_sep_by_space
-        n_cs_precedes   n_sep_by_space
-        p_sign_posn     n_sign_posn
-    );
-
-    SKIP: {
-        skip('No HAS_LC_MONETARY_2008', 6) unless $Config{d_lc_monetary_2008};
-
-        push @lconv, qw(
-            int_p_cs_precedes int_p_sep_by_space
-            int_n_cs_precedes int_n_sep_by_space
-            int_p_sign_posn   int_n_sign_posn
-        );
-    }
-        
-    foreach (@lconv) {
+    foreach (qw(int_frac_digits frac_digits p_cs_precedes p_sep_by_space
+               n_cs_precedes n_sep_by_space p_sign_posn n_sign_posn)) {
     SKIP: {
            skip("localeconv has no result for $_", 1)
                unless exists $conv->{$_};
index 85bbdb4..482b2c8 100644 (file)
@@ -56,7 +56,7 @@ ok 'f r e l p' =~ /f r e l p/,
 SKIP: {
   if (
       !$Config::Config{d_setlocale}
-   || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
+   || $Config::Config{ccflags} =~ /\bD?NO_LOCALE\b/
   ) {
     skip "no locale support", 7
   }
index e402f6b..ce68478 100644 (file)
@@ -1202,7 +1202,7 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
      * use that, but for lack of anything better we will use the sub's
      * original package to look up $AUTOLOAD.
      */
-    varstash = GvSTASH(CvGV(cv));
+    varstash = CvNAMED(cv) ? CvSTASH(cv) : GvSTASH(CvGV(cv));
     vargv = *(GV**)hv_fetch(varstash, S_autoload, S_autolen, TRUE);
     ENTER;
 
@@ -2544,7 +2544,7 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing)
           numifying instead of C's "+0". */
        gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0);
         cv = 0;
-        if (gv && (cv = GvCV(gv))) {
+        if (gv && (cv = GvCV(gv)) && CvGV(cv)) {
            if(GvNAMELEN(CvGV(cv)) == 3 && strEQ(GvNAME(CvGV(cv)), "nil")){
              const char * const hvname = HvNAME_get(GvSTASH(CvGV(cv)));
              if (hvname && HEK_LEN(HvNAME_HEK(GvSTASH(CvGV(cv)))) == 8
index 9856961..1897d6b 100644 (file)
@@ -528,7 +528,6 @@ gcc)   ;;
        # -readonly_strings moves string constants into read-only section
        #  which hopefully means that modifying them leads into segmentation
        #  faults.
-       #
        for i in -trapuv -readonly_strings
        do
                case "$ccflags" in
@@ -539,6 +538,25 @@ gcc)   ;;
        ;;
 esac
 
+# In Tru64 several slightly incompatible socket APIs are supported,
+# which one applies is chosen with a set of defines:
+# -D_SOCKADDR_LEN enables 4.4BSD and IPv6 interfaces
+# -D_POSIX_PII_SOCKET enables socklen_t instead of size_t
+for i in -D_SOCKADDR_LEN -D_POSIX_PII_SOCKET
+do
+    case "$ccflags" in
+    *$i*) ;;
+    *) ccflags="$ccflags $i" ;;
+    esac
+done
+# For OSF/1 3.2, however, defining _SOCKADDR_LEN would be
+# a bad idea since it breaks send() and recv().
+case "$ccflags" in
+*DEC_OSF1_3_X*SOCKADDR_LEN*)
+ ccflags=`echo " $ccflags " | sed -e 's/ -D_SOCKADDR_LEN / /'`
+ ;;
+esac
+
 #
 # Unset temporary variables no more needed.
 #
index e36d643..9714611 100644 (file)
@@ -102,7 +102,12 @@ $cat > UU/cc.cbu <<'EOCCBU'
 # has prompted the user for the C compiler to use.
 
 case "$cc" in
-*gcc*) ;;
+*gcc*)
+  # With cc we can use -c99, but with gcc we just can't use C99 headers.
+  # (There is a hidden define __c99 that cc uses, but trying to use that
+  # with gcc leads into magnificent explosions.)
+  i_stdint='undef'
+  ;;
 *) ccversion=`cc -version 2>&1` ;;
 esac
 
@@ -237,6 +242,7 @@ case "$cc" in
 
        # Warnings to turn off because the source code hasn't
        # been cleaned up enough yet to satisfy the IRIX cc.
+       # 1047: macro redefinitions (in IRIX' own system headers!)
        # 1184: "=" is used where where "==" may have been intended.
        # 1552: The variable "foobar" is set but never used.
        woff=1184,1552
@@ -284,6 +290,9 @@ case "$cc" in
                '-O') optimize='-O3 -OPT:Olimit=0:space=ON' ;;
                *) ;;
             esac
+           # Perl source has just grown too chummy with c99
+           # (headerwise, not code-wise: we use <stdint.h> and such)
+           ccflags="$ccflags -c99"
             ;;
        *6.2*)                        # Ragnarok 6.2
             ccflags="$ccflags -D_BSD_TYPES -D_BSD_TIME -woff $woff"
@@ -351,6 +360,26 @@ case "$ccversion" in
     ;;
 esac
 
+# There is a devious bug in the MIPSpro 7.4 compiler:
+# memcmp() is an inlined intrinsic, and "sometimes" it gets compiled wrong.
+#
+# In Perl the most obvious hit is regcomp.c:S_regpposixcc(),
+# causing bus errors when compiling the POSIX character classes like
+# /[[:digit:]], which means that miniperl cannot build perl.
+# (That is almost only the one victim: one single test in re/pat fails, also.)
+#
+# Therefore let's turn the inline intrinsics off and let the normal
+# libc versions be used instead. This may cause a performance hit
+# but a little slower is better than zero speed.
+#
+# MIPSpro C 7.4.1m is supposed to have fixed this bug.
+#
+case "$ccversion" in
+"MIPSpro Compilers: Version 7.4")
+  ccflags="$ccflags -U__INLINE_INTRINSICS"
+  ;;
+esac
+
 EOCCBU
 
 # End of cc.cbu callback unit. - Allen
@@ -645,3 +674,8 @@ EOCBU
 # Helmut Jarausch reports that Perl's malloc is rather unusable
 # with IRIX, and SGI confirms the problem.
 usemymalloc=${usemymalloc:-false}
+
+# Configure finds <fcntl.h> but then thinks it can use <sys/file.h>
+# instead; in IRIX this is not true because the prototype of fcntl()
+# requires explicit include of <fcntl.h>
+i_fcntl=define
index 17a4ff6..6f0dd74 100644 (file)
@@ -89,7 +89,9 @@ case "$osvers" in
        ;;
 esac
 case "$osvers" in
-0.9*|1.*|2.*|3.*|4.*|5.*|6.*)
+0.8*)
+       ;;
+*)
        d_getprotoent_r="$undef"
        d_getprotobyname_r="$undef"
        d_getprotobynumber_r="$undef"
@@ -100,6 +102,12 @@ case "$osvers" in
        d_getservbyport_r="$undef"
        d_setservent_r="$undef"
        d_endservent_r="$undef"
+       d_gethostbyname_r="$undef"
+       d_gethostbyaddr2_r="$undef"
+       d_gethostbyaddr_r="$undef"
+       d_sethostent_r="$undef"
+       d_gethostent_r="$undef"
+       d_endhostent_r="$undef"
        d_getprotoent_r_proto="0"
        d_getprotobyname_r_proto="0"
        d_getprotobynumber_r_proto="0"
@@ -110,6 +118,12 @@ case "$osvers" in
        d_getservbyport_r_proto="0"
        d_setservent_r_proto="0"
        d_endservent_r_proto="0"
+       d_gethostbyname_r_proto="0"
+       d_gethostbyaddr2_r_proto="0"
+       d_gethostbyaddr_r_proto="0"
+       d_sethostent_r_proto="0"
+       d_endhostent_r_proto="0"
+       d_gethostent_r_proto="0"
        ;;
 esac
 
index a81b82a..2c24c23 100644 (file)
@@ -8,8 +8,12 @@
 #      ./Configure -des -Dopenbsd_distribution=defined
 #
 
-# OpenBSD has a better malloc than perl...
-test "$usemymalloc" || usemymalloc='n'
+# In OpenBSD > 3.7, use perl's malloc [perl #75742]
+case "$osvers" in
+3.[89]*|[4-9]*)
+    test "$usemymalloc" || usemymalloc=y
+    ;;
+esac
 
 # malloc wrap works
 case "$usemallocwrap" in
@@ -101,13 +105,6 @@ m88k-3.4)
    ;;
 esac
 
-# Special per-arch specific ccflags
-case "${ARCH}-${osvers}" in
-    vax-*)
-    ccflags="-DUSE_PERL_ATOF=0 $ccflags"
-    ;;
-esac
-
 # This script UU/usethreads.cbu will get 'called-back' by Configure 
 # after it has prompted the user for whether to use threads.
 cat > UU/usethreads.cbu <<'EOCBU'
@@ -147,16 +144,13 @@ case "$openbsd_distribution" in
        siteprefix='/usr/local'
        siteprefixexp='/usr/local'
        # Ports installs non-std libs in /usr/local/lib so look there too
-       locincpth=''
-       loclibpth=''
+       locincpth='/usr/local/include'
+       loclibpth='/usr/local/lib'
        # Link perl with shared libperl
-       if [ "$usedl" = "$define" -a -r $src/shlib_version ]; then
+       if [ "$usedl" = "$define" -a -r shlib_version ]; then
                useshrplib=true
-               libperl=`. $src/shlib_version; echo libperl.so.${major}.${minor}`
+               libperl=`. ./shlib_version; echo libperl.so.${major}.${minor}`
        fi
-
-       # Don't support DBM not in base
-       i_gdbm='undef'
        ;;
 esac
 
index 7c20ba8..594f045 100644 (file)
@@ -146,7 +146,7 @@ if ((-e "testcompile") && (defined($ENV{'COMPILE'}))) {
 }
 
 # Exclude nonxs extensions that are not architecture dependent
-my @nonxs = grep(!/^(Errno|IO\/Compress)$/, split(' ', $Config{'nonxs_ext'}));
+my @nonxs = grep(!/^Errno$/, split(' ', $Config{'nonxs_ext'}));
 
 my @ext_dirs = qw(cpan dist ext);
 foreach my $ext_dir (@ext_dirs) {
@@ -192,7 +192,7 @@ my $installprivlib = "$opts{destdir}$Config{installprivlib}";
 my $installarchlib = "$opts{destdir}$Config{installarchlib}";
 my $installsitelib = "$opts{destdir}$Config{installsitelib}";
 my $installsitearch = "$opts{destdir}$Config{installsitearch}";
-my $installman1dir = "none";
+my $installman1dir = "$opts{destdir}$Config{installman1dir}";
 my $man1ext = $Config{man1ext};
 my $libperl = $Config{libperl};
 # Shared library and dynamic loading suffixes.
@@ -246,9 +246,9 @@ else {
     }
 }
 
-#-f 't/rantests'               || $Is_W32
-#                      || warn "WARNING: You've never run 'make test' or",
-#                              " some tests failed! (Installing anyway.)\n";
+-f 't/rantests'                || $Is_W32
+                       || warn "WARNING: You've never run 'make test' or",
+                               " some tests failed! (Installing anyway.)\n";
 } #if (!$Is_NetWare)
 
 # This will be used to store the packlist
@@ -260,7 +260,7 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) {
     if ($Is_Cygwin) {
        $perldll = $libperl;
     } else {
-       $perldll = 'perl5'.$Config{patchlevel}.'.'.$dlext;
+       $perldll = 'perl5'.$Config{patchlevel}.'.'.$so;
     }
 
     if ($dlsrc ne "dl_none.xs") {
@@ -274,10 +274,6 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) {
     $packlist->{"$Config{installbin}/$perldll"} = { type => 'file' };
 } # if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin)
 
-# Get the install command and flags from the environment
-my @installcmd = $ENV{"INSTALL"} || "install";
-push(@installcmd, $ENV{"INSTALL_COPY"} || "-c");
-
 # First we install the version-numbered executables.
 
 if ($Is_VMS) {
@@ -301,7 +297,10 @@ if ($Is_VMS) {
 }
 elsif ($^O ne 'dos') {
     if (!$Is_NetWare) {
-       install("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext", "0755");
+       safe_unlink("$installbin/$perl_verbase$ver$exe_ext");
+       copy("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext");
+       strip("$installbin/$perl_verbase$ver$exe_ext");
+       chmod(0755, "$installbin/$perl_verbase$ver$exe_ext");
     }
     else {
        # If installing onto a NetWare server
@@ -373,9 +372,7 @@ elsif ($Is_Cygwin) { # On Cygwin symlink it to CORE to make Makefile happy
     )
 } else {
     # [als] hard-coded 'libperl' name... not good!
-    #@corefiles = <*.h libperl*.* perl*$Config{lib_ext}>;
-    @corefiles = <*.h *.inc perl*$Config{lib_ext}>;
-    push(@corefiles,<libperl*.*>) unless defined($ENV{"NOLIBINSTALL"});
+    @corefiles = <*.h libperl*.* perl*$Config{lib_ext}>;
 
     # AIX needs perl.exp installed as well.
     push(@corefiles,'perl.exp') if $^O eq 'aix';
@@ -639,21 +636,6 @@ sub copy {
     $packlist->{$xto} = { type => 'file' };
 }
 
-sub install {
-    my($from,$to,$mode) = @_;
-
-    my $xto = $to;
-    my $cmd = join(' ', @installcmd);
-    $cmd .= " -m $mode" if $mode;
-    $cmd .= " -s" if $opts{strip};
-    $cmd .= " $from $to";
-    $xto =~ s/^\Q$opts{destdir}\E// if $opts{destdir};
-    print $opts{verbose} ? "  install $from $xto\n" : "  $xto\n" unless $opts{silent};
-    system($cmd);
-    warn "Couldn't $cmd\n" if $?;
-    $packlist->{$xto} = { type => 'file' };
-}
-
 sub installlib {
     my $dir = $File::Find::dir;
     $dir =~ s!\Alib/?!!;
@@ -751,19 +733,6 @@ sub installlib {
        return unless $do_installprivlib;
     }
 
-    if ($name eq 'Config_heavy.pl') {
-        open my $ifh, '<', $_ or die $!;
-        $_ = "$_.orig";
-        open my $ofh, '>', $_ or die $!;
-        while (my $l = <$ifh>) {
-            $l =~ s,^(ccflags|cppflags)[^=]*='[^']+,$& -I/usr/local/include,;
-            $l =~ s,^(ldflags|lddlflags)[^=]*='[^']+,$& -L/usr/local/lib,;
-            print $ofh $l;
-        }
-        close $ifh;
-        close $ofh;
-    }
-
     if ($Is_NetWare && !$opts{netware} && /\.(?:nlp|nlm|bs)$/) {
         # Don't copy .nlp,.nlm files, doesn't make sense on Windows and also
         # if copied will give problems when building new extensions.
index 3b41a4a..4153af2 100644 (file)
@@ -22,6 +22,8 @@ __END__
 
 AnyDBM_File - provide framework for multiple DBMs
 
+NDBM_File, DB_File, GDBM_File, SDBM_File, ODBM_File - various DBM implementations
+
 =head1 SYNOPSIS
 
     use AnyDBM_File;
index 09e45a1..ee2eaea 100644 (file)
@@ -271,8 +271,8 @@ foreach my $lib (qw(applibexp archlibexp privlibexp sitearchexp sitelibexp
     }
     # So we expect to find it in @INC
 
-    ok (exists $orig_inc{$_}, "Expect $lib '$_' to be in \@INC")
-      or $failed++ for split ':', $dir;
+    ok (exists $orig_inc{$dir}, "Expect $lib '$dir' to be in \@INC")
+      or $failed++;
   }
 }
 _diag ('@INC is:', @orig_inc) if $failed;
index fb7f2d3..ecb7ebb 100644 (file)
@@ -4,7 +4,7 @@ require Exporter;
 
 =head1 NAME
 
-Getopt::Std, getopt, getopts - Process single-character switches with switch clustering
+getopt, getopts - Process single-character switches with switch clustering
 
 =head1 SYNOPSIS
 
index 5e24e9b..eea92e0 100644 (file)
@@ -15,7 +15,7 @@ BEGIN {
     @INC = '../lib';
     unshift @INC, '.';
     require Config; import Config;
-    if (!$Config{d_setlocale} || $Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/) {
+    if (!$Config{d_setlocale} || $Config{ccflags} =~ /\bD?NO_LOCALE\b/) {
        print "1..0\n";
        exit;
     }
index 8b972a4..a44c014 100644 (file)
@@ -420,6 +420,158 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) {
                    Perl_my_cxt_index
                         );
 }
+if ($define{'NO_MATHOMS'}) {
+    ++$skip{$_} foreach qw(
+                   ASCII_TO_NEED
+                   NATIVE_TO_NEED
+                   Perl_custom_op_desc
+                   Perl_custom_op_name
+                   Perl_do_aexec
+                   Perl_do_binmode
+                   Perl_do_open
+                   Perl_do_open9
+                   Perl_fprintf_nocontext
+                   Perl_gv_AVadd
+                   Perl_gv_HVadd
+                   Perl_gv_IOadd
+                   Perl_gv_SVadd
+                   Perl_gv_efullname
+                   Perl_gv_efullname3
+                   Perl_gv_fetchmethod
+                   Perl_gv_fullname
+                   Perl_gv_fullname3
+                   Perl_hv_delete
+                   Perl_hv_delete_ent
+                   Perl_hv_exists
+                   Perl_hv_exists_ent
+                   Perl_hv_fetch
+                   Perl_hv_fetch_ent
+                   Perl_hv_iternext
+                   Perl_hv_magic
+                   Perl_hv_store
+                   Perl_hv_store_ent
+                   Perl_hv_store_flags
+                   Perl_init_i18nl14n
+                   Perl_isALNUM_lazy
+                   Perl_isIDFIRST_lazy
+                   Perl_is_uni_alnum
+                   Perl_is_uni_alnum_lc
+                   Perl_is_uni_alnumc
+                   Perl_is_uni_alnumc_lc
+                   Perl_is_uni_alpha
+                   Perl_is_uni_alpha_lc
+                   Perl_is_uni_ascii
+                   Perl_is_uni_ascii_lc
+                   Perl_is_uni_blank
+                   Perl_is_uni_blank_lc
+                   Perl_is_uni_cntrl
+                   Perl_is_uni_cntrl_lc
+                   Perl_is_uni_digit
+                   Perl_is_uni_digit_lc
+                   Perl_is_uni_graph
+                   Perl_is_uni_graph_lc
+                   Perl_is_uni_idfirst
+                   Perl_is_uni_idfirst_lc
+                   Perl_is_uni_lower
+                   Perl_is_uni_lower_lc
+                   Perl_is_uni_print
+                   Perl_is_uni_print_lc
+                   Perl_is_uni_punct
+                   Perl_is_uni_punct_lc
+                   Perl_is_uni_space
+                   Perl_is_uni_space_lc
+                   Perl_is_uni_upper
+                   Perl_is_uni_upper_lc
+                   Perl_is_uni_xdigit
+                   Perl_is_uni_xdigit_lc
+                   Perl_is_utf8_alnum
+                   Perl_is_utf8_alnumc
+                   Perl_is_utf8_alpha
+                   Perl_is_utf8_ascii
+                   Perl_is_utf8_blank
+                   Perl_is_utf8_char
+                   Perl_is_utf8_cntrl
+                   Perl_is_utf8_digit
+                   Perl_is_utf8_graph
+                   Perl_is_utf8_idcont
+                   Perl_is_utf8_idfirst
+                   Perl_is_utf8_lower
+                   Perl_is_utf8_mark
+                   Perl_is_utf8_perl_space
+                   Perl_is_utf8_perl_word
+                   Perl_is_utf8_posix_digit
+                   Perl_is_utf8_print
+                   Perl_is_utf8_punct
+                   Perl_is_utf8_space
+                   Perl_is_utf8_string_loc
+                   Perl_is_utf8_upper
+                   Perl_is_utf8_xdigit
+                   Perl_is_utf8_xidcont
+                   Perl_is_utf8_xidfirst
+                   Perl_my_lstat
+                   Perl_my_stat
+                   Perl_newAV
+                   Perl_newHV
+                   Perl_newIO
+                   Perl_newSUB
+                   Perl_pack_cat
+                   Perl_printf_nocontext
+                   Perl_ref
+                   Perl_save_freeop
+                   Perl_save_freepv
+                   Perl_save_freesv
+                   Perl_save_iv
+                   Perl_save_list
+                   Perl_save_long
+                   Perl_save_mortalizesv
+                   Perl_save_nogv
+                   Perl_save_op
+                   Perl_save_re_context
+                   Perl_sv_2iv
+                   Perl_sv_2pv
+                   Perl_sv_2pv_nolen
+                   Perl_sv_2pvbyte_nolen
+                   Perl_sv_2pvutf8_nolen
+                   Perl_sv_2uv
+                   Perl_sv_catpvn
+                   Perl_sv_catpvn_mg
+                   Perl_sv_catsv
+                   Perl_sv_catsv_mg
+                   Perl_sv_force_normal
+                   Perl_sv_insert
+                   Perl_sv_iv
+                   Perl_sv_mortalcopy
+                   Perl_sv_nolocking
+                   Perl_sv_nounlocking
+                   Perl_sv_nv
+                   Perl_sv_pv
+                   Perl_sv_pvbyte
+                   Perl_sv_pvbyten
+                   Perl_sv_pvn
+                   Perl_sv_pvn_force
+                   Perl_sv_pvn_nomg
+                   Perl_sv_pvutf8
+                   Perl_sv_pvutf8n
+                   Perl_sv_setsv
+                   Perl_sv_taint
+                   Perl_sv_unref
+                   Perl_sv_usepvn
+                   Perl_sv_usepvn_mg
+                   Perl_sv_utf8_upgrade
+                   Perl_sv_uv
+                   Perl_to_uni_lower_lc
+                   Perl_to_uni_title_lc
+                   Perl_to_uni_upper_lc
+                   Perl_to_utf8_fold
+                   Perl_to_utf8_lower
+                   Perl_to_utf8_title
+                   Perl_to_utf8_upper
+                   Perl_unpack_str
+                   Perl_utf8_to_uvchr
+                   Perl_utf8_to_uvuni
+                   Perl_valid_utf8_to_uvuni
+                        );
+}
 
 unless ($define{'PERL_NEED_APPCTX'}) {
     ++$skip{PL_appctx};
index c18d4b7..4158f1a 100644 (file)
@@ -2270,7 +2270,7 @@ Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
     PERL_UNUSED_ARG(mg);
 #endif
 
-    TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1));
+    TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1) && IN_PERL_RUNTIME);
     return 0;
 }
 
index 796cb03..7337f23 100644 (file)
@@ -4805,7 +4805,10 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
 
     /* for s/// and tr///, last element in list is the replacement; pop it */
 
-    if (is_trans || o->op_type == OP_SUBST) {
+    /* If we have a syntax error causing tokens to be popped and the parser
+       to see PMFUNC '(' expr ')' with no commas in it; e.g., s/${<>{})//,
+       then expr will not be of type OP_LIST, there being no repl.  */
+    if ((is_trans || o->op_type == OP_SUBST) && expr->op_type == OP_LIST) {
        OP* kid;
        repl = cLISTOPx(expr)->op_last;
        kid = cLISTOPx(expr)->op_first;
@@ -4930,8 +4933,17 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
                 * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv
                 * that isn't required now. Note that we have to be pretty
                 * confident that nothing used that CV's pad while the
-                * regex was parsed */
-               assert(AvFILLp(PL_comppad) == 0); /* just @_ */
+                * regex was parsed, except maybe op targets for \Q etc.
+                * If there were any op targets, though, they should have
+                * been stolen by constant folding.
+                */
+#ifdef DEBUGGING
+               PADOFFSET i = 0;
+               assert(PadnamelistMAXNAMED(PL_comppad_name) == 0);
+               while (++i <= AvFILLp(PL_comppad)) {
+                   assert(!PL_curpad[i]);
+               }
+#endif
                /* But we know that one op is using this CV's slab. */
                cv_forget_slab(PL_compcv);
                LEAVE_SCOPE(floor);
@@ -5045,6 +5057,7 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, bool isreg, I32 floor)
             */
 
            SvREFCNT_inc_simple_void(PL_compcv);
+           CvLVALUE_on(PL_compcv);
            /* these lines are just an unrolled newANONATTRSUB */
            expr = newSVOP(OP_ANONCODE, 0,
                    MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr)));
@@ -11251,19 +11264,11 @@ S_inplace_aassign(pTHX_ OP *o) {
 STATIC void
 S_null_listop_in_list_context(pTHX_ OP *o)
 {
-    OP *kid;
-
     PERL_ARGS_ASSERT_NULL_LISTOP_IN_LIST_CONTEXT;
 
     /* This is an OP_LIST in list context. That means we
      * can ditch the OP_LIST and the OP_PUSHMARK within. */
 
-    kid = cLISTOPo->op_first;
-    /* Find the end of the chain of OPs executed within the OP_LIST. */
-    while (kid->op_next != o)
-        kid = kid->op_next;
-
-    kid->op_next = o->op_next; /* patch list out of exec chain */
     op_null(cUNOPo->op_first); /* NULL the pushmark */
     op_null(o); /* NULL the list */
 }
@@ -12006,7 +12011,9 @@ Perl_rpeep(pTHX_ OP *o)
                  * altering the basic op_first/op_sibling layout. */
                 kid = kLISTOP->op_first;
                 assert(
-                      (kid->op_type == OP_NULL && kid->op_targ == OP_NEXTSTATE)
+                      (kid->op_type == OP_NULL
+                      && (  kid->op_targ == OP_NEXTSTATE
+                         || kid->op_targ == OP_DBSTATE  ))
                     || kid->op_type == OP_STUB
                     || kid->op_type == OP_ENTER);
                 nullop->op_next = kLISTOP->op_next;
index a1c3c59..9d9dd58 100644 (file)
@@ -957,7 +957,7 @@ typedef enum {
     XOPe_xop_name = XOPf_xop_name,
     XOPe_xop_desc = XOPf_xop_desc,
     XOPe_xop_class = XOPf_xop_class,
-    XOPe_xop_peep = XOPf_xop_peep,
+    XOPe_xop_peep = XOPf_xop_peep
 } xop_flags_enum;
 
 #define XOPd_xop_name  PL_op_name[OP_CUSTOM]
index b8a58f7..07e1217 100644 (file)
@@ -15,7 +15,7 @@
 
 #define PERL_REVISION  5               /* age */
 #define PERL_VERSION   20              /* epoch */
-#define PERL_SUBVERSION        1               /* generation */
+#define PERL_SUBVERSION        2               /* generation */
 
 /* The following numbers describe the earliest compatible version of
    Perl ("compatibility" here being defined as sufficient binary/API
@@ -134,7 +134,6 @@ hunk.
 static const char * const local_patches[] = {
        NULL
 #ifdef PERL_GIT_UNCOMMITTED_CHANGES
-       ,"CVE-2014-4330"
        ,"uncommitted-changes"
 #endif
        PERL_GIT_UNPUSHED_COMMITS       /* do not remove this line */
index 0fb87dc..5000d79 100644 (file)
@@ -2925,7 +2925,7 @@ Perl_eval_sv(pTHX_ SV *sv, I32 flags)
 /*
 =for apidoc p||eval_pv
 
-Tells Perl to C<eval> the given string and return an SV* result.
+Tells Perl to C<eval> the given string in scalar context and return an SV* result.
 
 =cut
 */
@@ -3514,7 +3514,7 @@ S_minus_v(pTHX)
 #endif
 
        PerlIO_printf(PIO_stdout,
-                     "\n\nCopyright 1987-2014, Larry Wall\n");
+                     "\n\nCopyright 1987-2015, Larry Wall\n");
 #ifdef MSDOS
        PerlIO_printf(PIO_stdout,
                      "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
index 3b76389..1325de9 100644 (file)
 #  endif
 #endif
 
+/* EVC 4 SDK headers includes a bad definition of MB_CUR_MAX in stdlib.h
+  which is included from stdarg.h. Bad definition not present in SD 2008
+  SDK headers. wince.h is not yet included, so we cant fix this from there
+  since by then MB_CUR_MAX will be defined from stdlib.h.
+  cewchar.h includes a correct definition of MB_CUR_MAX and it is copied here
+  since cewchar.h can't be included this early */
+#if defined(UNDER_CE) && (_MSC_VER < 1300)
+#  define MB_CUR_MAX 1
+#endif
 #ifdef I_STDARG
 #  include <stdarg.h>
 #else
@@ -1107,14 +1116,6 @@ EXTERN_C int usleep(unsigned int);
 #  define WIN32SCK_IS_STDSCK           /* don't pull in custom wsock layer */
 #endif
 
-/* In Tru64 use the 4.4BSD struct msghdr, not the 4.3 one.
- * This is important for using IPv6.
- * For OSF/1 3.2, however, defining _SOCKADDR_LEN would be
- * a bad idea since it breaks send() and recv(). */
-#if defined(__osf__) && defined(__alpha) && !defined(_SOCKADDR_LEN) && !defined(DEC_OSF1_3_X)
-#   define _SOCKADDR_LEN
-#endif
-
 #if defined(HAS_SOCKET) && !defined(WIN32) /* WIN32 handles sockets via win32.h */
 # include <sys/socket.h>
 # if defined(USE_SOCKS) && defined(I_SOCKS)
@@ -1797,6 +1798,16 @@ typedef NVTYPE NV;
 #   include <ieeefp.h>
 #endif
 
+#ifdef USING_MSVC6
+/* VC6 has broken NaN semantics: NaN == NaN returns true instead of false,
+ * and for example NaN < IV_MIN. */
+#  define NAN_COMPARE_BROKEN
+#endif
+#if defined(__DECC) && defined(__osf__)
+/* Also Tru64 cc has broken NaN comparisons. */
+#  define NAN_COMPARE_BROKEN
+#endif
+
 #ifdef USE_LONG_DOUBLE
 #   ifdef I_SUNMATH
 #       include <sunmath.h>
index e3c525e..7f860f9 100644 (file)
  *     This symbol contains the ~name expanded version of PRIVLIB, to be used
  *     in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/sys/lib/perl/5.20.1"         /**/
-#define PRIVLIB_EXP "/sys/lib/perl/5.20.1"             /**/
+#define PRIVLIB "/sys/lib/perl/5.20.2"         /**/
+#define PRIVLIB_EXP "/sys/lib/perl/5.20.2"             /**/
 
 /* PTRSIZE:
  *     This symbol contains the size of a pointer, so that the C preprocessor
  *     removed.  The elements in inc_version_list (inc_version_list.U) can
  *     be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/sys/lib/perl/5.20.1/site_perl"               /**/
-#define SITELIB_EXP "/sys/lib/perl/5.20.1/site_perl"           /**/
-#define SITELIB_STEM "/sys/lib/perl/5.20.1/site_perl"          /**/
+#define SITELIB "/sys/lib/perl/5.20.2/site_perl"               /**/
+#define SITELIB_EXP "/sys/lib/perl/5.20.2/site_perl"           /**/
+#define SITELIB_STEM "/sys/lib/perl/5.20.2/site_perl"          /**/
 
 /* Size_t_size:
  *     This symbol holds the size of a Size_t in bytes.
index 8c1c410..57992ff 100644 (file)
@@ -34,10 +34,10 @@ aphostname='/bin/uname -n'
 api_revision='5'
 api_subversion='0'
 api_version='20'
-api_versionstring='5.20.1'
+api_versionstring='5.20.2'
 ar='ar'
-archlib='/sys/lib/perl5/5.20.1/386'
-archlibexp='/sys/lib/perl5/5.20.1/386'
+archlib='/sys/lib/perl5/5.20.2/386'
+archlibexp='/sys/lib/perl5/5.20.2/386'
 archname64=''
 archname='386'
 archobjs=''
@@ -296,7 +296,6 @@ d_isinf='undef'
 d_isnan='undef'
 d_isnanl='undef'
 d_killpg='undef'
-d_lc_monetary_2008='undef'
 d_lchown='undef'
 d_ldbl_dig='define'
 d_libm_lib_version='0'
@@ -723,17 +722,17 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='/sys/lib/perl/5.20.1/386'
+installarchlib='/sys/lib/perl/5.20.2/386'
 installbin='/usr/bin'
 installman1dir='/sys/man/1pub'
 installman3dir='/sys/man/2pub'
 installprefix='/usr'
 installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.20.1'
+installprivlib='/sys/lib/perl/5.20.2'
 installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.20.1/site_perl/386'
+installsitearch='/sys/lib/perl/5.20.2/site_perl/386'
 installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.20.1/site_perl'
+installsitelib='/sys/lib/perl/5.20.2/site_perl'
 installstyle='lib/perl5'
 installusrbinperl='undef'
 installvendorarch=''
@@ -853,8 +852,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/sys/lib/perl/5.20.1'
-privlibexp='/sys/lib/perl/5.20.1'
+privlib='/sys/lib/perl/5.20.2'
+privlibexp='/sys/lib/perl/5.20.2'
 procselfexe=''
 prototype='define'
 ptrsize='4'
@@ -919,13 +918,13 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0'
 sig_size='50'
 signal_t='void'
-sitearch='/sys/lib/perl/5.20.1/site_perl/386'
+sitearch='/sys/lib/perl/5.20.2/site_perl/386'
 sitearchexp='/sys/lib/perl/site_perl/386'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.20.1/site_perl'
-sitelib_stem='/sys/lib/perl/5.20.1/site_perl'
-sitelibexp='/sys/lib/perl/5.20.1/site_perl'
+sitelib='/sys/lib/perl/5.20.2/site_perl'
+sitelib_stem='/sys/lib/perl/5.20.2/site_perl'
+sitelibexp='/sys/lib/perl/5.20.2/site_perl'
 siteprefix='/usr'
 siteprefixexp='/usr'
 sizesize='4'
@@ -958,7 +957,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/sys/include/ape/string.h'
 submit=''
-subversion='1'
+subversion='2'
 sysman='/sys/man/1pub'
 tail=''
 tar=''
@@ -1038,8 +1037,8 @@ vendorlib_stem=''
 vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
-version='5.20.1'
-version_patchlevel_string='version 20 subversion 1'
+version='5.20.2'
+version_patchlevel_string='version 20 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth=''
@@ -1053,7 +1052,7 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=20
-PERL_SUBVERSION=1
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=20
 PERL_API_SUBVERSION=0
index 28d290b..cf2153e 100644 (file)
@@ -22,7 +22,7 @@ installman3dir = /sys/man/2
 
 podnames = perl perlbook perldata perldebtut perldiag perldsc perlform perlfunc perlipc perllexwarn perllol perlmod perlmodlib perlmodinstall perlnewmod perlop perlootut perlopentut perlpacktut perlpod perlport perlrequick perlretut perlref perlreftut perlrequick perlrun perlsec perlstyle perlsub perlsyn perltie perltrap perlutil perlunifaq perluniintro perlvar
 faqpodnames = perlfaq perlfaq1 perlfaq2 perlfaq3 perlfaq4 perlfaq5 perlfaq6 perlfaq7 perlfaq8 perlfaq9
-advpodnames = perlapi perlapio perlcall perlclib perlcompile perldebguts perldbmfilter perldebug perldelta perldiag perlebcdic perlembed perlfilter perlfork perlguts perlhack perlintern perliol perllocale perlnumber perlobj perlpodspec perlre perlthrtut perltodo perlunicode perlxs perlxs perlxstut
+advpodnames = perlapi perlapio perlcall perlclib perlcompile perldebguts perldbmfilter perldebug perldelta perldiag perlebcdic perlembed perlfilter perlfork perlguts perlhack perlintern perliol perllocale perlnumber perlobj perlpodspec perlre perlthrtut perltodo perlunicode perlunicook perlxs perlxs perlxstut
 archpodnames = perlaix perlamiga perlbeos perlbs2000 perlce perlcygwin perldgux perldos perlfreebsd perlhpux perlhurd perlirix perlmacos perlmpeix perlnetware perlos2 perlos390 perlos400 perlplan9 perlqnx perlsolaris perltru64 perlvms perlvos perlwin32
 histpods = perl5004delta perl5005delta perl561delta perl56delta perl570delta perl571delta perl572delta perl573delta perl58delta perlhist
 
index 08d7916..9473daf 100644 (file)
@@ -34,7 +34,7 @@ For ease of access, the Perl manual has been split up into several sections.
 
 # This section is parsed by Porting/pod_lib.pl for use by pod/buildtoc etc
 
-flag =g  perlmodlib perlapi perlintern
+flag =g  perluniprops perlmodlib perlapi perlintern
 flag =go perltoc
 flag =ro perlcn perljp perlko perltw
 flag =   perlvms
@@ -121,6 +121,7 @@ aux a2p c2ph h2ph h2xs perlbug pl2pm pod2html pod2man s2p splain xsubpp
     perllocale         Perl locale support
     perluniintro       Perl Unicode introduction
     perlunicode        Perl Unicode support
+    perlunicook        Perl Unicode cookbook
     perlunifaq         Perl Unicode FAQ
     perluniprops       Index of Unicode properties in Perl
     perlunitut         Perl Unicode tutorial
@@ -179,13 +180,15 @@ aux a2p c2ph h2ph h2xs perlbug pl2pm pod2html pod2man s2p splain xsubpp
 
     perlhist           Perl history records
     perldelta          Perl changes since previous version
+    perl5201delta      Perl changes in version 5.20.1
     perl5200delta      Perl changes in version 5.20.0
+    perl5184delta      Perl changes in version 5.18.4
     perl5182delta      Perl changes in version 5.18.2
     perl5181delta      Perl changes in version 5.18.1
     perl5180delta      Perl changes in version 5.18.0
-    perl5161delta      Perl changes in version 5.16.1
-    perl5162delta      Perl changes in version 5.16.2
     perl5163delta      Perl changes in version 5.16.3
+    perl5162delta      Perl changes in version 5.16.2
+    perl5161delta      Perl changes in version 5.16.1
     perl5160delta      Perl changes in version 5.16.0
     perl5144delta      Perl changes in version 5.14.4
     perl5143delta      Perl changes in version 5.14.3
index 92133e2..a339f3d 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.20.1
+perldelta - what is new for perl v5.20.2
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.20.0 release and the 5.20.1
+This document describes differences between the 5.20.1 release and the 5.20.2
 release.
 
-If you are upgrading from an earlier release such as 5.18.0, first read
-L<perl5200delta>, which describes differences between 5.18.0 and 5.20.0.
+If you are upgrading from an earlier release such as 5.20.0, first read
+L<perl5201delta>, which describes differences between 5.20.0 and 5.20.1.
 
 =head1 Incompatible Changes
 
-There are no changes intentionally incompatible with 5.20.0.  If any exist,
+There are no changes intentionally incompatible with 5.20.1.  If any exist,
 they are bugs, and we request that you submit a report.  See L</Reporting Bugs>
 below.
 
-=head1 Performance Enhancements
-
-=over 4
+=head1 Modules and Pragmata
 
-=item *
+=head2 Updated Modules and Pragmata
 
-An optimization to avoid problems with COW and deliberately overallocated PVs
-has been disabled because it interfered with another, more important,
-optimization, causing a slowdown on some platforms.
-L<[perl #121975]|https://rt.perl.org/Ticket/Display.html?id=121975>
+=over 4
 
 =item *
 
-Returning a string from a lexical variable could be slow in some cases.  This
-has now been fixed.
-L<[perl #121977]|https://rt.perl.org/Ticket/Display.html?id=121977>
+L<attributes> has been upgraded from version 0.22 to 0.23.
 
-=back
-
-=head1 Modules and Pragmata
-
-=head2 Updated Modules and Pragmata
-
-=over 4
+The usage of C<memEQs> in the XS has been corrected.
+L<[perl #122701]|https://rt.perl.org/Ticket/Display.html?id=122701>
 
 =item *
 
-L<Config::Perl::V> has been upgraded from version 0.20 to 0.22.
+L<Data::Dumper> has been upgraded from version 2.151 to 2.151_01.
 
-The list of Perl versions covered has been updated and some flaws in the
-parsing have been fixed.
+Fixes CVE-2014-4330 by adding a configuration variable/option to limit
+recursion when dumping deep data structures.
 
 =item *
 
-L<Exporter> has been upgraded from version 5.70 to 5.71.
+L<Errno> has been upgraded from version 1.20_03 to 1.20_05.
 
-Illegal POD syntax in the documentation has been corrected.
+Warnings when building the XS on Windows with the Visual C++ compiler are now
+avoided.
 
 =item *
 
-L<ExtUtils::CBuilder> has been upgraded from version 0.280216 to 0.280217.
+L<feature> has been upgraded from version 1.36 to 1.36_01.
 
-Android builds now link to both B<-lperl> and C<$Config::Config{perllibs}>.
+The C<postderef> feature has now been documented.  This feature was actually
+added in Perl 5.20.0 but was accidentally omitted from the feature
+documentation until now.
 
 =item *
 
-L<File::Copy> has been upgraded from version 2.29 to 2.30.
+L<IO::Socket> has been upgraded from version 1.37 to 1.38.
 
-The documentation now notes that C<copy> will not overwrite read-only files.
+Document the limitations of the connected() method.
+L<[perl #123096]|https://rt.perl.org/Ticket/Display.html?id=123096>
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 3.11 to 5.020001.
+L<Module::CoreList> has been upgraded from version 5.020001 to 5.20150214.
 
 The list of Perl versions covered has been updated.
 
 =item *
 
-The PathTools module collection has been upgraded from version 3.47 to 3.48.
+PathTools has been upgraded from version 3.48 to 3.48_01.
 
-Fallbacks are now in place when cross-compiling for Android and
-C<$Config::Config{sh}> is not yet defined.
-L<[perl #121963]|https://rt.perl.org/Ticket/Display.html?id=121963>
+A warning from the B<gcc> compiler is now avoided when building the XS.
 
 =item *
 
-L<PerlIO::via> has been upgraded from version 0.14 to 0.15.
+L<PerlIO::scalar> has been upgraded from version 0.18 to 0.18_01.
+
+Reading from a position well past the end of the scalar now correctly returns
+end of file.
+L<[perl #123443]|https://rt.perl.org/Ticket/Display.html?id=123443>
+
+Seeking to a negative position still fails, but no longer leaves the file
+position set to a negation location.
 
-A minor portability improvement has been made to the XS implementation.
+C<eof()> on a C<PerlIO::scalar> handle now properly returns true when the file
+position is past the 2GB mark on 32-bit systems.
 
 =item *
 
-L<Unicode::UCD> has been upgraded from version 0.57 to 0.58.
+L<Storable> has been upgraded from version 2.49 to 2.49_01.
 
-The documentation includes many clarifications and fixes.
+Minor grammatical change to the documentation only.
 
 =item *
 
-L<utf8> has been upgraded from version 1.13 to 1.13_01.
+L<VMS::DCLsym> has been upgraded from version 1.05 to 1.05_01.
 
-The documentation has some minor formatting improvements.
+Minor formatting change to the documentation only.
 
 =item *
 
-L<version> has been upgraded from version 0.9908 to 0.9909.
+L<VMS::Stdio> has been upgraded from version 2.4 to 2.41.
 
-External libraries and Perl may have different ideas of what the locale is.
-This is problematic when parsing version strings if the locale's numeric
-separator has been changed.  Version parsing has been patched to ensure it
-handles the locales correctly.
-L<[perl #121930]|https://rt.perl.org/Ticket/Display.html?id=121930>
+Minor formatting change to the documentation only.
 
 =back
 
 =head1 Documentation
 
+=head2 New Documentation
+
+=head3 L<perlunicook>
+
+This document, by Tom Christiansen, provides examples of handling Unicode in
+Perl.
+
 =head2 Changes to Existing Documentation
 
-=head3 L<perlapi>
+=head3 L<perlexperiment>
 
 =over 4
 
 =item *
 
-C<av_len> - Emphasize that this returns the highest index in the array, not the
-size of the array.
-L<[perl #120386]|https://rt.perl.org/Ticket/Display.html?id=120386>
+Added reference to subroutine signatures.  This feature was actually added in
+Perl 5.20.0 but was accidentally omitted from the experimental feature
+documentation until now.
 
-=item *
-
-Note that C<SvSetSV> doesn't do set magic.
+=back
 
-=item *
+=head3 L<perlpolicy>
 
-C<sv_usepvn_flags> - Fix documentation to mention the use of C<NewX> instead of
-C<malloc>.
-L<[perl #121869]|https://rt.perl.org/Ticket/Display.html?id=121869>
+=over 4
 
 =item *
 
-Clarify where C<NUL> may be embedded or is required to terminate a string.
+The process whereby features may graduate from experimental status has now been
+formally documented.
 
 =back
 
-=head3 L<perlfunc>
+=head3 L<perlsyn>
 
 =over 4
 
 =item *
 
-Clarify the meaning of C<-B> and C<-T>.
+An ambiguity in the documentation of the ellipsis statement has been corrected.
+L<[perl #122661]|https://rt.perl.org/Ticket/Display.html?id=122661>
 
-=item *
+=back
 
-C<-l> now notes that it will return false if symlinks aren't supported by the
-file system.
-L<[perl #121523]|https://rt.perl.org/Ticket/Display.html?id=121523>
+=head1 Diagnostics
 
-=item *
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages.  For the complete list of
+diagnostic messages, see L<perldiag>.
 
-Note that C<each>, C<keys> and C<values> may produce different orderings for
-tied hashes compared to other perl hashes.
-L<[perl #121404]|https://rt.perl.org/Ticket/Display.html?id=121404>
+=head2 Changes to Existing Diagnostics
+
+=over 4
 
 =item *
 
-Note that C<exec LIST> and C<system LIST> may fall back to the shell on Win32.
-Only C<exec PROGRAM LIST> and C<system PROGRAM LIST> indirect object syntax
-will reliably avoid using the shell.  This has also been noted in L<perlport>.
-L<[perl #122046]|https://rt.perl.org/Ticket/Display.html?id=122046>
+L<Bad symbol for scalar|perldiag/"Bad symbol for scalar"> is now documented.
+This error is not new, but was not previously documented here.
 
 =item *
 
-Clarify the meaning of C<our>.
-L<[perl #122132]|https://rt.perl.org/Ticket/Display.html?id=122132>
+L<Missing right brace on \N{}|perldiag/"Missing right brace on \N{}"> is now
+documented.  This error is not new, but was not previously documented here.
 
 =back
 
-=head3 L<perlguts>
+=head1 Testing
 
 =over 4
 
 =item *
 
-Explain various ways of modifying an existing SV's buffer.
-L<[perl #116925]|https://rt.perl.org/Ticket/Display.html?id=116925>
+The test script F<re/rt122747.t> has been added to verify that
+L<perl #122747|https://rt.perl.org/Ticket/Display.html?id=122747> remains
+fixed.
 
 =back
 
-=head3 L<perlpolicy>
-
-=over 4
-
-=item *
+=head1 Platform Support
 
-We now have a code of conduct for the I<< p5p >> mailing list, as documented in
-L<< perlpolicy/STANDARDS OF CONDUCT >>.
+=head2 Regained Platforms
 
-=back
+IRIX and Tru64 platforms are working again.  (Some C<make test> failures
+remain.)
 
-=head3 L<perlre>
+=head1 Selected Bug Fixes
 
 =over 4
 
 =item *
 
-The C</x> modifier has been clarified to note that comments cannot be continued
-onto the next line by escaping them.
-
-=back
+AIX now sets the length in C<< getsockopt >> correctly.
+L<[perl #120835]|https://rt.perl.org/Ticket/Display.html?id=120835>,
+L<[cpan #91183]|https://rt.cpan.org/Ticket/Display.html?id=91183>,
+L<[cpan #85570]|https://rt.cpan.org/Ticket/Display.html?id=85570>
 
-=head3 L<perlsyn>
+=item *
 
-=over 4
+In Perl 5.20.0, C<$^N> accidentally had the internal UTF8 flag turned off if
+accessed from a code block within a regular expression, effectively
+UTF8-encoding the value.  This has been fixed.
+L<[perl #123135]|https://rt.perl.org/Ticket/Display.html?id=123135>
 
 =item *
 
-Mention the use of empty conditionals in C<for>/C<while> loops for infinite
-loops.
+Various cases where the name of a sub is used (autoload, overloading, error
+messages) used to crash for lexical subs, but have been fixed.
 
-=back
-
-=head3 L<perlxs>
+=item *
 
-=over 4
+An assertion failure when parsing C<sort> with debugging enabled has been
+fixed.
+L<[perl #122771]|https://rt.perl.org/Ticket/Display.html?id=122771>
 
 =item *
 
-Added a discussion of locale issues in XS code.
+Loading UTF8 tables during a regular expression match could cause assertion
+failures under debugging builds if the previous match used the very same
+regular expression.
+L<[perl #122747]|https://rt.perl.org/Ticket/Display.html?id=122747>
 
-=back
+=item *
 
-=head1 Diagnostics
+Due to a mistake in the string-copying logic, copying the value of a state
+variable could instead steal the value and undefine the variable.  This bug,
+introduced in Perl 5.20, would happen mostly for long strings (1250 chars or
+more), but could happen for any strings under builds with copy-on-write
+disabled.
+L<[perl #123029]|https://rt.perl.org/Ticket/Display.html?id=123029>
 
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages.  For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 Changes to Existing Diagnostics
+=item *
 
-=over 4
+Fixed a bug that could cause perl to execute an infinite loop during
+compilation.
+L<[perl #122995]|https://rt.perl.org/Ticket/Display.html?id=122995>
 
 =item *
 
-L<Variable length lookbehind not implemented in regex mE<sol>%sE<sol>|perldiag/"Variable length lookbehind not implemented in regex m/%s/">
+On Win32, restoring in a child pseudo-process a variable that was C<local()>ed
+in a parent pseudo-process before the C<fork> happened caused memory corruption
+and a crash in the child pseudo-process (and therefore OS process).
+L<[perl #40565]|https://rt.perl.org/Ticket/Display.html?id=40565>
 
-Information about Unicode behaviour has been added.
+=item *
 
-=back
+Tainted constants evaluated at compile time no longer cause unrelated
+statements to become tainted.
+L<[perl #122669]|https://rt.perl.org/Ticket/Display.html?id=122669>
 
-=head1 Configuration and Compilation
+=item *
 
-=over 4
+Calling C<write> on a format with a C<^**> field could produce a panic in
+sv_chop() if there were insufficient arguments or if the variable used to fill
+the field was empty.
+L<[perl #123245]|https://rt.perl.org/Ticket/Display.html?id=123245>
 
 =item *
 
-Building Perl no longer writes to the source tree when configured with
-F<Configure>'s B<-Dmksymlinks> option.
-L<[perl #121585]|https://rt.perl.org/Ticket/Display.html?id=121585>
+In Perl 5.20.0, C<sort CORE::fake> where 'fake' is anything other than a
+keyword started chopping of the last 6 characters and treating the result as a
+sort sub name.  The previous behaviour of treating "CORE::fake" as a sort sub
+name has been restored.
+L<[perl #123410]|https://rt.perl.org/Ticket/Display.html?id=123410>
 
-=back
+=item *
 
-=head1 Platform Support
+A bug in regular expression patterns that could lead to segfaults and other
+crashes has been fixed.  This occurred only in patterns compiled with C<"/i">,
+while taking into account the current POSIX locale (this usually means they
+have to be compiled within the scope of C<S<"use locale">>), and there must be
+a string of at least 128 consecutive bytes to match.
+L<[perl #123539]|https://rt.perl.org/Ticket/Display.html?id=123539>
 
-=head2 Platform-Specific Notes
+=item *
 
-=over 4
+C<qr/@array(?{block})/> no longer dies with "Bizarre copy of ARRAY".
+L<[perl #123344]|https://rt.perl.org/Ticket/Display.html?id=123344>
 
-=item Android
+=item *
 
-Build support has been improved for cross-compiling in general and for Android
-in particular.
+C<gmtime> no longer crashes with not-a-number values.
+L<[perl #123495]|https://rt.perl.org/Ticket/Display.html?id=123495>
 
-=item OpenBSD
+=item *
 
-Corrected architectures and version numbers used in configuration hints when
-building Perl.
+Certain syntax errors in substitutions, such as C<< s/${<>{})// >>, would
+crash, and had done so since Perl 5.10.  (In some cases the crash did not start
+happening until Perl 5.16.)  The crash has, of course, been fixed.
+L<[perl #123542]|https://rt.perl.org/Ticket/Display.html?id=123542>
 
-=item Solaris
+=item *
 
-B<c99> options have been cleaned up, hints look for B<solstudio> as well as
-B<SUNWspro>, and support for native C<setenv> has been added.
+A memory leak in some regular expressions, introduced in Perl 5.20.1, has been
+fixed.
+L<[perl #123198]|https://rt.perl.org/Ticket/Display.html?id=123198>
 
-=item VMS
+=item *
 
-An old bug in feature checking, mainly affecting pre-7.3 systems, has been
+C<< formline("@...", "a"); >> would crash.  The C<FF_CHECKNL> case in
+pp_formline() didn't set the pointer used to mark the chop position, which led
+to the C<FF_MORE> case crashing with a segmentation fault.  This has been
 fixed.
+L<[perl #123538]|https://rt.perl.org/Ticket/Display.html?id=123538>
+L<[perl #123622]|https://rt.perl.org/Ticket/Display.html?id=123622>
 
-=item Windows
+=item *
 
-C<%I64d> is now being used instead of C<%lld> for MinGW.
+A possible buffer overrun and crash when parsing a literal pattern during
+regular expression compilation has been fixed.
+L<[perl #123604]|https://rt.perl.org/Ticket/Display.html?id=123604>
 
 =back
 
-=head1 Internal Changes
+=head1 Known Problems
 
 =over 4
 
 =item *
 
-Added L<perlapi/sync_locale>.
-Changing the program's locale should be avoided by XS code.  Nevertheless,
-certain non-Perl libraries called from XS, such as C<Gtk> do so.  When this
-happens, Perl needs to be told that the locale has changed.  Use this function
-to do so, before returning to Perl.
+It is a known bug that lexical subroutines cannot be used as the C<SUBNAME>
+argument to C<sort>.  This will be fixed in a future version of Perl.
 
 =back
 
-=head1 Selected Bug Fixes
+=head1 Errata From Previous Releases
 
 =over 4
 
 =item *
 
-A bug has been fixed where zero-length assertions and code blocks inside of a
-regex could cause C<pos> to see an incorrect value.
-L<[perl #122460]|https://rt.perl.org/Ticket/Display.html?id=122460>
-
-=item *
-
-Using C<s///e> on tainted utf8 strings could issue bogus "Malformed UTF-8
-character (unexpected end of string)" warnings.  This has now been fixed.
-L<[perl #122148]|https://rt.perl.org/Ticket/Display.html?id=122148>
-
-=item *
-
-C<system> and friends should now work properly on more Android builds.
-
-Due to an oversight, the value specified through B<-Dtargetsh> to F<Configure>
-would end up being ignored by some of the build process.  This caused perls
-cross-compiled for Android to end up with defective versions of C<system>,
-C<exec> and backticks: the commands would end up looking for F</bin/sh> instead
-of F</system/bin/sh>, and so would fail for the vast majority of devices,
-leaving C<$!> as C<ENOENT>.
-
-=item *
-
-Many issues have been detected by L<Coverity|http://www.coverity.com/> and 
-fixed.
+A regression has been fixed that was introduced in Perl 5.20.0 (fixed in Perl
+5.20.1 as well as here) in which a UTF-8 encoded regular expression pattern
+that contains a single ASCII lowercase letter does not match its uppercase
+counterpart.
+L<[perl #122655]|https://rt.perl.org/Ticket/Display.html?id=122655>
 
 =back
 
 =head1 Acknowledgements
 
-Perl 5.20.1 represents approximately 4 months of development since Perl 5.20.0
-and contains approximately 12,000 lines of changes across 170 files from 36
+Perl 5.20.2 represents approximately 5 months of development since Perl 5.20.1
+and contains approximately 6,300 lines of changes across 170 files from 34
 authors.
 
 Excluding auto-generated files, documentation and release tools, there were
-approximately 2,600 lines of changes to 110 .pm, .t, .c and .h files.
+approximately 1,900 lines of changes to 80 .pm, .t, .c and .h files.
 
 Perl continues to flourish into its third decade thanks to a vibrant community
 of users and developers.  The following people are known to have contributed
-the improvements that became Perl 5.20.1:
-
-Aaron Crane, Abigail, Alberto Simões, Alexandr Ciornii, Alexandre (Midnite)
-Jousset, Andrew Fresh, Andy Dougherty, Brian Fraser, Chris 'BinGOs' Williams,
-Craig A. Berry, Daniel Dragan, David Golden, David Mitchell, H.Merijn Brand,
-James E Keenan, Jan Dubois, Jarkko Hietaniemi, John Peacock, kafka, Karen
-Etheridge, Karl Williamson, Lukas Mai, Matthew Horsfall, Michael Bunk, Peter
-Martini, Rafael Garcia-Suarez, Reini Urban, Ricardo Signes, Shirakata Kentaro,
-Smylers, Steve Hay, Thomas Sibley, Todd Rinaldo, Tony Cook, Vladimir Marek,
-Yves Orton.
+the improvements that became Perl 5.20.2:
+
+Aaron Crane, Abigail, Andreas Voegele, Andy Dougherty, Anthony Heading,
+Aristotle Pagaltzis, Chris 'BinGOs' Williams, Craig A. Berry, Daniel Dragan,
+Doug Bell, Ed J, Father Chrysostomos, Glenn D. Golden, H.Merijn Brand, Hugo van
+der Sanden, James E Keenan, Jarkko Hietaniemi, Jim Cromie, Karen Etheridge,
+Karl Williamson, kmx, Matthew Horsfall, Max Maischein, Peter Martini, Rafael
+Garcia-Suarez, Ricardo Signes, Shlomi Fish, Slaven Rezic, Steffen Müller,
+Steve Hay, Tadeusz SoÅ›nierz, Tony Cook, Yves Orton, Ã†var Arnfjörð
+Bjarmason.
 
 The list above is almost certainly incomplete as it is automatically generated
 from version control history.  In particular, it does not include the names of
index e4b861b..9f3996f 100644 (file)
@@ -440,6 +440,11 @@ that wasn't a symbol table entry.
 (P) An internal request asked to add a hash entry to something that
 wasn't a symbol table entry.
 
+=item Bad symbol for scalar
+
+(P) An internal request asked to add a scalar entry to something that
+wasn't a symbol table entry.
+
 =item Bareword found in conditional
 
 (W bareword) The compiler found a bareword where it expected a
@@ -970,6 +975,13 @@ unable to locate this library.  See L<DynaLoader>.
 functioning as a class, but that package doesn't define that particular
 method, nor does any of its base classes.  See L<perlobj>.
 
+=item Can't locate object method "%s" via package "%s" (perhaps you forgot
+to load "%s"?)
+
+(F) You called a method on a class that did not exist, and the method
+could not be found in UNIVERSAL.  This often means that a method
+requires a package that has not been loaded.
+
 =item Can't locate package %s for @%s::ISA
 
 (W syntax) The @ISA array contained the name of another package that
@@ -1391,9 +1403,10 @@ uses the character values modulus 256 instead, as if you had provided:
 =item "\c%c" is more clearly written simply as "%s"
 
 (W syntax) The C<\cI<X>> construct is intended to be a way to specify
-non-printable characters.  You used it for a printable one, which is better
-written as simply itself, perhaps preceded by a backslash for non-word
-characters.
+non-printable characters.  You used it for a printable one, which
+is better written as simply itself, perhaps preceded by a backslash
+for non-word characters.  Doing it the way you did is not portable
+between ASCII and EBCDIC platforms.
 
 =item Cloning substitution context is unimplemented
 
@@ -2202,7 +2215,7 @@ of Perl are likely to eliminate these arbitrary limitations.
 =item Ignoring zero length \N{} in character class in regex; marked by
 S<<-- HERE> in m/%s/
 
-(W regexp) Named Unicode character escapes C<(\N{...})> may return a
+(W regexp) Named Unicode character escapes (C<\N{...}>) may return a
 zero-length sequence.  When such an escape is used in a character class
 its behaviour is not well defined.  Check that the correct escape has
 been used, and the correct charname handler is in scope.
@@ -2563,7 +2576,7 @@ a module that is a MRO plugin.  See L<mro> and L<perlmroapi>.
 =item Invalid negative number (%s) in chr
 
 (W utf8) You passed a negative number to C<chr>.  Negative numbers are
-not valid characters numbers, so it return the Unicode replacement
+not valid character numbers, so it returns the Unicode replacement
 character (U+FFFD).
 
 =item invalid option -D%c, use -D'' to see choices
@@ -3082,6 +3095,8 @@ can vary from one line to the next.
 
 (F) Missing right brace in C<\x{...}>, C<\p{...}>, C<\P{...}>, or C<\N{...}>.
 
+=item Missing right brace on \N{}
+
 =item Missing right brace on \N{} or unescaped left brace after \N
 
 (F) C<\N> has two meanings.
@@ -3305,7 +3320,7 @@ probably not what you want.
 =item \N{} in character class restricted to one character in regex; marked
 by S<<-- HERE> in m/%s/
 
-(F) Named Unicode character escapes C<(\N{...})> may return a
+(F) Named Unicode character escapes (C<\N{...}>) may return a
 multi-character sequence.  Such an escape may not be used in
 a character class, because character classes always match one
 character of input.  Check that the correct escape has been used,
@@ -4149,12 +4164,6 @@ the nesting limit is exceeded.
 command-line switch.  (This output goes to STDOUT unless you've
 redirected it with select().)
 
-=item (perhaps you forgot to load "%s"?)
-
-(F) This is an educated guess made in conjunction with the message
-"Can't locate object method \"%s\" via package \"%s\"".  It often means
-that a method requires a package that has not been loaded.
-
 =item Perl folding rules are not up-to-date for 0x%X; please use the perlbug 
 utility to report; in regex; marked by S<<-- HERE> in m/%s/
 
@@ -6754,7 +6763,7 @@ Something Very Wrong.
 
 =item Zero length \N{} in regex; marked by S<<-- HERE> in m/%s/
 
-(F) Named Unicode character escapes C<(\N{...})> may return a zero-length
+(F) Named Unicode character escapes (C<\N{...}>) may return a zero-length
 sequence.  Such an escape was used in an extended character class, i.e.
 C<(?[...])>, which is not permitted.  Check that the correct escape has
 been used, and the correct charnames handler is in scope.  The S<<-- HERE>
index 7713f54..802b990 100644 (file)
@@ -458,7 +458,7 @@ characters are strange, it's a C<-B> file; otherwise it's a C<-T> file.
 Also, any file containing a zero byte in the examined portion is
 considered a binary file.  (If executed within the scope of a L<S<use
 locale>|perllocale> which includes C<LC_CTYPE>, odd characters are
-anything that isn't a printable nor space in the current locale.) If
+anything that isn't a printable nor space in the current locale.)  If
 C<-T> or C<-B> is used on a filehandle, the current IO buffer is
 examined
 rather than the first block.  Both C<-T> and C<-B> return true on an empty
@@ -744,7 +744,8 @@ Returns the context of the current pure perl subroutine call.  In scalar
 context, returns the caller's package name if there I<is> a caller (that is, if
 we're in a subroutine or C<eval> or C<require>) and the undefined value
 otherwise.  caller never returns XS subs and they are skipped.  The next pure
-perl sub will appear instead of the XS sub in caller's return values. In list
+perl sub will appear instead of the XS
+sub in caller's return values.  In list
 context, caller returns
 
     # 0         1          2
@@ -762,7 +763,7 @@ to go back before the current one.
      = caller($i);
 
 Here, $subroutine is the function that the caller called (rather than the
-function containing the caller). Note that $subroutine may be C<(eval)> if
+function containing the caller).  Note that $subroutine may be C<(eval)> if
 the frame is not a subroutine call, but an C<eval>.  In such a case
 additional elements $evaltext and
 C<$is_require> are set: C<$is_require> is true if the frame is created by a
@@ -1380,11 +1381,12 @@ straightforward.  Although exists() will return false for deleted entries,
 deleting array elements never changes indices of existing values; use shift()
 or splice() for that.  However, if any deleted elements fall at the end of an
 array, the array's size shrinks to the position of the highest element that
-still tests true for exists(), or to 0 if none do. In other words, an
+still tests true for exists(), or to 0 if none do.  In other words, an
 array won't have trailing nonexistent elements after a delete.
 
-B<WARNING:> Calling delete on array values is deprecated and likely to
-be removed in a future version of Perl.
+B<WARNING:> Calling C<delete> on array values is strongly discouraged.  The
+notion of deleting or checking the existence of Perl array elements is not
+conceptually coherent, and can lead to surprising behavior.
 
 Deleting from C<%ENV> modifies the environment.  Deleting from a hash tied to
 a DBM file deletes the entry from the DBM file.  Deleting from a C<tied> hash
@@ -2061,9 +2063,11 @@ corresponding value is undefined.
     print "True\n"      if $hash{$key};
 
 exists may also be called on array elements, but its behavior is much less
-obvious and is strongly tied to the use of L</delete> on arrays.  B<Be aware>
-that calling exists on array values is deprecated and likely to be removed in
-a future version of Perl.
+obvious and is strongly tied to the use of L</delete> on arrays.
+
+B<WARNING:> Calling C<exists> on array values is strongly discouraged.  The
+notion of deleting or checking the existence of Perl array elements is not
+conceptually coherent, and can lead to surprising behavior.
 
     print "Exists\n"    if exists $array[$index];
     print "Defined\n"   if defined $array[$index];
@@ -3358,7 +3362,7 @@ Respects current LC_CTYPE locale for code points < 256; and uses Unicode
 rules for the remaining code points (this last can only happen if
 the UTF8 flag is also set).  See L<perllocale>.
 
-Starting in v5.20, Perl wil use full Unicode rules if the locale is
+Starting in v5.20, Perl uses full Unicode rules if the locale is
 UTF-8.  Otherwise, there is a deficiency in this scheme, which is that
 case changes that cross the 255/256
 boundary are not well-defined.  For example, the lower case of LATIN CAPITAL
@@ -3673,12 +3677,13 @@ C<{>.  Usually it gets it right, but if it
 doesn't it won't realize something is wrong until it gets to the C<}> and
 encounters the missing (or unexpected) comma.  The syntax error will be
 reported close to the C<}>, but you'll need to change something near the C<{>
-such as using a unary C<+> to give Perl some help:
+such as using a unary C<+> or semicolon to give Perl some help:
 
     %hash = map {  "\L$_" => 1  } @array # perl guesses EXPR. wrong
     %hash = map { +"\L$_" => 1  } @array # perl guesses BLOCK. right
-    %hash = map { ("\L$_" => 1) } @array # this also works
-    %hash = map {  lc($_) => 1  } @array # as does this.
+    %hash = map {; "\L$_" => 1  } @array # this also works
+    %hash = map { ("\L$_" => 1) } @array # as does this
+    %hash = map {  lc($_) => 1  } @array # and this.
     %hash = map +( lc($_) => 1 ), @array # this is EXPR and works!
 
     %hash = map  ( lc($_), 1 ),   @array # evaluates to (1, @array)
@@ -4362,7 +4367,8 @@ existing variable: a package variable of the same name.
 
 This means that when C<use strict 'vars'> is in effect, C<our> lets you use
 a package variable without qualifying it with the package name, but only within
-the lexical scope of the C<our> declaration.
+the lexical scope of the C<our> declaration. This applies immediately--even
+within the same statement.
 
     package Foo;
     use strict;
@@ -4388,6 +4394,16 @@ package variables spring into existence when first used.
 
     print $Foo::foo; # prints 23
 
+Because the variable becomes legal immediately under C<use strict 'vars'>, so
+long as there is no variable with that name is already in scope, you can then
+reference the package variable again even within the same statement.
+
+    package Foo;
+    use strict;
+
+    my  $foo = $foo; # error, undeclared $foo on right-hand side
+    our $foo = $foo; # no errors
+
 If more than one variable is listed, the list must be placed
 in parentheses.
 
@@ -7645,7 +7661,8 @@ list context is currently not possible this would serve no purpose.
 
 C<state> variables are enabled only when the C<use feature "state"> pragma 
 is in effect, unless the keyword is written as C<CORE::state>.
-See also L<feature>.
+See also L<feature>. Alternately, include a C<use v5.10> or later to the
+current scope.
 
 =item study SCALAR
 X<study>
@@ -8602,15 +8619,19 @@ This is often useful if you need to check the current Perl version before
 C<use>ing library modules that won't work with older versions of Perl.
 (We try not to do this more than we have to.)
 
-C<use VERSION> also enables all features available in the requested
+C<use VERSION> also lexically enables all features available in the requested
 version as defined by the C<feature> pragma, disabling any features
 not in the requested version's feature bundle.  See L<feature>.
 Similarly, if the specified Perl version is greater than or equal to
 5.12.0, strictures are enabled lexically as
 with C<use strict>.  Any explicit use of
 C<use strict> or C<no strict> overrides C<use VERSION>, even if it comes
-before it.  In both cases, the F<feature.pm> and F<strict.pm> files are
-not actually loaded.
+before it.  Later use of C<use VERSION>
+will override all behavior of a previous
+C<use VERSION>, possibly removing the C<strict> and C<feature> added by
+C<use VERSION>.  C<use VERSION> does not
+load the F<feature.pm> or F<strict.pm>
+files.
 
 The C<BEGIN> forces the C<require> and C<import> to happen at compile time.  The
 C<require> makes sure the module is loaded into memory if it hasn't been
@@ -9045,8 +9066,8 @@ and C<${^CHILD_ERROR_NATIVE}>.
 Note that a return value of C<-1> could mean that child processes are
 being automatically reaped, as described in L<perlipc>.
 
-If you use wait in your handler for $SIG{CHLD} it may accidentally for the
-child created by qx() or system().  See L<perlipc> for details.
+If you use C<wait> in your handler for $SIG{CHLD}, it may accidentally wait
+for the child created by qx() or system().  See L<perlipc> for details.
 
 Portability issues: L<perlport/wait>.
 
@@ -9280,8 +9301,6 @@ This keyword is documented in L<perlsub/"Autoloading">.
 
 =item else
 
-=item elseif
-
 =item elsif
 
 =item for
@@ -9298,6 +9317,15 @@ This keyword is documented in L<perlsub/"Autoloading">.
 
 These flow-control keywords are documented in L<perlsyn/"Compound Statements">.
 
+=item elseif
+
+The "else if" keyword is spelled C<elsif> in Perl.  There's no C<elif>
+or C<else if> either.  It does parse C<elseif>, but only to warn you
+about not using it.
+
+See the documentation for flow-control keywords in L<perlsyn/"Compound
+Statements">.
+
 =back
 
 =over
index 90ab204..d845010 100644 (file)
@@ -1766,7 +1766,7 @@ A scratchpad keeps SVs which are lexicals for the current unit and are
 targets for opcodes.  A previous version of this document
 stated that one can deduce that an SV lives on a scratchpad
 by looking on its flags: lexicals have C<SVs_PADMY> set, and
-I<target>s have C<SVs_PADTMP> set.  But this have never been fully true.
+I<target>s have C<SVs_PADTMP> set.  But this has never been fully true.
 C<SVs_PADMY> could be set on a variable that no longer resides in any pad.
 While I<target>s do have C<SVs_PADTMP> set, it can also be set on variables
 that have never resided in a pad, but nonetheless act like I<target>s.
index 2cf9c58..7afc2fc 100644 (file)
@@ -515,6 +515,10 @@ the strings?).
  Ricardo  5.18.1-RC3    2013-Aug-08
  Ricardo  5.18.1        2013-Aug-12
  Ricardo  5.18.2        2014-Jan-06
+ Ricardo  5.18.3-RC1    2014-Sep-17
+ Ricardo  5.18.3-RC2    2014-Sep-27
+ Ricardo  5.18.3        2014-Oct-01
+ Ricardo  5.18.4        2014-Oct-01
 
  Ricardo   5.19.0       2013-May-20     The 5.19 development track
  David G   5.19.1       2013-Jun-21
@@ -534,11 +538,18 @@ the strings?).
  Steve     5.20.1-RC1   2014-Aug-25
  Steve     5.20.1-RC2   2014-Sep-07
  Steve     5.20.1       2014-Sep-14
+ Steve     5.20.2-RC1   2015-Jan-31
+ Steve     5.20.2       2015-Feb-14
 
  Ricardo   5.21.0       2014-May-27     The 5.21 development track
  Matthew H 5.21.1       2014-Jun-20
  Abigail   5.21.2       2014-Jul-20
  Peter     5.21.3       2014-Aug-20
+ Steve     5.21.4       2014-Sep-20
+ Abigail   5.21.5       2014-Oct-20
+ BinGOs    5.21.6       2014-Nov-20
+ Max M     5.21.7       2014-Dec-20
+ Matthew H 5.21.8       2015-Jan-20
 
 =head2 SELECTED RELEASE SIZES
 
index 0e00d18..49c605b 100644 (file)
@@ -28,7 +28,7 @@ For example, to trap an interrupt signal, set up a handler like this:
         $shucks++;
         die "Somebody sent me a SIG$signame";
     }
-    $SIG{INT} = __PACKAGE__ . "::catch_zap";  
+    $SIG{INT} = __PACKAGE__ . "::catch_zap";
     $SIG{INT} = \&catch_zap;  # best strategy
 
 Prior to Perl 5.8.0 it was necessary to do as little as you possibly
@@ -61,7 +61,7 @@ have to use POSIX' sigprocmask.
 
 Sending a signal to a negative process ID means that you send the signal
 to the entire Unix process group.  This code sends a hang-up signal to all
-processes in the current process group, and also sets $SIG{HUP} to C<"IGNORE"> 
+processes in the current process group, and also sets $SIG{HUP} to C<"IGNORE">
 so it doesn't kill itself:
 
     # block scope for local
@@ -188,12 +188,15 @@ itself every time the C<SIGHUP> signal is received. The actual code is
 located in the subroutine C<code()>, which just prints some debugging
 info to show that it works; it should be replaced with the real code.
 
-  #!/usr/bin/perl -w
+  #!/usr/bin/perl
+
+  use strict;
+  use warnings;
 
   use POSIX ();
   use FindBin ();
   use File::Basename ();
-  use File::Spec::Functions;
+  use File::Spec::Functions qw(catfile);
 
   $| = 1;
 
@@ -214,9 +217,9 @@ info to show that it works; it should be replaced with the real code.
       print "PID: $$\n";
       print "ARGV: @ARGV\n";
       my $count = 0;
-      while (++$count) {
+      while (1) {
           sleep 2;
-          print "$count\n";
+          print ++$count, "\n";
       }
   }
 
@@ -263,7 +266,7 @@ to execute a new opcode, a signal that arrives during a long-running
 opcode (e.g. a regular expression operation on a very large string) will
 not be seen until the current opcode completes.
 
-If a signal of any given type fires multiple times during an opcode 
+If a signal of any given type fires multiple times during an opcode
 (such as from a fine-grained timer), the handler for that signal will
 be called only once, after the opcode completes; all other
 instances will be discarded.  Furthermore, if your system's signal queue
@@ -327,12 +330,12 @@ On systems that supported it, older versions of Perl used the
 SA_RESTART flag when installing %SIG handlers.  This meant that
 restartable system calls would continue rather than returning when
 a signal arrived.  In order to deliver deferred signals promptly,
-Perl 5.8.0 and later do I<not> use SA_RESTART.  Consequently, 
+Perl 5.8.0 and later do I<not> use SA_RESTART.  Consequently,
 restartable system calls can fail (with $! set to C<EINTR>) in places
 where they previously would have succeeded.
 
 The default C<:perlio> layer retries C<read>, C<write>
-and C<close> as described above; interrupted C<wait> and 
+and C<close> as described above; interrupted C<wait> and
 C<waitpid> calls will always be retried.
 
 =item Signals as "faults"
@@ -469,7 +472,7 @@ to bogus commands will get hit with a signal, which they'd best be prepared
 to handle.  Consider:
 
     open(FH, "|bogus")      || die "can't fork: $!";
-    print FH "bang\n";      #  neither necessary nor sufficient 
+    print FH "bang\n";      #  neither necessary nor sufficient
                             #  to check print retval!
     close(FH)               || die "can't close: $!";
 
@@ -529,7 +532,7 @@ process group leader; the setsid() will fail if you are.  If your
 system doesn't have the setsid() function, open F</dev/tty> and use the
 C<TIOCNOTTY> ioctl() on it instead.  See tty(4) for details.
 
-Non-Unix users should check their C<< I<Your_OS>::Process >> module for 
+Non-Unix users should check their C<< I<Your_OS>::Process >> module for
 other possible solutions.
 
 =head2 Safe Pipe Opens
@@ -559,13 +562,13 @@ you opened whatever your kid writes to I<his> STDOUT.
         }
     } until defined $pid;
 
-    if ($pid) {                 # I am the parent 
+    if ($pid) {                 # I am the parent
         print KID_TO_WRITE @some_data;
         close(KID_TO_WRITE)     || warn "kid exited $?";
     } else {                    # I am the child
         # drop permissions in setuid and/or setgid programs:
-        ($EUID, $EGID) = ($UID, $GID);  
-        open (OUTFILE, "> $PRECIOUS") 
+        ($EUID, $EGID) = ($UID, $GID);
+        open (OUTFILE, "> $PRECIOUS")
                                 || die "can't open $PRECIOUS: $!";
         while (<STDIN>) {
             print OUTFILE;      # child's STDIN is parent's KID_TO_WRITE
@@ -617,7 +620,7 @@ And here's a safe pipe open for writing:
     }
 
 It is very easy to dead-lock a process using this form of open(), or
-indeed with any use of pipe() with multiple subprocesses.  The 
+indeed with any use of pipe() with multiple subprocesses.  The
 example above is "safe" because it is simple and calls exec().  See
 L</"Avoiding Pipe Deadlocks"> for general safety principles, but there
 are extra gotchas with Safe Pipe Opens.
@@ -696,7 +699,7 @@ So for example, instead of using:
 
 One would use either of these:
 
-    open(PS_PIPE, "-|", "ps", "aux") 
+    open(PS_PIPE, "-|", "ps", "aux")
                                 || die "can't open ps pipe: $!";
 
     @ps_args = qw[ ps aux ];
@@ -706,7 +709,7 @@ One would use either of these:
 Because there are more than three arguments to open(), forks the ps(1)
 command I<without> spawning a shell, and reads its standard output via the
 C<PS_PIPE> filehandle.  The corresponding syntax to I<write> to command
-pipes is to use C<"|-"> in place of C<"-|">.  
+pipes is to use C<"|-"> in place of C<"-|">.
 
 This was admittedly a rather silly example, because you're using string
 literals whose content is perfectly safe.  There is therefore no cause to
@@ -774,7 +777,7 @@ except on a Unix system, or at least one purporting POSIX compliance.
 
 =for TODO
 Hold on, is this even true?  First it says that socketpair() is avoided
-for portability, but then it says it probably won't work except on 
+for portability, but then it says it probably won't work except on
 Unixy systems anyway.  Which one of those is true?
 
 Here's an example of using open2():
@@ -819,7 +822,7 @@ reopen the appropriate handles to STDIN and STDOUT and call other processes.
     PARENT_WTR->autoflush(1);
 
     if ($pid = fork()) {
-        close PARENT_RDR; 
+        close PARENT_RDR;
         close PARENT_WTR;
         print CHILD_WTR "Parent Pid $$ is sending this\n";
         chomp($line = <CHILD_RDR>);
@@ -828,12 +831,12 @@ reopen the appropriate handles to STDIN and STDOUT and call other processes.
         waitpid($pid, 0);
     } else {
         die "cannot fork: $!" unless defined $pid;
-        close CHILD_RDR; 
+        close CHILD_RDR;
         close CHILD_WTR;
         chomp($line = <PARENT_RDR>);
         print "Child Pid $$ just read this: '$line'\n";
         print PARENT_WTR "Child Pid $$ is sending this\n";
-        close PARENT_RDR; 
+        close PARENT_RDR;
         close PARENT_WTR;
         exit(0);
     }
@@ -892,7 +895,7 @@ don't need to pass that information.
 One of the major problems with ancient, antemillennial socket code in Perl
 was that it used hard-coded values for some of the constants, which
 severely hurt portability.  If you ever see code that does anything like
-explicitly setting C<$AF_INET = 2>, you know you're in for big trouble.  
+explicitly setting C<$AF_INET = 2>, you know you're in for big trouble.
 An immeasurably superior approach is to use the C<Socket> module, which more
 reliably grants access to the various constants and functions you'll need.
 
@@ -913,7 +916,7 @@ completely different.  The standards specify writing "\015\012" to be
 conformant (be strict in what you provide), but they also recommend
 accepting a lone "\012" on input (be lenient in what you require).
 We haven't always been very good about that in the code in this manpage,
-but unless you're on a Mac from way back in its pre-Unix dark ages, you'll 
+but unless you're on a Mac from way back in its pre-Unix dark ages, you'll
 probably be ok.
 
 =head2 Internet TCP Clients and Servers
@@ -966,7 +969,7 @@ or firewall machine), fill this in with your real address instead.
     my $proto = getprotobyname("tcp");
 
     socket(Server, PF_INET, SOCK_STREAM, $proto)    || die "socket: $!";
-    setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))    
+    setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))
                                                     || die "setsockopt: $!";
     bind(Server, sockaddr_in($port, INADDR_ANY))    || die "bind: $!";
     listen(Server, SOMAXCONN)                       || die "listen: $!";
@@ -1010,7 +1013,7 @@ go back to service a new client.
     my $proto = getprotobyname("tcp");
 
     socket(Server, PF_INET, SOCK_STREAM, $proto)    || die "socket: $!";
-    setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))         
+    setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))
                                                     || die "setsockopt: $!";
     bind(Server, sockaddr_in($port, INADDR_ANY))    || die "bind: $!";
     listen(Server, SOMAXCONN)                       || die "listen: $!";
@@ -1066,7 +1069,7 @@ go back to service a new client.
         unless (defined($pid = fork())) {
             logmsg "cannot fork: $!";
             return;
-        } 
+        }
         elsif ($pid) {
             logmsg "begat $pid";
             return; # I'm the parent
@@ -1096,15 +1099,15 @@ to be reported.  However, the introduction of safe signals (see
 L</Deferred Signals (Safe Signals)> above) in Perl 5.8.0 means that
 accept() might also be interrupted when the process receives a signal.
 This typically happens when one of the forked subprocesses exits and
-notifies the parent process with a CHLD signal.  
+notifies the parent process with a CHLD signal.
 
 If accept() is interrupted by a signal, $! will be set to EINTR.
 If this happens, we can safely continue to the next iteration of
 the loop and another call to accept().  It is important that your
-signal handling code not modify the value of $!, or else this test 
+signal handling code not modify the value of $!, or else this test
 will likely fail.  In the REAPER subroutine we create a local version
 of $! before calling waitpid().  When waitpid() sets $! to ECHILD as
-it inevitably does when it has no more children waiting, it 
+it inevitably does when it has no more children waiting, it
 updates the local copy and leaves the original unchanged.
 
 You should use the B<-T> flag to enable taint checking (see L<perlsec>)
@@ -1137,7 +1140,7 @@ differ from the system on which it's being run:
         printf "%-24s ", $host;
         my $hisiaddr = inet_aton($host)     || die "unknown host";
         my $hispaddr = sockaddr_in($port, $hisiaddr);
-        socket(SOCKET, PF_INET, SOCK_STREAM, $proto)   
+        socket(SOCKET, PF_INET, SOCK_STREAM, $proto)
                                             || die "socket: $!";
         connect(SOCKET, $hispaddr)          || die "connect: $!";
         my $rtime = pack("C4", ());
@@ -1240,11 +1243,11 @@ to be on the localhost, and thus everything works right.
         unless (defined($pid = fork())) {
             logmsg "cannot fork: $!";
             return;
-        } 
+        }
         elsif ($pid) {
             logmsg "begat $pid";
             return; # I'm the parent
-        } 
+        }
         else {
             # I'm the child -- go spawn
         }
@@ -1815,9 +1818,9 @@ The IO::Socket(3) manpage describes the object library, and the Socket(3)
 manpage describes the low-level interface to sockets.  Besides the obvious
 functions in L<perlfunc>, you should also check out the F<modules> file at
 your nearest CPAN site, especially
-L<http://www.cpan.org/modules/00modlist.long.html#ID5_Networking_>.  
+L<http://www.cpan.org/modules/00modlist.long.html#ID5_Networking_>.
 See L<perlmodlib> or best yet, the F<Perl FAQ> for a description
-of what CPAN is and where to get it if the previous link doesn't work 
+of what CPAN is and where to get it if the previous link doesn't work
 for you.
 
 Section 5 of CPAN's F<modules> file is devoted to "Networking, Device
index 1d7e4e4..40fc3e6 100644 (file)
@@ -373,6 +373,10 @@ C<POSIX::setlocale()> function:
         # restore the old locale
         setlocale(LC_CTYPE, $old_locale);
 
+This simultaneously affects all threads of the program, so it may be
+problematic to use locales in threaded applications except where there
+is a single locale applicable to all threads.
+
 The first argument of C<setlocale()> gives the B<category>, the second the
 B<locale>.  The category tells in what aspect of data processing you
 want to apply locale-specific rules.  Category names are discussed in
@@ -539,7 +543,7 @@ alphabetically in your system is called).
 
 You can test out changing these variables temporarily, and if the
 new settings seem to help, put those settings into your shell startup
-files.  Consult your local documentation for the exact details.  For in
+files.  Consult your local documentation for the exact details.  For
 Bourne-like shells (B<sh>, B<ksh>, B<bash>, B<zsh>):
 
        LC_ALL=en_US.ISO8859-1
@@ -551,7 +555,7 @@ locale "En_US"--and in Cshish shells (B<csh>, B<tcsh>)
 
        setenv LC_ALL en_US.ISO8859-1
 
-or if you have the "env" application you can do in any shell
+or if you have the "env" application you can do (in any shell)
 
        env LC_ALL=en_US.ISO8859-1 perl ...
 
@@ -712,7 +716,7 @@ alphabets, but where do "E<aacute>" and "E<aring>" belong?  And while
 "color" follows "chocolate" in English, what about in traditional Spanish?
 
 The following collations all make sense and you may meet any of them
-if you "use locale".
+if you C<"use locale">.
 
        A B C D E a b c d e
        A a B b C c D d E e
@@ -749,7 +753,7 @@ C<$equal_in_locale> will be true if the collation locale specifies a
 dictionary-like ordering that ignores space characters completely and
 which folds case.
 
-Perl only supports single-byte locales for C<LC_COLLATE>.  This means
+Perl currently only supports single-byte locales for C<LC_COLLATE>.  This means
 that a UTF-8 locale likely will just give you machine-native ordering.
 Use L<Unicode::Collate> for the full implementation of the Unicode
 Collation Algorithm.
@@ -808,15 +812,16 @@ information on all these.)
 
 The C<LC_CTYPE> locale also provides the map used in transliterating
 characters between lower and uppercase.  This affects the case-mapping
-functions--C<fc()>, C<lc()>, C<lcfirst()>, C<uc()>, and C<ucfirst()>; case-mapping
+functions--C<fc()>, C<lc()>, C<lcfirst()>, C<uc()>, and C<ucfirst()>;
+case-mapping
 interpolation with C<\F>, C<\l>, C<\L>, C<\u>, or C<\U> in double-quoted
 strings and C<s///> substitutions; and case-independent regular expression
 pattern matching using the C<i> modifier.
 
 Finally, C<LC_CTYPE> affects the (deprecated) POSIX character-class test
 functions--C<POSIX::isalpha()>, C<POSIX::islower()>, and so on.  For
-example, if you move from the "C" locale to a 7-bit Scandinavian one,
-you may find--possibly to your surprise--that "|" moves from the
+example, if you move from the "C" locale to a 7-bit ISO 646 one,
+you may find--possibly to your surprise--that C<"|"> moves from the
 C<POSIX::ispunct()> class to C<POSIX::isalpha()>.
 Unfortunately, this creates big problems for regular expressions. "|" still
 means alternation even though it matches C<\w>.
@@ -824,7 +829,7 @@ means alternation even though it matches C<\w>.
 Starting in v5.20, Perl supports UTF-8 locales for C<LC_CTYPE>, but
 otherwise Perl only supports single-byte locales, such as the ISO 8859
 series.  This means that wide character locales, for example for Asian
-languages, are not supported.  The UTF-8 locale support is actually a
+languages, are not well-supported.  The UTF-8 locale support is actually a
 superset of POSIX locales, because it is really full Unicode behavior
 as if no locale were in effect at all (except for tainting; see
 L</SECURITY>).  POSIX locales, even UTF-8 ones,
@@ -837,7 +842,11 @@ For releases v5.16 and v5.18, C<S<use locale 'not_characters>> could be
 used as a workaround for this (see L</Unicode and UTF-8>).
 
 Note that there are quite a few things that are unaffected by the
-current locale.  All the escape sequences for particular characters,
+current locale.  Any literal character is the native character for the
+given platform.  Hence 'A' means the character at code point 65 on ASCII
+platforms, and 193 on EBCDIC.  That may or may not be an 'A' in the
+current locale, if that locale even has an 'A'.
+Similarly, all the escape sequences for particular characters,
 C<\n> for example, always mean the platform's native one.  This means,
 for example, that C<\N> in regular expressions (every character
 but new-line) works on the platform character set.
@@ -940,7 +949,7 @@ results.  Here are a few possibilities:
 
 Regular expression checks for safe file names or mail addresses using
 C<\w> may be spoofed by an C<LC_CTYPE> locale that claims that
-characters such as "E<gt>" and "|" are alphanumeric.
+characters such as C<"E<gt>"> and C<"|"> are alphanumeric.
 
 =item *
 
@@ -1397,9 +1406,10 @@ the characters in the upper half of the Latin-1 range (128 - 255)
 properly under C<LC_CTYPE>.  To see if a character is a particular type
 under a locale, Perl uses the functions like C<isalnum()>.  Your C
 library may not work for UTF-8 locales with those functions, instead
-only working under the newer wide library functions like C<iswalnum()>.
-However, they are treated like single-byte locales, and will have the
-restrictions described below.
+only working under the newer wide library functions like C<iswalnum()>,
+which Perl does not use.
+These multi-byte locales are treated like single-byte locales, and will
+have the restrictions described below.
 
 For single-byte locales,
 Perl generally takes the tack to use locale rules on code points that can fit
@@ -1419,7 +1429,7 @@ Unicode, C<\p{Alpha}> will never match it, regardless of locale.  A similar
 issue occurs with C<\N{...}>.  Prior to v5.20, It is therefore a bad
 idea to use C<\p{}> or
 C<\N{}> under plain C<use locale>--I<unless> you can guarantee that the
-locale will be ISO8859-1.  Use POSIX character classes instead.
+locale will be ISO8859-1.  Use POSIX character classes instead.
 
 Another problem with this approach is that operations that cross the
 single byte/multiple byte boundary are not well-defined, and so are
@@ -1471,9 +1481,9 @@ byte, and Unicode rules for those that can't is not uniformly applied.
 Pre-v5.12, it was somewhat haphazard; in v5.12 it was applied fairly
 consistently to regular expression matching except for bracketed
 character classes; in v5.14 it was extended to all regex matches; and in
-v5.16 to the casing operations such as C<"\L"> and C<uc()>.  For
-collation, in all releases, the system's C<strxfrm()> function is called,
-and whatever it does is what you get.
+v5.16 to the casing operations such as C<\L> and C<uc()>.  For
+collation, in all releases so far, the system's C<strxfrm()> function is
+called, and whatever it does is what you get.
 
 =head1 BUGS
 
index f708cc0..0ed4bd9 100644 (file)
@@ -4,6 +4,27 @@ perlmod - Perl modules (packages and symbol tables)
 
 =head1 DESCRIPTION
 
+=head2 Is this the document you were after?
+
+There are other documents which might contain the information that you're
+looking for:
+
+=over 2
+
+=item This doc
+
+Perl's packages, namespaces, and some info on classes.
+
+=item L<perlnewmod>
+
+Tutorial on making a new module.
+
+=item L<perlmodstyle>
+
+Best practices for making a new module.
+
+=back
+
 =head2 Packages
 X<package> X<namespace> X<variable, global> X<global variable> X<global>
 
index 9a2634e..f92620c 100644 (file)
@@ -79,11 +79,11 @@ You can get gzip from ftp://prep.ai.mit.edu/pub/gnu/
 
 Or, you can combine this step with the next to save disk space:
 
-     gzip -dc yourmodule.tar.gz | tar -xf -
+     gzip -dc yourmodule.tar.gz | tar -xof -
 
 B. UNPACK
 
-Unpack the result with C<tar -xf yourmodule.tar>
+Unpack the result with C<tar -xof yourmodule.tar>
 
 C. BUILD
 
index 4bcdcbf..56d463a 100644 (file)
@@ -6,15 +6,15 @@ perlop - Perl operators and precedence
 =head1 DESCRIPTION
 
 In Perl, the operator determines what operation is performed,
-independent of the type of the operands. For example C<$a + $b>
-is always a numeric addition, and if C<$a> or C<$b> do not contain
+independent of the type of the operands.  For example C<$x + $y>
+is always a numeric addition, and if C<$x> or C<$y> do not contain
 numbers, an attempt is made to convert them to numbers first.
 
 This is in contrast to many other dynamic languages, where the
-operation is determined by the type of the first argument. It also
+operation is determined by the type of the first argument.  It also
 means that Perl has two versions of some operators, one for numeric
-and one for string comparison. For example C<$a == $b> compares
-two numbers for equality, and C<$a eq $b> compares two strings.
+and one for string comparison.  For example C<$x == $y> compares
+two numbers for equality, and C<$x eq $y> compares two strings.
 
 There are a few exceptions though: C<x> can be either string
 repetition or list repetition, depending on the type of the left
@@ -170,8 +170,8 @@ value.
     print ++$j;  # prints 1
 
 Note that just as in C, Perl doesn't define B<when> the variable is
-incremented or decremented. You just know it will be done sometime
-before or after the value is returned. This also means that modifying
+incremented or decremented.  You just know it will be done sometime
+before or after the value is returned.  This also means that modifying
 a variable twice in the same statement will lead to undefined behavior.
 Avoid statements like:
 
@@ -203,7 +203,7 @@ The auto-decrement operator is not magical.
 X<**> X<exponentiation> X<power>
 
 Binary "**" is the exponentiation operator.  It binds even more
-tightly than unary minus, so -2**4 is -(2**4), not (-2)**4. (This is
+tightly than unary minus, so -2**4 is -(2**4), not (-2)**4.  (This is
 implemented using C's pow(3) function, which actually works on doubles
 internally.)
 
@@ -222,7 +222,7 @@ with a plus or minus, a string starting with the opposite sign is
 returned.  One effect of these rules is that -bareword is equivalent
 to the string "-bareword".  If, however, the string begins with a
 non-alphabetic character (excluding "+" or "-"), Perl will attempt to convert
-the string to a numeric and the arithmetic negation is performed. If the
+the string to a numeric and the arithmetic negation is performed.  If the
 string cannot be cleanly converted to a numeric, Perl will give the warning
 B<Argument "the string" isn't numeric in negation (-) at ...>.
 X<-> X<negation, arithmetic>
@@ -271,7 +271,8 @@ examples using these operators.
 
 If the right argument is an expression rather than a search pattern,
 substitution, or transliteration, it is interpreted as a search pattern at run
-time. Note that this means that its contents will be interpolated twice, so
+time.  Note that this means that its
+contents will be interpolated twice, so
 
     '\\' =~ q'\\';
 
@@ -296,21 +297,21 @@ X</> X<slash>
 Binary "%" is the modulo operator, which computes the division
 remainder of its first argument with respect to its second argument.
 Given integer
-operands C<$a> and C<$b>: If C<$b> is positive, then C<$a % $b> is
-C<$a> minus the largest multiple of C<$b> less than or equal to
-C<$a>.  If C<$b> is negative, then C<$a % $b> is C<$a> minus the
-smallest multiple of C<$b> that is not less than C<$a> (that is, the
+operands C<$m> and C<$n>: If C<$n> is positive, then C<$m % $n> is
+C<$m> minus the largest multiple of C<$n> less than or equal to
+C<$m>.  If C<$n> is negative, then C<$m % $n> is C<$m> minus the
+smallest multiple of C<$n> that is not less than C<$m> (that is, the
 result will be less than or equal to zero).  If the operands
-C<$a> and C<$b> are floating point values and the absolute value of
-C<$b> (that is C<abs($b)>) is less than C<(UV_MAX + 1)>, only
-the integer portion of C<$a> and C<$b> will be used in the operation
+C<$m> and C<$n> are floating point values and the absolute value of
+C<$n> (that is C<abs($n)>) is less than C<(UV_MAX + 1)>, only
+the integer portion of C<$m> and C<$n> will be used in the operation
 (Note: here C<UV_MAX> means the maximum of the unsigned integer type).
-If the absolute value of the right operand (C<abs($b)>) is greater than
+If the absolute value of the right operand (C<abs($n)>) is greater than
 or equal to C<(UV_MAX + 1)>, "%" computes the floating-point remainder
-C<$r> in the equation C<($r = $a - $i*$b)> where C<$i> is a certain
+C<$r> in the equation C<($r = $m - $i*$n)> where C<$i> is a certain
 integer that makes C<$r> have the same sign as the right operand
-C<$b> (B<not> as the left operand C<$a> like C function C<fmod()>)
-and the absolute value less than that of C<$b>.
+C<$n> (B<not> as the left operand C<$m> like C function C<fmod()>)
+and the absolute value less than that of C<$n>.
 Note that when C<use integer> is in scope, "%" gives you direct access
 to the modulo operator as implemented by your C compiler.  This
 operator is not as well defined for negative operands, but it will
@@ -475,15 +476,15 @@ Binary "<=>" returns -1, 0, or 1 depending on whether the left
 argument is numerically less than, equal to, or greater than the right
 argument.  If your platform supports NaNs (not-a-numbers) as numeric
 values, using them with "<=>" returns undef.  NaN is not "<", "==", ">",
-"<=" or ">=" anything (even NaN), so those 5 return false. NaN != NaN
-returns true, as does NaN != anything else. If your platform doesn't
+"<=" or ">=" anything (even NaN), so those 5 return false.  NaN != NaN
+returns true, as does NaN != anything else.  If your platform doesn't
 support NaNs then NaN is just a string with numeric value 0.
 X<< <=> >> X<spaceship>
 
-    $ perl -le '$a = "NaN"; print "No NaN support here" if $a == $a'
-    $ perl -le '$a = "NaN"; print "NaN support here" if $a != $a'
+    $ perl -le '$x = "NaN"; print "No NaN support here" if $x == $x'
+    $ perl -le '$x = "NaN"; print "NaN support here" if $x != $x'
 
-(Note that the L<bigint>, L<bigrat>, and L<bignum> pragmas all 
+(Note that the L<bigint>, L<bigrat>, and L<bignum> pragmas all
 support "NaN".)
 
 Binary "eq" returns true if the left argument is stringwise equal to
@@ -724,7 +725,7 @@ That because the corresponding position in C<@a> contains an array that
 (eventually) has a 4 in it.
 
 Smartmatching one hash against another reports whether both contain the
-same keys, no more and no less. This could be used to see whether two
+same keys, no more and no less.  This could be used to see whether two
 records have the same field names, without caring what values those fields
 might have.  For example:
 
@@ -762,8 +763,8 @@ C<when> clause.  See the section on "Switch Statements" in L<perlsyn>.
 To avoid relying on an object's underlying representation, if the
 smartmatch's right operand is an object that doesn't overload C<~~>,
 it raises the exception "C<Smartmatching a non-overloaded object
-breaks encapsulation>". That's because one has no business digging
-around to see whether something is "in" an object. These are all
+breaks encapsulation>".  That's because one has no business digging
+around to see whether something is "in" an object.  These are all
 illegal on objects without a C<~~> overload:
 
     %hash ~~ $object
@@ -771,7 +772,8 @@ illegal on objects without a C<~~> overload:
    "fred" ~~ $object
 
 However, you can change the way an object is smartmatched by overloading
-the C<~~> operator. This is allowed to extend the usual smartmatch semantics.
+the C<~~> operator.  This is allowed to
+extend the usual smartmatch semantics.
 For objects that do have an C<~~> overload, see L<overload>.
 
 Using an object as the left operand is allowed, although not very useful.
@@ -857,16 +859,17 @@ Although it has no direct equivalent in C, Perl's C<//> operator is related
 to its C-style or.  In fact, it's exactly the same as C<||>, except that it
 tests the left hand side's definedness instead of its truth.  Thus,
 C<< EXPR1 // EXPR2 >> returns the value of C<< EXPR1 >> if it's defined,
-otherwise, the value of C<< EXPR2 >> is returned. (C<< EXPR1 >> is evaluated
-in scalar context, C<< EXPR2 >> in the context of C<< // >> itself). Usually,
+otherwise, the value of C<< EXPR2 >> is returned.
+(C<< EXPR1 >> is evaluated in scalar context, C<< EXPR2 >>
+in the context of C<< // >> itself).  Usually,
 this is the same result as C<< defined(EXPR1) ? EXPR1 : EXPR2 >> (except that
 the ternary-operator form can be used as a lvalue, while C<< EXPR1 // EXPR2 >>
-cannot). This is very useful for
+cannot).  This is very useful for
 providing default values for variables.  If you actually want to test if
-at least one of C<$a> and C<$b> is defined, use C<defined($a // $b)>.
+at least one of C<$x> and C<$y> is defined, use C<defined($x // $y)>.
 
 The C<||>, C<//> and C<&&> operators return the last value evaluated
-(unlike C's C<||> and C<&&>, which return 0 or 1). Thus, a reasonably
+(unlike C's C<||> and C<&&>, which return 0 or 1).  Thus, a reasonably
 portable way to find out the home directory might be:
 
     $home =  $ENV{HOME}
@@ -912,7 +915,7 @@ operators depending on the context.  In list context, it returns a
 list of values counting (up by ones) from the left value to the right
 value.  If the left value is greater than the right value then it
 returns the empty list.  The range operator is useful for writing
-C<foreach (1..10)> loops and for doing slice operations on arrays. In
+C<foreach (1..10)> loops and for doing slice operations on arrays.  In
 the current implementation, no temporary array is created when the
 range operator is used as the expression in C<foreach> loops, but older
 versions of Perl might burn a lot of memory when you write something
@@ -927,15 +930,15 @@ auto-increment, see below.
 
 In scalar context, ".." returns a boolean value.  The operator is
 bistable, like a flip-flop, and emulates the line-range (comma)
-operator of B<sed>, B<awk>, and various editors. Each ".." operator
+operator of B<sed>, B<awk>, and various editors.  Each ".." operator
 maintains its own boolean state, even across calls to a subroutine
-that contains it. It is false as long as its left operand is false.
+that contains it.  It is false as long as its left operand is false.
 Once the left operand is true, the range operator stays true until the
 right operand is true, I<AFTER> which the range operator becomes false
 again.  It doesn't become false till the next time the range operator
 is evaluated.  It can test the right operand and become false on the
 same evaluation it became true (as in B<awk>), but it still returns
-true once. If you don't want it to test the right operand until the
+true once.  If you don't want it to test the right operand until the
 next evaluation, as in B<sed>, just use three dots ("...") instead of
 two.  In all other regards, "..." behaves just like ".." does.
 
@@ -1003,7 +1006,7 @@ the two range operators:
         }
     }
 
-This program will print only the line containing "Bar". If
+This program will print only the line containing "Bar".  If
 the range operator is changed to C<...>, it will also print the
 "Baz" line.
 
@@ -1076,31 +1079,31 @@ is returned.  For example:
 Scalar or list context propagates downward into the 2nd
 or 3rd argument, whichever is selected.
 
-    $a = $ok ? $b : $c;  # get a scalar
-    @a = $ok ? @b : @c;  # get an array
-    $a = $ok ? @b : @c;  # oops, that's just a count!
+    $x = $ok ? $y : $z;  # get a scalar
+    @x = $ok ? @y : @z;  # get an array
+    $x = $ok ? @y : @z;  # oops, that's just a count!
 
 The operator may be assigned to if both the 2nd and 3rd arguments are
 legal lvalues (meaning that you can assign to them):
 
-    ($a_or_b ? $a : $b) = $c;
+    ($x_or_y ? $x : $y) = $z;
 
 Because this operator produces an assignable result, using assignments
 without parentheses will get you in trouble.  For example, this:
 
-    $a % 2 ? $a += 10 : $a += 2
+    $x % 2 ? $x += 10 : $x += 2
 
 Really means this:
 
-    (($a % 2) ? ($a += 10) : $a) += 2
+    (($x % 2) ? ($x += 10) : $x) += 2
 
 Rather than this:
 
-    ($a % 2) ? ($a += 10) : ($a += 2)
+    ($x % 2) ? ($x += 10) : ($x += 2)
 
 That should probably be written more simply as:
 
-    $a += ($a % 2) ? 10 : 2;
+    $x += ($x % 2) ? 10 : 2;
 
 =head2 Assignment Operators
 X<assignment> X<operator, assignment> X<=> X<**=> X<+=> X<*=> X<&=>
@@ -1111,11 +1114,11 @@ X<%=> X<^=> X<x=>
 
 Assignment operators work as in C.  That is,
 
-    $a += 2;
+    $x += 2;
 
 is equivalent to
 
-    $a = $a + 2;
+    $x = $x + 2;
 
 although without duplicating any side effects that dereferencing the lvalue
 might trigger, such as from tie().  Other assignment operators work similarly.
@@ -1143,12 +1146,12 @@ Although as of 5.14, that can be also be accomplished this way:
 
 Likewise,
 
-    ($a += 2) *= 3;
+    ($x += 2) *= 3;
 
 is equivalent to
 
-    $a += 2;
-    $a *= 3;
+    $x += 2;
+    $x *= 3;
 
 Similarly, a list assignment in list context produces the list of
 lvalues assigned to, and a list assignment in scalar context returns
@@ -1170,7 +1173,7 @@ The C<< => >> operator is a synonym for the comma except that it causes a
 word on its left to be interpreted as a string if it begins with a letter
 or underscore and is composed only of letters, digits and underscores.
 This includes operands that might otherwise be interpreted as operators,
-constants, single number v-strings or function calls. If in doubt about
+constants, single number v-strings or function calls.  If in doubt about
 this behavior, the left operand can be quoted explicitly.
 
 Otherwise, the C<< => >> operator behaves exactly as the comma operator
@@ -1257,9 +1260,9 @@ only if the left expression is false.  Due to its precedence, you must
 be careful to avoid using it as replacement for the C<||> operator.
 It usually works out better for flow control than in assignments:
 
-    $a = $b or $c;             # bug: this is wrong
-    ($a = $b) or $c;           # really means this
-    $a = $b || $c;             # better written this way
+    $x = $y or $z;              # bug: this is wrong
+    ($x = $y) or $z;            # really means this
+    $x = $y || $z;              # better written this way
 
 However, when it's a list-context assignment and you're trying to use
 C<||> for control flow, you probably need "or" so that the assignment
@@ -1289,7 +1292,7 @@ Address-of operator.  (But see the "\" operator for taking a reference.)
 
 =item unary *
 
-Dereference-address operator. (Perl's prefix dereferencing
+Dereference-address operator.  (Perl's prefix dereferencing
 operators are typed: $, @, %, and &.)
 
 =item (TYPE)
@@ -1336,9 +1339,9 @@ is the same as
 
 Note, however, that this does not always work for quoting Perl code:
 
-    $s = q{ if($a eq "}") ... }; # WRONG
+    $s = q{ if($x eq "}") ... }; # WRONG
 
-is a syntax error. The C<Text::Balanced> module (standard as of v5.8,
+is a syntax error.  The C<Text::Balanced> module (standard as of v5.8,
 and from CPAN before then) is able to do this properly.
 
 There can be whitespace between the operator and the quoting
@@ -1378,7 +1381,7 @@ X<\o{}>
 The result is the character specified by the hexadecimal number between
 the braces.  See L</[8]> below for details on which character.
 
-Only hexadecimal digits are valid between the braces. If an invalid
+Only hexadecimal digits are valid between the braces.  If an invalid
 character is encountered, a warning will be issued and the invalid
 character and all subsequent characters (valid or invalid) within the
 braces will be discarded.
@@ -1568,7 +1571,7 @@ and although they often accept just C<"\012">, they seldom tolerate just
 C<"\015">.  If you get in the habit of using C<"\n"> for networking,
 you may be burned some day.
 X<newline> X<line terminator> X<eol> X<end of line>
-X<\r>
+X<\n> X<\r> X<\r\n>
 
 For constructs that do interpolate, variables beginning with "C<$>"
 or "C<@>" are interpolated.  Subscripted variables such as C<$a[3]> or
@@ -1592,8 +1595,8 @@ is equivalent to
 
 For the pattern of regex operators (C<qr//>, C<m//> and C<s///>),
 the quoting from C<\Q> is applied after interpolation is processed,
-but before escapes are processed. This allows the pattern to match
-literally (except for C<$> and C<@>). For example, the following matches:
+but before escapes are processed.  This allows the pattern to match
+literally (except for C<$> and C<@>).  For example, the following matches:
 
     '\s\t' =~ /\Q\s\t/
 
@@ -1627,8 +1630,8 @@ 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
-corresponding C</STRING/msixpodual> expression. The returned value is a
-normalized version of the original pattern. It magically differs from
+corresponding C</STRING/msixpodual> expression.  The returned value is a
+normalized version of the original pattern.  It magically differs from
 a string containing the same characters: C<ref(qr/x/)> returns "Regexp";
 however, dereferencing it is not well defined (you currently get the 
 normalized version of the original pattern, but this may change).
@@ -1732,7 +1735,7 @@ you can use any pair of non-whitespace (ASCII) characters
 as delimiters.  This is particularly useful for matching path names
 that contain "/", to avoid LTS (leaning toothpick syndrome).  If "?" is
 the delimiter, then a match-only-once rule applies,
-described in C<m?PATTERN?> below. If "'" (single quote) is the delimiter,
+described in C<m?PATTERN?> below.  If "'" (single quote) is the delimiter,
 no interpolation is performed on the PATTERN.
 When using a character valid in an identifier, whitespace is required
 after the C<m>.
@@ -1785,16 +1788,16 @@ The bottom line is that using C</o> is almost never a good idea.
 =item The empty pattern //
 
 If the PATTERN evaluates to the empty string, the last
-I<successfully> matched regular expression is used instead. In this
+I<successfully> matched regular expression is used instead.  In this
 case, only the C<g> and C<c> flags on the empty pattern are honored;
-the other flags are taken from the original pattern. If no match has
+the other flags are taken from the original pattern.  If no match has
 previously succeeded, this will (silently) act instead as a genuine
 empty pattern (which will always match).
 
 Note that it's possible to confuse Perl into thinking C<//> (the empty
 regex) is really C<//> (the defined-or operator).  Perl is usually pretty
 good about this, but some pathological cases might trigger this, such as
-C<$a///> (is that C<($a) / (//)> or C<$a // />?) and C<print $fh //>
+C<$x///> (is that C<($x) / (//)> or C<$x // />?) and C<print $fh //>
 (C<print $fh(//> or C<print($fh //>?).  In all of these examples, Perl
 will assume you meant defined-or.  If you meant the empty regex, just
 use parentheses or spaces to disambiguate, or even prefix the empty
@@ -1834,29 +1837,29 @@ $Etc.  The conditional is true if any variables were assigned; that is,
 if the pattern matched.
 
 The C</g> modifier specifies global pattern matching--that is,
-matching as many times as possible within the string. How it behaves
-depends on the context. In list context, it returns a list of the
+matching as many times as possible within the string.  How it behaves
+depends on the context.  In list context, it returns a list of the
 substrings matched by any capturing parentheses in the regular
-expression. If there are no parentheses, it returns a list of all
+expression.  If there are no parentheses, it returns a list of all
 the matched strings, as if there were parentheses around the whole
 pattern.
 
 In scalar context, each execution of C<m//g> finds the next match,
 returning true if it matches, and false if there is no further match.
 The position after the last match can be read or set using the C<pos()>
-function; see L<perlfunc/pos>. A failed match normally resets the
+function; see L<perlfunc/pos>.  A failed match normally resets the
 search position to the beginning of the string, but you can avoid that
-by adding the C</c> modifier (for example, C<m//gc>). Modifying the target
+by adding the C</c> modifier (for example, C<m//gc>).  Modifying the target
 string also resets the search position.
 
 =item \G assertion
 
 You can intermix C<m//g> matches with C<m/\G.../g>, where C<\G> is a
 zero-width assertion that matches the exact position where the
-previous C<m//g>, if any, left off. Without the C</g> modifier, the
+previous C<m//g>, if any, left off.  Without the C</g> modifier, the
 C<\G> assertion still anchors at C<pos()> as it was at the start of
 the operation (see L<perlfunc/pos>), but the match is of course only
-attempted once. Using C<\G> without C</g> on a target string that has
+attempted once.  Using C<\G> without C</g> on a target string that has
 not previously had a C</g> match applied to it is the same as using
 the C<\A> assertion to match the beginning of the string.  Note also
 that, currently, C<\G> is only properly supported when anchored at the
@@ -1927,8 +1930,8 @@ The last example should print:
     Final: 'q', pos=8
 
 Notice that the final match matched C<q> instead of C<p>, which a match
-without the C<\G> anchor would have done. Also note that the final match
-did not update C<pos>. C<pos> is only updated on a C</g> match. If the
+without the C<\G> anchor would have done.  Also note that the final match
+did not update C<pos>.  C<pos> is only updated on a C</g> match.  If the
 final match did indeed match C<p>, it's a good bet that you're running a
 very old (pre-5.6.0) version of Perl.
 
@@ -2045,7 +2048,7 @@ its own pair of quotes, which may or may not be bracketing quotes, for example,
 C<s(foo)(bar)> or C<< s<foo>/bar/ >>.  A C</e> will cause the
 replacement portion to be treated as a full-fledged Perl expression
 and evaluated right then and there.  It is, however, syntax checked at
-compile-time. A second C<e> modifier will cause the replacement portion
+compile-time.  A second C<e> modifier will cause the replacement portion
 to be C<eval>ed before being run as a Perl expression.
 
 Examples:
@@ -2079,7 +2082,7 @@ Examples:
     s/^=(\w+)/pod($1)/ge;      # use function call
 
     $_ = 'abc123xyz';
-    $a = s/abc/def/r;           # $a is 'def123xyz' and
+    $x = s/abc/def/r;           # $x is 'def123xyz' and
                                 # $_ remains 'abc123xyz'.
 
     # expand variables in $_, but dynamics only, using
@@ -2336,7 +2339,7 @@ is complemented.  If the C</d> modifier is specified, any characters
 specified by SEARCHLIST not found in REPLACEMENTLIST are deleted.
 (Note that this is slightly more flexible than the behavior of some
 B<tr> programs, which delete anything they find in the SEARCHLIST,
-period.) If the C</s> modifier is specified, sequences of characters
+period.)  If the C</s> modifier is specified, sequences of characters
 that were transliterated to the same character are squashed down
 to a single instance of the character.
 
@@ -2428,7 +2431,7 @@ the same rules as normal double quoted strings.
 =item Single Quotes
 
 Single quotes indicate the text is to be treated literally with no
-interpolation of its content. This is similar to single quoted
+interpolation of its content.  This is similar to single quoted
 strings except that backslashes have no special meaning, with C<\\>
 being treated as two backslashes and not one as they would in every
 other quoting construct.
@@ -2451,7 +2454,7 @@ can and do make good use of.
 =item Backticks
 
 The content of the here doc is treated just as it would be if the
-string were embedded in backticks. Thus the content is interpolated
+string were embedded in backticks.  Thus the content is interpolated
 as though it were double quoted and then executed via the shell, with
 the results of the execution returned.
 
@@ -2521,7 +2524,7 @@ you would have to write
 outside of string evals.
 
 Additionally, quoting rules for the end-of-string identifier are
-unrelated to Perl's quoting rules. C<q()>, C<qq()>, and the like are not
+unrelated to Perl's quoting rules.  C<q()>, C<qq()>, and the like are not
 supported in place of C<''> and C<"">, and the only interpolation is for
 backslashing the quoting character:
 
@@ -2569,24 +2572,24 @@ one to four, but these passes are always performed in the same order.
 The first pass is finding the end of the quoted construct, where
 the information about the delimiters is used in parsing.
 During this search, text between the starting and ending delimiters
-is copied to a safe location. The text copied gets delimiter-independent.
+is copied to a safe location.  The text copied gets delimiter-independent.
 
 If the construct is a here-doc, the ending delimiter is a line
-that has a terminating string as the content. Therefore C<<<EOF> is
+that has a terminating string as the content.  Therefore C<<<EOF> is
 terminated by C<EOF> immediately followed by C<"\n"> and starting
 from the first column of the terminating line.
 When searching for the terminating line of a here-doc, nothing
-is skipped. In other words, lines after the here-doc syntax
+is skipped.  In other words, lines after the here-doc syntax
 are compared with the terminating string line by line.
 
 For the constructs except here-docs, single characters are used as starting
-and ending delimiters. If the starting delimiter is an opening punctuation
+and ending delimiters.  If the starting delimiter is an opening punctuation
 (that is C<(>, C<[>, C<{>, or C<< < >>), the ending delimiter is the
 corresponding closing punctuation (that is C<)>, C<]>, C<}>, or C<< > >>).
 If the starting delimiter is an unpaired character like C</> or a closing
 punctuation, the ending delimiter is same as the starting delimiter.
 Therefore a C</> terminates a C<qq//> construct, while a C<]> terminates
-C<qq[]> and C<qq]]> constructs.
+both C<qq[]> and C<qq]]> constructs.
 
 When searching for single-character delimiters, escaped delimiters
 and C<\\> are skipped.  For example, while searching for terminating C</>,
@@ -2602,13 +2605,14 @@ safe location).
 
 For constructs with three-part delimiters (C<s///>, C<y///>, and
 C<tr///>), the search is repeated once more.
-If the first delimiter is not an opening punctuation, three delimiters must
-be same such as C<s!!!> and C<tr)))>, in which case the second delimiter
+If the first delimiter is not an opening punctuation, the three delimiters must
+be the same, such as C<s!!!> and C<tr)))>,
+in which case the second delimiter
 terminates the left part and starts the right part at once.
 If the left part is delimited by bracketing punctuation (that is C<()>,
 C<[]>, C<{}>, or C<< <> >>), the right part needs another pair of
 delimiters such as C<s(){}> and C<tr[]//>.  In these cases, whitespace
-and comments are allowed between both parts, though the comment must follow
+and comments are allowed between the two parts, though the comment must follow
 at least one whitespace character; otherwise a character expected as the 
 start of the comment may be regarded as the starting delimiter of the right part.
 
@@ -2630,7 +2634,7 @@ the example above is not C<m//x>, but rather C<m//> with no C</x>
 modifier.  So the embedded C<#> is interpreted as a literal C<#>.
 
 Also no attention is paid to C<\c\> (multichar control char syntax) during
-this search. Thus the second C<\> in C<qq/\c\/> is interpreted as a part
+this search.  Thus the second C<\> in C<qq/\c\/> is interpreted as a part
 of C<\/>, and the following C</> is not recognized as a delimiter.
 Instead, use C<\034> or C<\x1c> at the end of quoted constructs.
 
@@ -2707,13 +2711,13 @@ scalar.
 
 Note also that the interpolation code needs to make a decision on
 where the interpolated scalar ends.  For instance, whether
-C<< "a $b -> {c}" >> really means:
+C<< "a $x -> {c}" >> really means:
 
-  "a " . $b . " -> {c}";
+  "a " . $x . " -> {c}";
 
 or:
 
-  "a " . $b -> {c};
+  "a " . $x -> {c};
 
 Most of the time, the longest possible text that does not include
 spaces between components and which contains matching braces or
@@ -2959,7 +2963,7 @@ is equivalent to the following Perl-like pseudo code:
 except that it isn't so cumbersome to say, and will actually work.
 It really does shift the @ARGV array and put the current filename
 into the $ARGV variable.  It also uses filehandle I<ARGV>
-internally. <> is just a synonym for <ARGV>, which
+internally.  <> is just a synonym for <ARGV>, which
 is magical.  (The pseudo code above doesn't work because it treats
 <ARGV> as non-magical.)
 
@@ -3229,7 +3233,7 @@ X<number, arbitrary precision>
 The standard C<Math::BigInt>, C<Math::BigRat>, and C<Math::BigFloat> modules,
 along with the C<bignum>, C<bigint>, and C<bigrat> pragmas, provide
 variable-precision arithmetic and overloaded operators, although
-they're currently pretty slow. At the cost of some space and
+they're currently pretty slow.  At the cost of some space and
 considerable speed, they avoid the normal pitfalls associated with
 limited-precision representations.
 
@@ -3241,17 +3245,18 @@ limited-precision representations.
 
 Or with rationals:
 
-       use 5.010;
-       use bigrat;
-       $a = 3/22;
-       $b = 4/6;
-       say "a/b is ", $a/$b;
-       say "a*b is ", $a*$b;
-    a/b is 9/44
-    a*b is 1/11
+        use 5.010;
+        use bigrat;
+        $x = 3/22;
+        $y = 4/6;
+        say "x/y is ", $x/$y;
+        say "x*y is ", $x*$y;
+        x/y is 9/44
+        x*y is 1/11
 
 Several modules let you calculate with (bound only by memory and CPU time)
-unlimited or fixed precision. There are also some non-standard modules that
+unlimited or fixed precision.  There
+are also some non-standard modules that
 provide faster implementations via external C libraries.
 
 Here is a short, but incomplete summary:
index 6c5a7e1..f57ed3d 100644 (file)
@@ -69,7 +69,7 @@ References can be created in several ways.
 X<\> X<backslash>
 
 By using the backslash operator on a variable, subroutine, or value.
-(This works much like the & (address-of) operator in C.)  
+(This works much like the & (address-of) operator in C.)
 This typically creates I<another> reference to a variable, because
 there's already a reference to the variable in the symbol table.  But
 the symbol table reference might go away, and you'll still have the
@@ -107,7 +107,7 @@ as using square brackets--instead it's the same as creating
 a list of references!
 
     @list = (\$a, \@b, \%c);
-    @list = \($a, @b, %c);     # same thing!
+    @list = \($a, @b, %c);      # same thing!
 
 As a special case, C<\(@foo)> returns a list of references to the contents
 of C<@foo>, not a reference to C<@foo> itself.  Likewise for C<%foo>,
@@ -122,8 +122,8 @@ A reference to an anonymous hash can be created using curly
 brackets:
 
     $hashref = {
-       'Adam'  => 'Eve',
-       'Clyde' => 'Bonnie',
+        'Adam'  => 'Eve',
+        'Clyde' => 'Bonnie',
     };
 
 Anonymous hash and array composers like these can be intermixed freely to
@@ -190,8 +190,8 @@ template without using eval().  Here's a small example of how
 closures work:
 
     sub newprint {
-       my $x = shift;
-       return sub { my $y = shift; print "$x, $y!\n"; };
+        my $x = shift;
+        return sub { my $y = shift; print "$x, $y!\n"; };
     }
     $h = newprint("Howdy");
     $g = newprint("Greetings");
@@ -297,20 +297,20 @@ and directory handles, though.)  However, if you assign the incoming
 value to a scalar instead of a typeglob as we do in the examples
 below, there's no risk of that happening.
 
-    splutter(*STDOUT);         # pass the whole glob
-    splutter(*STDOUT{IO});     # pass both file and dir handles
+    splutter(*STDOUT);          # pass the whole glob
+    splutter(*STDOUT{IO});      # pass both file and dir handles
 
     sub splutter {
-       my $fh = shift;
-       print $fh "her um well a hmmm\n";
+        my $fh = shift;
+        print $fh "her um well a hmmm\n";
     }
 
-    $rec = get_rec(*STDIN);    # pass the whole glob
+    $rec = get_rec(*STDIN);     # pass the whole glob
     $rec = get_rec(*STDIN{IO}); # pass both file and dir handles
 
     sub get_rec {
-       my $fh = shift;
-       return scalar <$fh>;
+        my $fh = shift;
+        return scalar <$fh>;
     }
 
 =back
@@ -365,7 +365,7 @@ Admittedly, it's a little silly to use the curlies in this case, but
 the BLOCK can contain any arbitrary expression, in particular,
 subscripted expressions:
 
-    &{ $dispatch{$index} }(1,2,3);     # call correct routine
+    &{ $dispatch{$index} }(1,2,3);      # call correct routine
 
 Because of being able to omit the curlies for the simple case of C<$$x>,
 people often make the mistake of viewing the dereferencing symbols as
@@ -374,10 +374,10 @@ though, you could use parentheses instead of braces.  That's not the case.
 Consider the difference below; case 0 is a short-hand version of case 1,
 I<not> case 2:
 
-    $$hashref{"KEY"}   = "VALUE";      # CASE 0
-    ${$hashref}{"KEY"} = "VALUE";      # CASE 1
-    ${$hashref{"KEY"}} = "VALUE";      # CASE 2
-    ${$hashref->{"KEY"}} = "VALUE";    # CASE 3
+    $$hashref{"KEY"}   = "VALUE";       # CASE 0
+    ${$hashref}{"KEY"} = "VALUE";       # CASE 1
+    ${$hashref{"KEY"}} = "VALUE";       # CASE 2
+    ${$hashref->{"KEY"}} = "VALUE";     # CASE 3
 
 Case 2 is also deceptive in that you're accessing a variable
 called %hashref, not dereferencing through $hashref to the hash
@@ -440,7 +440,7 @@ numerically to see whether they refer to the same location.
 X<reference, numeric context>
 
     if ($ref1 == $ref2) {  # cheap numeric compare of references
-       print "refs 1 and 2 refer to the same thing\n";
+        print "refs 1 and 2 refer to the same thing\n";
     }
 
 Using a reference as a string produces both its referent's type,
@@ -543,14 +543,14 @@ value.
 People frequently expect it to work like this.  So it does.
 
     $name = "foo";
-    $$name = 1;                        # Sets $foo
-    ${$name} = 2;              # Sets $foo
-    ${$name x 2} = 3;          # Sets $foofoo
-    $name->[0] = 4;            # Sets $foo[0]
-    @$name = ();               # Clears @foo
-    &$name();                  # Calls &foo()
+    $$name = 1;                 # Sets $foo
+    ${$name} = 2;               # Sets $foo
+    ${$name x 2} = 3;           # Sets $foofoo
+    $name->[0] = 4;             # Sets $foo[0]
+    @$name = ();                # Clears @foo
+    &$name();                   # Calls &foo()
     $pack = "THAT";
-    ${"${pack}::$name"} = 5;   # Sets $THAT::foo without eval
+    ${"${pack}::$name"} = 5;    # Sets $THAT::foo without eval
 
 This is powerful, and slightly dangerous, in that it's possible
 to intend (with the utmost sincerity) to use a hard reference, and
@@ -571,8 +571,8 @@ a symbol table, and thus are invisible to this mechanism.  For example:
     local $value = 10;
     $ref = "value";
     {
-       my $value = 20;
-       print $$ref;
+        my $value = 20;
+        print $$ref;
     }
 
 This will still print 10, not 20.  Remember that local() affects package
@@ -602,8 +602,8 @@ construct is I<not> considered to be a symbolic reference when you're
 using strict refs:
 
     use strict 'refs';
-    ${ bareword };     # Okay, means $bareword.
-    ${ "bareword" };   # Error, symbolic reference.
+    ${ bareword };      # Okay, means $bareword.
+    ${ "bareword" };    # Error, symbolic reference.
 
 Similarly, because of all the subscripting that is done using single words,
 the same rule applies to any bareword that is used for subscripting a hash.
@@ -655,13 +655,13 @@ that generated HTML font changes for the various colors:
 
 The red() and green() functions would be similar.  To create these,
 we'll assign a closure to a typeglob of the name of the function we're
-trying to build.  
+trying to build.
 
     @colors = qw(red blue green yellow orange purple violet);
     for my $name (@colors) {
-        no strict 'refs';      # allow symbol table manipulation
+        no strict 'refs';       # allow symbol table manipulation
         *$name = *{uc $name} = sub { "<FONT COLOR='$name'>@_</FONT>" };
-    } 
+    }
 
 Now all those different functions appear to exist independently.  You can
 call red(), RED(), blue(), BLUE(), green(), etc.  This technique saves on
@@ -699,7 +699,7 @@ operator, as they are created on the fly. If you are accustomed to using
 nested subroutines in other programming languages with their own private
 variables, you'll have to work at it a bit in Perl.  The intuitive coding
 of this type of thing incurs mysterious warnings about "will not stay
-shared" due to the reasons explained above. 
+shared" due to the reasons explained above.
 For example, this won't work:
 
     sub outer {
index b6474e6..75ce3fd 100644 (file)
@@ -28,9 +28,9 @@ Perl automatically enables a set of special security checks, called I<taint
 mode>, when it detects its program running with differing real and effective
 user or group IDs.  The setuid bit in Unix permissions is mode 04000, the
 setgid bit mode 02000; either or both may be set.  You can also enable taint
-mode explicitly by using the B<-T> command line flag. This flag is
+mode explicitly by using the B<-T> command line flag.  This flag is
 I<strongly> suggested for server programs and any program run on behalf of
-someone else, such as a CGI script. Once taint mode is on, it's on for
+someone else, such as a CGI script.  Once taint mode is on, it's on for
 the remainder of your script.
 
 While in this mode, Perl takes special precautions called I<taint
@@ -234,9 +234,9 @@ Unix-like environments that support #! and setuid or setgid scripts.)
 
 When the taint mode (C<-T>) is in effect, the "." directory is removed
 from C<@INC>, and the environment variables C<PERL5LIB> and C<PERLLIB>
-are ignored by Perl. You can still adjust C<@INC> from outside the
+are ignored by Perl.  You can still adjust C<@INC> from outside the
 program by using the C<-I> command line option as explained in
-L<perlrun>. The two environment variables are ignored because
+L<perlrun>.  The two environment variables are ignored because
 they are obscured, and a user running a program could be unaware that
 they are set, whereas the C<-I> option is clearly visible and
 therefore permitted.
@@ -247,7 +247,7 @@ the C<lib> pragma, e.g.:
   perl -Mlib=/foo program
 
 The benefit of using C<-Mlib=/foo> over C<-I/foo>, is that the former
-will automagically remove any duplicated directories, while the later
+will automagically remove any duplicated directories, while the latter
 will not.
 
 Note that if a tainted string is added to C<@INC>, the following
@@ -271,7 +271,7 @@ your PATH, it makes sure you set the PATH.
 The PATH isn't the only environment variable which can cause problems.
 Because some shells may use the variables IFS, CDPATH, ENV, and
 BASH_ENV, Perl checks that those are either empty or untainted when
-starting subprocesses. You may wish to add something like this to your
+starting subprocesses.  You may wish to add something like this to your
 setid and taint-checking scripts.
 
     delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};   # Make %ENV safer
@@ -280,7 +280,8 @@ It's also possible to get into trouble with other operations that don't
 care whether they use tainted values.  Make judicious use of the file
 tests in dealing with any user-supplied filenames.  When possible, do
 opens and such B<after> properly dropping any special user (or group!)
-privileges. Perl doesn't prevent you from opening tainted filenames for reading,
+privileges.  Perl doesn't prevent you from
+opening tainted filenames for reading,
 so be careful what you print out.  The tainting mechanism is intended to
 prevent stupid mistakes, not to remove the need for thought.
 
@@ -353,7 +354,7 @@ are trapped and namespace access is carefully controlled.  Safe should
 not be considered bullet-proof, though: it will not prevent the foreign
 code to set up infinite loops, allocate gigabytes of memory, or even
 abusing perl bugs to make the host interpreter crash or behave in
-unpredictable ways. In any case it's better avoided completely if you're
+unpredictable ways.  In any case it's better avoided completely if you're
 really concerned about security.
 
 =head2 Security Bugs
@@ -458,17 +459,17 @@ I<Denial of Service> (DoS) attacks.
 Hash Algorithm - Hash algorithms like the one used in Perl are well
 known to be vulnerable to collision attacks on their hash function.
 Such attacks involve constructing a set of keys which collide into
-the same bucket producing inefficient behavior. Such attacks often
+the same bucket producing inefficient behavior.  Such attacks often
 depend on discovering the seed of the hash function used to map the
-keys to buckets. That seed is then used to brute-force a key set which
-can be used to mount a denial of service attack. In Perl 5.8.1 changes
+keys to buckets.  That seed is then used to brute-force a key set which
+can be used to mount a denial of service attack.  In Perl 5.8.1 changes
 were introduced to harden Perl to such attacks, and then later in
 Perl 5.18.0 these features were enhanced and additional protections
 added.
 
 At the time of this writing, Perl 5.18.0 is considered to be
 well-hardened against algorithmic complexity attacks on its hash
-implementation. This is largely owed to the following measures
+implementation.  This is largely owed to the following measures
 mitigate attacks:
 
 =over 4
@@ -476,9 +477,9 @@ mitigate attacks:
 =item Hash Seed Randomization
 
 In order to make it impossible to know what seed to generate an attack
-key set for, this seed is randomly initialized at process start. This
+key set for, this seed is randomly initialized at process start.  This
 may be overridden by using the PERL_HASH_SEED environment variable, see
-L<perlrun/PERL_HASH_SEED>. This environment variable controls how
+L<perlrun/PERL_HASH_SEED>.  This environment variable controls how
 items are actually stored, not how they are presented via
 C<keys>, C<values> and C<each>.
 
@@ -489,14 +490,15 @@ C<values>, and C<each> return items in a per-hash randomized order.
 Modifying a hash by insertion will change the iteration order of that hash.
 This behavior can be overridden by using C<hash_traversal_mask()> from
 L<Hash::Util> or by using the PERL_PERTURB_KEYS environment variable,
-see L<perlrun/PERL_PERTURB_KEYS>. Note that this feature controls the
+see L<perlrun/PERL_PERTURB_KEYS>.  Note that this feature controls the
 "visible" order of the keys, and not the actual order they are stored in.
 
 =item Bucket Order Perturbance
 
 When items collide into a given hash bucket the order they are stored in
-the chain is no longer predictable in Perl 5.18. This has the intention
-to make it harder to observe a collisions. This behavior can be overridden by using
+the chain is no longer predictable in Perl 5.18.  This
+has the intention to make it harder to observe a
+collision.  This behavior can be overridden by using
 the PERL_PERTURB_KEYS environment variable, see L<perlrun/PERL_PERTURB_KEYS>.
 
 =item New Default Hash Function
@@ -508,16 +510,16 @@ it harder to infer the hash seed.
 
 The source code includes multiple hash algorithms to choose from.  While we
 believe that the default perl hash is robust to attack, we have included the
-hash function Siphash as a fall-back option. At the time of release of
+hash function Siphash as a fall-back option.  At the time of release of
 Perl 5.18.0 Siphash is believed to be of cryptographic strength.  This is
 not the default as it is much slower than the default hash.
 
 =back
 
 Without compiling a special Perl, there is no way to get the exact same
-behavior of any versions prior to Perl 5.18.0. The closest one can get
+behavior of any versions prior to Perl 5.18.0.  The closest one can get
 is by setting PERL_PERTURB_KEYS to 0 and setting the PERL_HASH_SEED
-to a known value. We do not advise those settings for production use
+to a known value.  We do not advise those settings for production use
 due to the above security considerations.
 
 B<Perl has never guaranteed any ordering of the hash keys>, and
index aeced63..1ba5186 100644 (file)
@@ -89,8 +89,8 @@ aggregates (arrays and hashes), these will be flattened together into
 one large indistinguishable list.
 
 If no C<return> is found and if the last statement is an expression, its
-value is returned. If the last statement is a loop control structure
-like a C<foreach> or a C<while>, the returned value is unspecified. The
+value is returned.  If the last statement is a loop control structure
+like a C<foreach> or a C<while>, the returned value is unspecified.  The
 empty sub returns the empty list.
 X<subroutine, return value> X<return value> X<return>
 
@@ -247,7 +247,7 @@ core, as are modules whose names are in all lower case.  A subroutine in
 all capitals is a loosely-held convention meaning it will be called
 indirectly by the run-time system itself, usually due to a triggered event.
 Subroutines whose name start with a left parenthesis are also reserved the 
-same way. The following is a list of some subroutines that currently do 
+same way.  The following is a list of some subroutines that currently do 
 special, pre-defined things.
 
 =over
@@ -699,7 +699,7 @@ this.
 X<state> X<state variable> X<static> X<variable, persistent> X<variable, static> X<closure>
 
 There are two ways to build persistent private variables in Perl 5.10.
-First, you can simply use the C<state> feature. Or, you can use closures,
+First, you can simply use the C<state> feature.  Or, you can use closures,
 if you want to stay compatible with releases older than 5.10.
 
 =head3 Persistent variables via state()
@@ -924,7 +924,7 @@ X<local, composite type element> X<local, array element> X<local, hash element>
 
 It's also worth taking a moment to explain what happens when you
 C<local>ize a member of a composite type (i.e. an array or hash element).
-In this case, the element is C<local>ized I<by name>. This means that
+In this case, the element is C<local>ized I<by name>.  This means that
 when the scope of the C<local()> ends, the saved value will be
 restored to the hash element whose key was named in the C<local()>, or
 the array element whose index was named in the C<local()>.  If that
@@ -967,7 +967,7 @@ X<delete> X<local, composite type element> X<local, array element> X<local, hash
 
 You can use the C<delete local $array[$idx]> and C<delete local $hash{key}>
 constructs to delete a composite type entry for the current block and restore
-it when it ends. They return the array/hash value before the localization,
+it when it ends.  They return the array/hash value before the localization,
 which means that they are respectively equivalent to
 
     do {
@@ -986,7 +986,8 @@ and
         $val
     }
 
-except that for those the C<local> is scoped to the C<do> block. Slices are
+except that for those the C<local> is
+scoped to the C<do> block.  Slices are
 also accepted.
 
     my %hash = (
@@ -1030,7 +1031,7 @@ To do this, you have to declare the subroutine to return an lvalue.
 
 The scalar/list context for the subroutine and for the right-hand
 side of assignment is determined as if the subroutine call is replaced
-by a scalar. For example, consider:
+by a scalar.  For example, consider:
 
     data(2,3) = get_data(3,4);
 
@@ -1045,9 +1046,9 @@ and in:
 all the subroutines are called in a list context.
 
 Lvalue subroutines are convenient, but you have to keep in mind that,
-when used with objects, they may violate encapsulation. A normal
+when used with objects, they may violate encapsulation.  A normal
 mutator can check the supplied argument before setting the attribute
-it is protecting, an lvalue subroutine cannot. If you require any
+it is protecting, an lvalue subroutine cannot.  If you require any
 special processing when storing and retrieving the values, consider
 using the CPAN module Sentinel or something similar.
 
@@ -1090,6 +1091,9 @@ any previous C<my sub;> or C<state sub;> declaration.
        baz();          # recursive call
     }
 
+It is a known bug that lexical subroutines cannot be used as the C<SUBNAME>
+argument to C<sort>.  This will be fixed in a future version of Perl.
+
 =head3 C<state sub> vs C<my sub>
 
 What is the difference between "state" subs and "my" subs?  Each time that
@@ -1445,12 +1449,12 @@ Any backslashed prototype character represents an actual argument
 that must start with that character (optionally preceded by C<my>,
 C<our> or C<local>), with the exception of C<$>, which will
 accept any scalar lvalue expression, such as C<$foo = 7> or
-C<< my_function()->[0] >>. The value passed as part of C<@_> will be a
+C<< my_function()->[0] >>.  The value passed as part of C<@_> will be a
 reference to the actual argument given in the subroutine call,
 obtained by applying C<\> to that argument.
 
 You can use the C<\[]> backslash group notation to specify more than one
-allowed argument type. For example:
+allowed argument type.  For example:
 
     sub myref (\[$@%&*])
 
@@ -1655,7 +1659,7 @@ the constant folding doesn't reduce them to a single constant:
 
 As alluded to earlier you can also declare inlined subs dynamically at
 BEGIN time if their body consists of a lexically-scoped scalar which
-has no other references. Only the first example here will be inlined:
+has no other references.  Only the first example here will be inlined:
 
     BEGIN {
         my $var = 1;
@@ -1711,7 +1715,7 @@ without (with deparse output truncated for clarity):
  };
 
 If you redefine a subroutine that was eligible for inlining, you'll
-get a warning by default. You can use this warning to tell whether or
+get a warning by default.  You can use this warning to tell whether or
 not a particular subroutine is considered inlinable, since it's
 different than the warning for overriding non-inlined subroutines:
 
@@ -1850,7 +1854,7 @@ And, as you'll have noticed from the previous example, if you override
 C<glob>, the C<< <*> >> glob operator is overridden as well.
 
 In a similar fashion, overriding the C<readline> function also overrides
-the equivalent I/O operator C<< <FILEHANDLE> >>. Also, overriding
+the equivalent I/O operator C<< <FILEHANDLE> >>.  Also, overriding
 C<readpipe> also overrides the operators C<``> and C<qx//>.
 
 Finally, some built-ins (e.g. C<exists> or C<grep>) can't be overridden.
index 8bbca75..46c9527 100644 (file)
@@ -68,7 +68,7 @@ subroutine without defining it by saying C<sub name>, thus:
 X<subroutine, declaration>
 
     sub myname;
-    $me = myname $0            or die "can't get myname";
+    $me = myname $0             or die "can't get myname";
 
 A bare declaration like that declares the function to be a list operator,
 not a unary operator, so you have to be careful to use parentheses (or
@@ -174,8 +174,8 @@ evaluated.
 This is so that you can write loops like:
 
     do {
-       $line = <STDIN>;
-       ...
+        $line = <STDIN>;
+        ...
     } until !defined($line) || $line eq ".\n"
 
 See L<perlfunc/do>.  Note also that the loop control statements described
@@ -186,18 +186,18 @@ For C<next>, just double the braces:
 X<next> X<last> X<redo>
 
     do {{
-       next if $x == $y;
-       # do something here
+        next if $x == $y;
+        # do something here
     }} until $x++ > $z;
 
 For C<last>, you have to be more elaborate:
 X<last>
 
-    LOOP: { 
-           do {
-               last if $x = $y**2;
-               # do something here
-           } while $x++ <= $z;
+    LOOP: {
+            do {
+                last if $x = $y**2;
+                # do something here
+            } while $x++ <= $z;
     }
 
 B<NOTE:> The behaviour of a C<my>, C<state>, or
@@ -267,7 +267,7 @@ The following compound statements may be used to control flow:
 
     PHASE BLOCK
 
-The experimental C<given> statement is I<not automatically enabled>; see 
+The experimental C<given> statement is I<not automatically enabled>; see
 L</"Switch Statements"> below for how to do so, and the attendant caveats.
 
 Unlike in C and Pascal, in Perl these are all defined in terms of BLOCKs,
@@ -280,7 +280,7 @@ all do the same thing:
     die "Can't open $FOO: $!" unless open(FOO);
     open(FOO)  || die "Can't open $FOO: $!";
     open(FOO) ? () : die "Can't open $FOO: $!";
-                       # a bit exotic, that last one
+        # a bit exotic, that last one
 
 The C<if> statement is straightforward.  Because BLOCKs are always
 bounded by curly brackets, there is never any ambiguity about which
@@ -327,16 +327,16 @@ X<loop control> X<loop, control> X<next> X<last> X<redo> X<continue>
 The C<next> command starts the next iteration of the loop:
 
     LINE: while (<STDIN>) {
-       next LINE if /^#/;      # discard comments
-       ...
+        next LINE if /^#/;      # discard comments
+        ...
     }
 
 The C<last> command immediately exits the loop in question.  The
 C<continue> block, if any, is not executed:
 
     LINE: while (<STDIN>) {
-       last LINE if /^$/;      # exit when done with header
-       ...
+        last LINE if /^$/;      # exit when done with header
+        ...
     }
 
 The C<redo> command restarts the loop block without evaluating the
@@ -349,23 +349,23 @@ If your input lines might end in backslashes to indicate continuation, you
 want to skip ahead and get the next record.
 
     while (<>) {
-       chomp;
-       if (s/\\$//) {
-           $_ .= <>;
-           redo unless eof();
-       }
-       # now process $_
+        chomp;
+        if (s/\\$//) {
+            $_ .= <>;
+            redo unless eof();
+        }
+        # now process $_
     }
 
 which is Perl shorthand for the more explicitly written version:
 
     LINE: while (defined($line = <ARGV>)) {
-       chomp($line);
-       if ($line =~ s/\\$//) {
-           $line .= <ARGV>;
-           redo LINE unless eof(); # not eof(ARGV)!
-       }
-       # now process $line
+        chomp($line);
+        if ($line =~ s/\\$//) {
+            $line .= <ARGV>;
+            redo LINE unless eof(); # not eof(ARGV)!
+        }
+        # now process $line
     }
 
 Note that if there were a C<continue> block on the above code, it would
@@ -375,13 +375,13 @@ or C<m?pat?> one-time matches:
 
     # inspired by :1,$g/fred/s//WILMA/
     while (<>) {
-       m?(fred)?    && s//WILMA $1 WILMA/;
-       m?(barney)?  && s//BETTY $1 BETTY/;
-       m?(homer)?   && s//MARGE $1 MARGE/;
+        m?(fred)?    && s//WILMA $1 WILMA/;
+        m?(barney)?  && s//BETTY $1 BETTY/;
+        m?(homer)?   && s//MARGE $1 MARGE/;
     } continue {
-       print "$ARGV $.: $_";
-       close ARGV  if eof;             # reset $.
-       reset       if eof;             # reset ?pat?
+        print "$ARGV $.: $_";
+        close ARGV  if eof;             # reset $.
+        reset       if eof;             # reset ?pat?
     }
 
 If the word C<while> is replaced by the word C<until>, the sense of the
@@ -392,10 +392,10 @@ Loop control statements don't work in an C<if> or C<unless>, since
 they aren't loops.  You can double the braces to make them such, though.
 
     if (/pattern/) {{
-       last if /fred/;
-       next if /barney/; # same effect as "last",
-                         # but doesn't document as well
-       # do something here
+        last if /fred/;
+        next if /barney/; # same effect as "last",
+                          # but doesn't document as well
+        # do something here
     }}
 
 This is caused by the fact that a block by itself acts as a loop that
@@ -411,16 +411,16 @@ Perl's C-style C<for> loop works like the corresponding C<while> loop;
 that means that this:
 
     for ($i = 1; $i < 10; $i++) {
-       ...
+        ...
     }
 
 is the same as this:
 
     $i = 1;
     while ($i < 10) {
-       ...
+        ...
     } continue {
-       $i++;
+        $i++;
     }
 
 There is one minor difference: if variables are declared with C<my>
@@ -433,13 +433,13 @@ As a special case, if the test in the C<for> loop (or the corresponding
 C<while> loop) is empty, it is treated as true.  That is, both
 
     for (;;) {
-       ...
+        ...
     }
 
 and
 
     while () {
-       ...
+        ...
     }
 
 are treated as infinite loops.
@@ -454,7 +454,7 @@ X<eof> X<end-of-file> X<end of file>
     $on_a_tty = -t STDIN && -t STDOUT;
     sub prompt { print "yes? " if $on_a_tty }
     for ( prompt(); <STDIN>; prompt() ) {
-       # do something
+        # do something
     }
 
 Using C<readline> (or the operator form, C<< <EXPR> >>) as the
@@ -504,30 +504,30 @@ Examples:
     for (@ary) { s/foo/bar/ }
 
     for my $elem (@elements) {
-       $elem *= 2;
+        $elem *= 2;
     }
 
     for $count (reverse(1..10), "BOOM") {
-       print $count, "\n";
-       sleep(1);
+        print $count, "\n";
+        sleep(1);
     }
 
     for (1..15) { print "Merry Christmas\n"; }
 
     foreach $item (split(/:[\\\n:]*/, $ENV{TERMCAP})) {
-       print "Item: $item\n";
+        print "Item: $item\n";
     }
 
 Here's how a C programmer might code up a particular algorithm in Perl:
 
     for (my $i = 0; $i < @ary1; $i++) {
-       for (my $j = 0; $j < @ary2; $j++) {
-           if ($ary1[$i] > $ary2[$j]) {
-               last; # can't go to outer :-(
-           }
-           $ary1[$i] += $ary2[$j];
-       }
-       # this is where that last takes me
+        for (my $j = 0; $j < @ary2; $j++) {
+            if ($ary1[$i] > $ary2[$j]) {
+                last; # can't go to outer :-(
+            }
+            $ary1[$i] += $ary2[$j];
+        }
+        # this is where that last takes me
     }
 
 Whereas here's how a Perl programmer more comfortable with the idiom might
@@ -535,10 +535,10 @@ do it:
 
     OUTER: for my $wid (@ary1) {
     INNER:   for my $jet (@ary2) {
-               next OUTER if $wid > $jet;
-               $wid += $jet;
-            }
-         }
+                next OUTER if $wid > $jet;
+                $wid += $jet;
+             }
+          }
 
 See how much easier this is?  It's cleaner, safer, and faster.  It's
 cleaner because it's less noisy.  It's safer because if code gets added
@@ -567,10 +567,10 @@ block is optional.
 The BLOCK construct can be used to emulate case structures.
 
     SWITCH: {
-       if (/^abc/) { $abc = 1; last SWITCH; }
-       if (/^def/) { $def = 1; last SWITCH; }
-       if (/^xyz/) { $xyz = 1; last SWITCH; }
-       $nothing = 1;
+        if (/^abc/) { $abc = 1; last SWITCH; }
+        if (/^def/) { $def = 1; last SWITCH; }
+        if (/^xyz/) { $xyz = 1; last SWITCH; }
+        $nothing = 1;
     }
 
 You'll also find that C<foreach> loop used to create a topicalizer
@@ -578,10 +578,10 @@ and a switch:
 
     SWITCH:
     for ($var) {
-       if (/^abc/) { $abc = 1; last SWITCH; }
-       if (/^def/) { $def = 1; last SWITCH; }
-       if (/^xyz/) { $xyz = 1; last SWITCH; }
-       $nothing = 1;
+        if (/^abc/) { $abc = 1; last SWITCH; }
+        if (/^def/) { $def = 1; last SWITCH; }
+        if (/^xyz/) { $xyz = 1; last SWITCH; }
+        $nothing = 1;
     }
 
 Such constructs are quite frequently used, both because older versions of
@@ -616,10 +616,10 @@ rewritten as
 
     use v5.10.1;
     for ($var) {
-       when (/^abc/) { $abc = 1 }
-       when (/^def/) { $def = 1 }
-       when (/^xyz/) { $xyz = 1 }
-       default       { $nothing = 1 }
+        when (/^abc/) { $abc = 1 }
+        when (/^def/) { $def = 1 }
+        when (/^xyz/) { $xyz = 1 }
+        default       { $nothing = 1 }
     }
 
 The C<foreach> is the non-experimental way to set a topicalizer.
@@ -628,30 +628,30 @@ written like this:
 
     use v5.10.1;
     given ($var) {
-       when (/^abc/) { $abc = 1 }
-       when (/^def/) { $def = 1 }
-       when (/^xyz/) { $xyz = 1 }
-       default       { $nothing = 1 }
+        when (/^abc/) { $abc = 1 }
+        when (/^def/) { $def = 1 }
+        when (/^xyz/) { $xyz = 1 }
+        default       { $nothing = 1 }
     }
 
 As of 5.14, that can also be written this way:
 
     use v5.14;
     for ($var) {
-       $abc = 1 when /^abc/;
-       $def = 1 when /^def/;
-       $xyz = 1 when /^xyz/;
-       default { $nothing = 1 }
+        $abc = 1 when /^abc/;
+        $def = 1 when /^def/;
+        $xyz = 1 when /^xyz/;
+        default { $nothing = 1 }
     }
 
 Or if you don't care to play it safe, like this:
 
     use v5.14;
     given ($var) {
-       $abc = 1 when /^abc/;
-       $def = 1 when /^def/;
-       $xyz = 1 when /^xyz/;
-       default { $nothing = 1 }
+        $abc = 1 when /^abc/;
+        $def = 1 when /^def/;
+        $xyz = 1 when /^xyz/;
+        default { $nothing = 1 }
     }
 
 The arguments to C<given> and C<when> are in scalar context,
@@ -746,7 +746,7 @@ throws an exception with the text C<Unimplemented>:
     sub unimplemented { ... }
     eval { unimplemented() };
     if ($@ =~ /^Unimplemented at /) {
-       say "I found an ellipsis!";
+        say "I found an ellipsis!";
     }
 
 You can only use the elliptical statement to stand in for a
@@ -758,14 +758,14 @@ complete statement.  These examples of how the ellipsis works:
     ...;
     eval { ... };
     sub somemeth {
-       my $self = shift;
-       ...;
+        my $self = shift;
+        ...;
     }
     $x = do {
-       my $n;
-       ...;
-       say "Hurrah!";
-       $n;
+        my $n;
+        ...;
+        say "Hurrah!";
+        $n;
     };
 
 The elliptical statement cannot stand in for an expression that
@@ -788,20 +788,17 @@ syntax error if Perl doesn't guess that the C<{ ... }> is a block.  In that
 case, it doesn't think the C<...> is an ellipsis because it's expecting an
 expression instead of a statement:
 
-    @transformed = map { ... } @input;  # syntax error
-
-You can use a C<;> inside your block to denote that the C<{ ...  }> is a
-block and not a hash reference constructor.  Now the ellipsis works:
+    @transformed = map { ... } @input;    # syntax error
 
-    @transformed = map {; ... } @input; # ; disambiguates
+Inside your block, you can use a C<;> before the ellipsis to denote that the
+C<{ ... }> is a block and not a hash reference constructor.  Now the ellipsis
+works:
 
-    @transformed = map { ...; } @input; # ; disambiguates
+    @transformed = map {; ... } @input;   # ';' disambiguates
 
 Note: Some folks colloquially refer to this bit of punctuation as a
 "yada-yada" or "triple-dot", but its true name
-is actually an ellipsis.  Perl does not yet
-accept the Unicode version, U+2026 HORIZONTAL ELLIPSIS, as an alias for
-C<...>, but someday it may.
+is actually an ellipsis.
 
 =head2 PODs: Embedded Documentation
 X<POD> X<documentation>
@@ -828,8 +825,8 @@ and your documentation text freely, as in
     =cut back to the compiler, nuff of this pod stuff!
 
     sub snazzle($) {
-       my $thingie = shift;
-       .........
+        my $thingie = shift;
+        .........
     }
 
 Note that pod translators should look at only paragraphs beginning
@@ -916,32 +913,32 @@ Here is a longer example of C<given>:
 
     use feature ":5.10";
     given ($foo) {
-       when (undef) {
-           say '$foo is undefined';
-       }
-       when ("foo") {
-           say '$foo is the string "foo"';
-       }
-       when ([1,3,5,7,9]) {
-           say '$foo is an odd digit';
-           continue; # Fall through
-       }
-       when ($_ < 100) {
-           say '$foo is numerically less than 100';
-       }
-       when (\&complicated_check) {
-           say 'a complicated check for $foo is true';
-       }
-       default {
-           die q(I don't know what to do with $foo);
-       }
+        when (undef) {
+            say '$foo is undefined';
+        }
+        when ("foo") {
+            say '$foo is the string "foo"';
+        }
+        when ([1,3,5,7,9]) {
+            say '$foo is an odd digit';
+            continue; # Fall through
+        }
+        when ($_ < 100) {
+            say '$foo is numerically less than 100';
+        }
+        when (\&complicated_check) {
+            say 'a complicated check for $foo is true';
+        }
+        default {
+            die q(I don't know what to do with $foo);
+        }
     }
 
 Before Perl 5.18, C<given(EXPR)> assigned the value of I<EXPR> to
 merely a lexically scoped I<B<copy>> (!) of C<$_>, not a dynamically
 scoped alias the way C<foreach> does.  That made it similar to
 
-       do { my $_ = EXPR; ... }
+        do { my $_ = EXPR; ... }
 
 except that the block was automatically broken out of by a successful
 C<when> or an explicit C<break>.  Because it was only a copy, and because
@@ -1103,9 +1100,9 @@ You can use the C<continue> keyword to fall through from one
 case to the next:
 
     given($foo) {
-       when (/x/) { say '$foo contains an x'; continue }
-       when (/y/) { say '$foo contains a y'            }
-       default    { say '$foo does not contain a y'    }
+        when (/x/) { say '$foo contains an x'; continue }
+        when (/y/) { say '$foo contains a y'            }
+        default    { say '$foo does not contain a y'    }
     }
 
 =head3 Return value
@@ -1138,12 +1135,12 @@ Note that, unlike C<if> and C<unless>, failed C<when> statements always
 evaluate to an empty list.
 
     my $price = do {
-       given ($item) {
-           when (["pear", "apple"]) { 1 }
-           break when "vote";      # My vote cannot be bought
-           1e10  when /Mona Lisa/;
-           "unknown";
-       }
+        given ($item) {
+            when (["pear", "apple"]) { 1 }
+            break when "vote";      # My vote cannot be bought
+            1e10  when /Mona Lisa/;
+            "unknown";
+        }
     };
 
 Currently, C<given> blocks can't always
@@ -1159,7 +1156,7 @@ string occurs in an array:
     use v5.10.1;
     my $count = 0;
     for (@array) {
-       when ("foo") { ++$count }
+        when ("foo") { ++$count }
     }
     print "\@array contains $count copies of 'foo'\n";
 
@@ -1168,7 +1165,7 @@ Or in a more recent version:
     use v5.14;
     my $count = 0;
     for (@array) {
-       ++$count when "foo";
+        ++$count when "foo";
     }
     print "\@array contains $count copies of 'foo'\n";
 
@@ -1191,7 +1188,7 @@ made optional in Perl 5 without a great deal of potential confusion,
 because Perl 5 would parse the expression
 
     given $foo {
-       ...
+        ...
     }
 
 as though the argument to C<given> were an element of the hash
index e885bb2..f5e35a3 100644 (file)
@@ -302,10 +302,10 @@ automatically.
     sleep(15);        # Let thread run for awhile
 
     sub sub1 {
-        $a = 0;
+        my $count = 0;
         while (1) {
-            $a++;
-            print("\$a is $a\n");
+            $count++;
+            print("\$count is $count\n");
             sleep(1);
         }
     }
@@ -424,22 +424,22 @@ number of pitfalls.  One pitfall is the race condition:
     use threads;
     use threads::shared;
 
-    my $a :shared = 1;
+    my $x :shared = 1;
     my $thr1 = threads->create(\&sub1);
     my $thr2 = threads->create(\&sub2);
 
     $thr1->join();
     $thr2->join();
-    print("$a\n");
+    print("$x\n");
 
-    sub sub1 { my $foo = $a; $a = $foo + 1; }
-    sub sub2 { my $bar = $a; $a = $bar + 1; }
+    sub sub1 { my $foo = $x; $x = $foo + 1; }
+    sub sub2 { my $bar = $x; $x = $bar + 1; }
 
-What do you think C<$a> will be? The answer, unfortunately, is I<it
-depends>. Both C<sub1()> and C<sub2()> access the global variable C<$a>, once
+What do you think C<$x> will be? The answer, unfortunately, is I<it
+depends>. Both C<sub1()> and C<sub2()> access the global variable C<$x>, once
 to read and once to write.  Depending on factors ranging from your
 thread implementation's scheduling algorithm to the phase of the moon,
-C<$a> can be 2 or 3.
+C<$x> can be 2 or 3.
 
 Race conditions are caused by unsynchronized access to shared
 data.  Without explicit synchronization, there's no way to be sure that
@@ -448,19 +448,19 @@ and the time you update it.  Even this simple code fragment has the
 possibility of error:
 
     use threads;
-    my $a :shared = 2;
-    my $b :shared;
-    my $c :shared;
-    my $thr1 = threads->create(sub { $b = $a; $a = $b + 1; });
-    my $thr2 = threads->create(sub { $c = $a; $a = $c + 1; });
+    my $x :shared = 2;
+    my $y :shared;
+    my $z :shared;
+    my $thr1 = threads->create(sub { $y = $x; $x = $y + 1; });
+    my $thr2 = threads->create(sub { $z = $x; $x = $z + 1; });
     $thr1->join();
     $thr2->join();
 
-Two threads both access C<$a>.  Each thread can potentially be interrupted
-at any point, or be executed in any order.  At the end, C<$a> could be 3
-or 4, and both C<$b> and C<$c> could be 2 or 3.
+Two threads both access C<$x>.  Each thread can potentially be interrupted
+at any point, or be executed in any order.  At the end, C<$x> could be 3
+or 4, and both C<$y> and C<$z> could be 2 or 3.
 
-Even C<$a += 5> or C<$a++> are not guaranteed to be atomic.
+Even C<$x += 5> or C<$x++> are not guaranteed to be atomic.
 
 Whenever your program accesses data or resources that can be accessed
 by other threads, you must take steps to coordinate access or risk
@@ -572,17 +572,17 @@ Consider the following code:
 
     use threads;
 
-    my $a :shared = 4;
-    my $b :shared = 'foo';
+    my $x :shared = 4;
+    my $y :shared = 'foo';
     my $thr1 = threads->create(sub {
-        lock($a);
+        lock($x);
         sleep(20);
-        lock($b);
+        lock($y);
     });
     my $thr2 = threads->create(sub {
-        lock($b);
+        lock($y);
         sleep(20);
-        lock($a);
+        lock($x);
     });
 
 This program will probably hang until you kill it.  The only way it
@@ -590,10 +590,10 @@ won't hang is if one of the two threads acquires both locks
 first.  A guaranteed-to-hang version is more complicated, but the
 principle is the same.
 
-The first thread will grab a lock on C<$a>, then, after a pause during which
+The first thread will grab a lock on C<$x>, then, after a pause during which
 the second thread has probably had time to do some work, try to grab a
-lock on C<$b>.  Meanwhile, the second thread grabs a lock on C<$b>, then later
-tries to grab a lock on C<$a>.  The second lock attempt for both threads will
+lock on C<$y>.  Meanwhile, the second thread grabs a lock on C<$y>, then later
+tries to grab a lock on C<$x>.  The second lock attempt for both threads will
 block, each waiting for the other to release its lock.
 
 This condition is called a deadlock, and it occurs whenever two or
@@ -604,8 +604,8 @@ resource is itself waiting for a lock to be released.
 
 There are a number of ways to handle this sort of problem.  The best
 way is to always have all threads acquire locks in the exact same
-order.  If, for example, you lock variables C<$a>, C<$b>, and C<$c>, always lock
-C<$a> before C<$b>, and C<$b> before C<$c>.  It's also best to hold on to locks for
+order.  If, for example, you lock variables C<$x>, C<$y>, and C<$z>, always lock
+C<$x> before C<$y>, and C<$y> before C<$z>.  It's also best to hold on to locks for
 as short a period of time to minimize the risks of deadlock.
 
 The other synchronization primitives described below can suffer from
@@ -961,9 +961,9 @@ though, regardless of how many CPUs a system might have.
 
 Since kernel threading can interrupt a thread at any time, they will
 uncover some of the implicit locking assumptions you may make in your
-program.  For example, something as simple as C<$a = $a + 2> can behave
-unpredictably with kernel threads if C<$a> is visible to other
-threads, as another thread may have changed C<$a> between the time it
+program.  For example, something as simple as C<$x = $x + 2> can behave
+unpredictably with kernel threads if C<$x> is visible to other
+threads, as another thread may have changed C<$x> between the time it
 was fetched on the right hand side and the time the new value is
 stored.
 
index 4b6bb74..e980e95 100644 (file)
@@ -14,7 +14,8 @@ C<::> or C<'>.  In this case, the part before the last C<::> or
 C<'> is taken to be a I<package qualifier>; see L<perlmod>.
 
 Perl variable names may also be a sequence of digits or a single
-punctuation or control character.  These names are all reserved for
+punctuation or control character (with the literal control character
+form deprecated).  These names are all reserved for
 special uses by Perl; for example, the all-digits names are used
 to hold data captured by backreferences after a regular expression
 match.  Perl has a special syntax for the single-control-character
@@ -370,19 +371,19 @@ X<$;> X<$SUBSEP> X<SUBSCRIPT_SEPARATOR>
 The subscript separator for multidimensional array emulation.  If you
 refer to a hash element as
 
-    $foo{$a,$b,$c}
+    $foo{$x,$y,$z}
 
 it really means
 
-    $foo{join($;, $a, $b, $c)}
+    $foo{join($;, $x, $y, $z)}
 
 But don't put
 
-    @foo{$a,$b,$c}     # a slice--note the @
+    @foo{$x,$y,$z}     # a slice--note the @
 
 which means
 
-    ($foo{$a},$foo{$b},$foo{$c})
+    ($foo{$x},$foo{$y},$foo{$z})
 
 Default is "\034", the same as SUBSEP in B<awk>.  If your keys contain
 binary data there might not be any safe value for C<$;>.
index 79abdb0..4ec6887 100644 (file)
@@ -2785,12 +2785,9 @@ PP(pp_srand)
         }
     }
     else {
-        anum = 0;
+        anum = seed();
     }
 
-    if (anum)
-        (void)srand48_deterministic((Rand_seed_t)anum);
-    else
     (void)seedDrand01((Rand_seed_t)anum);
     PL_srand_called = TRUE;
     if (anum)
index 39b7941..11314ec 100644 (file)
@@ -590,6 +590,7 @@ PP(pp_formline)
                         break;
                 }
                 itembytes = s - item;
+                chophere = s;
                break;
            }
 
@@ -678,7 +679,7 @@ PP(pp_formline)
            goto append;
 
        case FF_CHOP: /* (for ^*) chop the current item */
-           {
+           if (sv != &PL_sv_no) {
                const char *s = chophere;
                if (chopspace) {
                    while (isSPACE(*s))
@@ -704,11 +705,11 @@ PP(pp_formline)
                const char *const send = s + len;
 
                item_is_utf8 = DO_UTF8(sv);
+               chophere = s + len;
                if (!len)
                    break;
                trans = 0;
                gotsome = TRUE;
-               chophere = s + len;
                source = (U8 *) s;
                to_copy = len;
                while (s < send) {
index 43d6473..9de4dff 100644 (file)
@@ -2617,6 +2617,11 @@ PP(pp_ssockopt)
        len = SvCUR(sv);
        if (PerlSock_getsockopt(fd, lvl, optname, SvPVX(sv), &len) < 0)
            goto nuts2;
+#if defined(_AIX)
+        /* XXX Configure test: does getsockopt set the length properly? */
+        if (len == 256)
+            len = sizeof(int);
+#endif
        SvCUR_set(sv, len);
        *SvEND(sv) ='\0';
        PUSHs(sv);
@@ -4455,11 +4460,16 @@ PP(pp_gmtime)
     }
     else {
        NV input = Perl_floor(POPn);
+       const bool pl_isnan = Perl_isnan(input);
        when = (Time64_T)input;
-       if (when != input) {
+       if (UNLIKELY(pl_isnan || when != input)) {
            /* diag_listed_as: gmtime(%f) too large */
            Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
                           "%s(%.0" NVff ") too large", opname, input);
+           if (pl_isnan) {
+               err = NULL;
+               goto failed;
+           }
        }
     }
 
@@ -4485,6 +4495,7 @@ PP(pp_gmtime)
     if (err == NULL) {
        /* diag_listed_as: gmtime(%f) failed */
        /* XXX %lld broken for quads */
+      failed:
        Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
                       "%s(%.0" NVff ") failed", opname, when);
     }
index e991999..573072a 100644 (file)
@@ -4806,7 +4806,7 @@ PerlIO_printf(Perl_debug_log, "LHS=%"UVdf" RHS=%"UVdf"\n",
            min++;
            if (flags & SCF_DO_STCLASS) {
                 bool invert = 0;
-                SV* my_invlist = sv_2mortal(_new_invlist(0));
+                SV* my_invlist = NULL;
                 U8 namedclass;
 
                 /* See commit msg 749e076fceedeb708a624933726e7989f2302f6a */
@@ -4905,7 +4905,7 @@ PerlIO_printf(Perl_debug_log, "LHS=%"UVdf" RHS=%"UVdf"\n",
                     /* FALL THROUGH */
                case POSIXA:
                     if (FLAGS(scan) == _CC_ASCII) {
-                        my_invlist = PL_XPosix_ptrs[_CC_ASCII];
+                        my_invlist = invlist_clone(PL_XPosix_ptrs[_CC_ASCII]);
                     }
                     else {
                         _invlist_intersection(PL_XPosix_ptrs[FLAGS(scan)],
@@ -4942,6 +4942,7 @@ PerlIO_printf(Perl_debug_log, "LHS=%"UVdf" RHS=%"UVdf"\n",
                         assert(flags & SCF_DO_STCLASS_OR);
                         ssc_union(data->start_class, my_invlist, invert);
                     }
+                    SvREFCNT_dec(my_invlist);
                }
                if (flags & SCF_DO_STCLASS_OR)
                    ssc_and(pRExC_state, data->start_class, (regnode_charclass *) and_withp);
@@ -12000,7 +12001,17 @@ tryagain:
                         && is_PROBLEMATIC_LOCALE_FOLD_cp(ender)))
                 {
                     if (UTF) {
-                        const STRLEN unilen = reguni(pRExC_state, ender, s);
+
+                        /* Normally, we don't need the representation of the
+                         * character in the sizing pass--just its size, but if
+                         * folding, we have to actually put the character out
+                         * even in the sizing pass, because the size could
+                         * change as we juggle things at the end of this loop
+                         * to avoid splitting a too-full node in the middle of
+                         * a potential multi-char fold [perl #123539] */
+                        const STRLEN unilen = (SIZE_ONLY && ! FOLD)
+                                               ? UNISKIP(ender)
+                                               : (uvchr_to_utf8((U8*)s, ender) - (U8*)s);
                         if (unilen > 0) {
                            s   += unilen;
                            len += unilen;
@@ -12013,6 +12024,10 @@ tryagain:
                          * cancel out the increment that follows */
                         len--;
                     }
+                    else if (FOLD) {
+                        /* See comment above for [perl #123539] */
+                        *(s++) = (char) ender;
+                    }
                     else {
                         REGC((char)ender, s++);
                     }
index 362390b..5edac3f 100644 (file)
@@ -707,6 +707,7 @@ Perl_re_intuit_start(pTHX_
        goto fail;
     }
 
+    RX_MATCH_UTF8_set(rx,utf8_target);
     reginfo->is_utf8_target = cBOOL(utf8_target);
     reginfo->info_aux = NULL;
     reginfo->strbeg = strbeg;
@@ -2585,6 +2586,7 @@ Perl_regexec_flags(pTHX_ REGEXP * const rx, char *stringarg, char *strend,
     }
 
     RX_MATCH_TAINTED_off(rx);
+    RX_MATCH_UTF8_set(rx, utf8_target);
 
     reginfo->prog = rx;         /* Yes, sorry that this is confusing.  */
     reginfo->intuit = 0;
@@ -3105,8 +3107,6 @@ got_it:
     if (RXp_PAREN_NAMES(prog)) 
         (void)hv_iterinit(RXp_PAREN_NAMES(prog));
 
-    RX_MATCH_UTF8_set(rx, utf8_target);
-
     /* make sure $`, $&, $', and $digit will work later */
     if ( !(flags & REXEC_NOT_FIRST) )
         S_reg_set_capture_string(aTHX_ rx,
index e1962ce..af393bd 100644 (file)
   char *gconvert(double, int, int,  char *);
 #endif
 
-#ifdef PERL_NEW_COPY_ON_WRITE
-#   ifndef SV_COW_THRESHOLD
+#ifndef SV_COW_THRESHOLD
 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
-#   endif
-#   ifndef SV_COWBUF_THRESHOLD
+#endif
+#ifndef SV_COWBUF_THRESHOLD
 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
-#   endif
-#   ifndef SV_COW_MAX_WASTE_THRESHOLD
+#endif
+#ifndef SV_COW_MAX_WASTE_THRESHOLD
 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
-#   endif
-#   ifndef SV_COWBUF_WASTE_THRESHOLD
+#endif
+#ifndef SV_COWBUF_WASTE_THRESHOLD
 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
-#   endif
-#   ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
+#endif
+#ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
-#   endif
-#   ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
+#endif
+#ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
-#   endif
 #endif
 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
    hold is 0. */
@@ -930,9 +928,9 @@ struct body_details {
     ? count * body_size                                        \
     : FIT_ARENA0 (body_size)
 #define FIT_ARENA(count,body_size)                     \
-    count                                              \
+   (U32)(count                                                 \
     ? FIT_ARENAn (count, body_size)                    \
-    : FIT_ARENA0 (body_size)
+    : FIT_ARENA0 (body_size))
 
 /* Calculate the length to copy. Specifically work out the length less any
    final padding the compiler needed to add.  See the comment in sv_upgrade
@@ -3453,7 +3451,7 @@ must_be_utf8:
                 * set so starts from there.  Otherwise, can use memory copy to
                 * get up to where we are now, and then start from here */
 
-               if (invariant_head <= 0) {
+               if (invariant_head == 0) {
                    d = dst;
                } else {
                    Copy(s, dst, invariant_head, char);
@@ -4415,7 +4413,8 @@ Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
                                /* slated for free anyway (and not COW)? */
                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
                                 /* or a swipable TARG */
-                 || ((sflags & (SVs_PADTMP|SVf_READONLY|SVf_IsCOW))
+                 || ((sflags & (SVs_PADTMP|SVs_PADMY|SVf_READONLY
+                               |SVf_IsCOW))
                        == SVs_PADTMP
                                 /* whose buffer is worth stealing */
                      && CHECK_COWBUF_THRESHOLD(cur,len)
@@ -4846,10 +4845,10 @@ Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
 Tells an SV to use C<ptr> to find its string value.  Normally the
 string is stored inside the SV, but sv_usepvn allows the SV to use an
 outside string.  The C<ptr> should point to memory that was allocated
-by L<Newx|perlclib/Memory Management and String Handling>. It must be
+by L<Newx|perlclib/Memory Management and String Handling>.  It must be
 the start of a Newx-ed block of memory, and not a pointer to the
 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
-and not be from a non-Newx memory allocator like C<malloc>. The
+and not be from a non-Newx memory allocator like C<malloc>.  The
 string length, C<len>, must be supplied.  By default this function
 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
 so that pointer should not be freed or used by the programmer after
@@ -13094,14 +13093,16 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
        case SAVEt_CLEARPADRANGE:
            break;
        case SAVEt_HELEM:               /* hash element */
+       case SAVEt_SV:                  /* scalar reference */
            sv = (const SV *)POPPTR(ss,ix);
-           TOPPTR(nss,ix) = sv_dup_inc(sv, param);
+           TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
            /* fall through */
        case SAVEt_ITEM:                        /* normal string */
         case SAVEt_GVSV:                       /* scalar slot in GV */
-        case SAVEt_SV:                         /* scalar reference */
            sv = (const SV *)POPPTR(ss,ix);
            TOPPTR(nss,ix) = sv_dup_inc(sv, param);
+           if (type == SAVEt_SV)
+               break;
            /* fall through */
        case SAVEt_FREESV:
        case SAVEt_MORTALIZESV:
@@ -13119,6 +13120,8 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
         case SAVEt_SVREF:                      /* scalar reference */
            sv = (const SV *)POPPTR(ss,ix);
            TOPPTR(nss,ix) = sv_dup_inc(sv, param);
+           if (type == SAVEt_SVREF)
+               SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
            ptr = POPPTR(ss,ix);
            TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
            break;
@@ -13271,7 +13274,7 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
            break;
        case SAVEt_AELEM:               /* array element */
            sv = (const SV *)POPPTR(ss,ix);
-           TOPPTR(nss,ix) = sv_dup_inc(sv, param);
+           TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
            i = POPINT(ss,ix);
            TOPINT(nss,ix) = i;
            av = (const AV *)POPPTR(ss,ix);
index 68e5db1..b129225 100644 (file)
@@ -1512,7 +1512,7 @@ Returns a pointer to the string in the SV, or a stringified form of
 the SV if the SV does not contain a string.  The SV may cache the
 stringified version becoming C<SvPOK>.  Handles 'get' magic.  The
 C<len> variable will be set to the length of the string (this is a macro, so
-don't use C<&len>). See also C<SvPVx> for a version which guarantees to
+don't use C<&len>).  See also C<SvPVx> for a version which guarantees to
 evaluate sv only once.
 
 Note that there is no guarantee that the return value of C<SvPV()> is
index bec4eaf..29482a2 100644 (file)
@@ -242,7 +242,6 @@ d_isinf='undef'
 d_isnan='undef'
 d_isnanl='undef'
 d_killpg='undef'
-d_lc_monetary_2008='undef'
 d_lchown='undef'
 d_ldbl_dig='undef'
 d_libm_lib_version='undef'
index cda8d21..f068d6d 100644 (file)
@@ -90,6 +90,10 @@ unless(defined(&_H2PH_H_)) {
     }
     eval("sub flim () { 0; }") unless defined(&flim);
     eval("sub flam () { 1; }") unless defined(&flam);
+    eval 'sub blli_in_use {
+        my($blli) = @_;
+           eval q({  ($blli->{l2_proto}) ||  ($blli->{l3_proto}); });
+    }' unless defined(&blli_in_use);
     eval 'sub multiline () {"multilinestring";}' unless defined(&multiline);
 }
 1;
index 193641d..737e870 100644 (file)
@@ -229,8 +229,7 @@ sub is_locale_utf8 ($) { # Return a boolean as to if core Perl thinks the input
     # go through testing all the locales on the platform.
     if (CORE::fc(chr utf8::unicode_to_native(0xdf)) ne "ss") {
         if ($locale =~ /UTF-?8/i) {
-            diag("Cannot verify $locale with UTF-8 in name is a UTF-8 locale");
-            #ok (0, "Verify $locale with UTF-8 in name is a UTF-8 locale");
+            ok (0, "Verify $locale with UTF-8 in name is a UTF-8 locale");
         }
     }
     else {
index 0f6e0bc..74f256b 100644 (file)
@@ -190,3 +190,7 @@ sub {
  )
 }
  ->(("${\''}")[0,0]);
+
+# [perl #122995] Hang when compiling while(1) in a sub-list
+# No ok() or is() necessary.
+sub foo { () = ($a, my $b, ($c, do { while(1) {} })) }
index bb10772..1b8613a 100644 (file)
@@ -128,18 +128,10 @@ is(length(quotemeta($char)), 1, "quotemeta '\\N{U+D8}'  in UTF-8 length");
     is(quotemeta($char), "\\$char", "quotemeta '\\N{U+D7}' locale in UTF-8");
     is(length(quotemeta($char)), 2, "quotemeta '\\N{U+D7}' locale in UTF-8 length");
 
-    SKIP: {
-    if (
-        !$Config::Config{d_setlocale}
-    || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-    ) {
-        skip "no locale support", 2
-    }
-        $char = "\N{U+D8}";  # Every non-ASCII Latin1 is quoted in locale.
-        utf8::upgrade($char);
-        is(quotemeta($char), "\\$char", "quotemeta '\\N{U+D8}' locale in UTF-8");
-        is(length(quotemeta($char)), 2, "quotemeta '\\N{U+D8}' locale in UTF-8 length");
-    }
+    $char = "\N{U+D8}";  # Every non-ASCII Latin1 is quoted in locale.
+    utf8::upgrade($char);
+    is(quotemeta($char), "\\$char", "quotemeta '\\N{U+D8}' locale in UTF-8");
+    is(length(quotemeta($char)), 2, "quotemeta '\\N{U+D8}' locale in UTF-8 length");
 
     is(quotemeta("\x{263a}"), "\\\x{263a}", "quotemeta locale Unicode quoted");
     is(length(quotemeta("\x{263a}")), 2, "quotemeta locale Unicode quoted length");
index dd60f97..151e3ea 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     require 'test.pl';
 }
 use warnings;
-plan( tests => 182 );
+plan( tests => 183 );
 
 # these shouldn't hang
 {
@@ -122,6 +122,8 @@ cmp_ok("@b",'eq','1 2 3 4','reverse then sort');
 @b = sort CORE::reverse (4,1,3,2);
 cmp_ok("@b",'eq','1 2 3 4','CORE::reverse then sort');
 
+eval  { @b = sort CORE::revers (4,1,3,2); };
+like($@, qr/^Undefined sort subroutine "CORE::revers" called at /);
 
 
 sub twoface { no warnings 'redefine'; *twoface = sub { $a <=> $b }; &twoface }
index f345869..c3c03ba 100644 (file)
@@ -17,7 +17,7 @@ BEGIN {
 use strict;
 use Config;
 
-plan tests => 816;
+plan tests => 801;
 
 $| = 1;
 
@@ -298,12 +298,6 @@ my $TEST = 'TEST';
     is($res, 1,        "$desc: res value");
     is($one, 'a',      "$desc: \$1 value");
 
-    SKIP: {
-    if (
-        !$Config::Config{d_setlocale}
-    || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-    ) {
-        skip "no locale support", 10 }
   SKIP: {
         skip 'No locale testing without d_setlocale', 10 if(!$Config{d_setlocale});
 
@@ -323,7 +317,6 @@ my $TEST = 'TEST';
         is_tainted($one,   "$desc: \$1 tainted");
         is($res, 1,        "$desc: res value");
         is($one, 'abcd',   "$desc: \$1 value");
-    }
 
         $desc = "match /g with pattern tainted via locale";
 
@@ -348,13 +341,6 @@ my $TEST = 'TEST';
     $s = 'abcd';
     ($res) = $s =~ /$TAINT(.+)/;
     $one = $1;
-    SKIP: {
-    if (
-        !$Config::Config{d_setlocale}
-    || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-    ) {
-        skip "no locale support", 12
-    }
     isnt_tainted($s,   "$desc: s not tainted");
     is_tainted($res,   "$desc: res tainted");
     is_tainted($one,   "$desc: \$1 tainted");
@@ -372,10 +358,9 @@ my $TEST = 'TEST';
     is($res, 'a',      "$desc: res value");
     is($res2,'b',      "$desc: res2 value");
     is($one, 'd',      "$desc: \$1 value");
-    }
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 12 if(!$Config{d_setlocale}) || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/;
+        skip 'No locale testing without d_setlocale', 12 if(!$Config{d_setlocale});
 
         $desc = "match with pattern tainted via locale, list cxt";
 
@@ -494,13 +479,6 @@ my $TEST = 'TEST';
     is($one, 'd',      "$desc: \$1 value");
 
     $desc = "substitution /ge with pattern tainted";
-    SKIP: {
-    if (
-        !$Config::Config{d_setlocale}
-    || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-    ) {
-        skip "no locale support", 18
-    }
 
     $s = 'abc';
     {
@@ -540,10 +518,9 @@ my $TEST = 'TEST';
     is($s,  'abcd',    "$desc: s value");
     is($res, 'xyz',    "$desc: res value");
     is($one, 'abcd',   "$desc: \$1 value");
-    }
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 18 if(!$Config{d_setlocale} || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/);
+        skip 'No locale testing without d_setlocale', 18 if(!$Config{d_setlocale});
 
         $desc = "substitution with pattern tainted via locale";
 
@@ -684,13 +661,6 @@ my $TEST = 'TEST';
        $desc = "use re 'taint': match /g with string tainted";
 
        $s = 'abcd' . $TAINT;
-    SKIP: {
-    if (
-        !$Config::Config{d_setlocale}
-    || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-    ) {
-        skip "no locale support", 10
-    }
        $res = $s =~ /(.)/g;
        $one = $1;
        is_tainted($s,     "$desc: s tainted");
@@ -698,7 +668,6 @@ my $TEST = 'TEST';
        is_tainted($one,   "$desc: \$1 tainted");
        is($res, 1,        "$desc: res value");
        is($one, 'a',      "$desc: \$1 value");
-    }
 
        $desc = "use re 'taint': match with string tainted, list cxt";
 
@@ -716,13 +685,6 @@ my $TEST = 'TEST';
        $s = 'abcd' . $TAINT;
        ($res, $res2) = $s =~ /(.)/g;
        $one = $1;
-    SKIP: {
-    if (
-        !$Config::Config{d_setlocale}
-    || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-    ) {
-        skip "no locale support", 12
-    }
        is_tainted($s,     "$desc: s tainted");
        is_tainted($res,   "$desc: res tainted");
        is_tainted($res2,  "$desc: res2 tainted");
@@ -730,7 +692,6 @@ my $TEST = 'TEST';
        is($res, 'a',      "$desc: res value");
        is($res2,'b',      "$desc: res2 value");
        is($one, 'd',      "$desc: \$1 value");
-    }
 
        $desc = "use re 'taint': match with pattern tainted";
 
@@ -755,7 +716,7 @@ my $TEST = 'TEST';
        is($one, 'a',      "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 10 if(!$Config{d_setlocale} || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/);
+        skip 'No locale testing without d_setlocale', 10 if(!$Config{d_setlocale});
 
         $desc = "use re 'taint': match with pattern tainted via locale";
 
@@ -816,7 +777,7 @@ my $TEST = 'TEST';
        is($one, 'd',      "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 12 if(!$Config{d_setlocale} || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/);
+        skip 'No locale testing without d_setlocale', 12 if(!$Config{d_setlocale});
 
         $desc = "use re 'taint': match with pattern tainted via locale, list cxt";
 
@@ -865,13 +826,6 @@ my $TEST = 'TEST';
        is_tainted($one,   "$desc: \$1 tainted");
        is($s,   'xyz',    "$desc: s value");
        is($res, 1,        "$desc: res value");
-    SKIP: {
-    if (
-        !$Config::Config{d_setlocale}
-    || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-    ) {
-        skip "no locale support", 18
-    }
        is($one, 'abcd',   "$desc: \$1 value");
 
        $desc = "use re 'taint': substitution /g with string tainted";
@@ -897,7 +851,6 @@ my $TEST = 'TEST';
        is($s,   'abcd',   "$desc: s value");
        is($res, 'xyz',    "$desc: res value");
        is($one, 'abcd',   "$desc: \$1 value");
-    }
 
        $desc = "use re 'taint': substitution /e with string tainted";
 
@@ -985,7 +938,8 @@ my $TEST = 'TEST';
        is($one, 'abcd',   "$desc: \$1 value");
 
   SKIP: {
-        skip 'No locale testing without d_setlocale', 18 if(!$Config{d_setlocale} || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/);
+        skip 'No locale testing without d_setlocale', 18 if(!$Config{d_setlocale});
+
         $desc = "use re 'taint': substitution with pattern tainted via locale";
 
         $s = 'abcd';
@@ -2257,13 +2211,7 @@ end
     isnt_tainted($b, "regex optimization of single char /[]/i doesn't taint");
 }
 
-SKIP: {
-    if (
-        !$Config::Config{d_setlocale}
-    || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-    ) {
-        skip "no locale support", 4
-    }
+{
     # RT 81230: tainted value during FETCH created extra ref to tied obj
 
     package P81230;
@@ -2394,7 +2342,7 @@ pass("no death when TARG of ref is tainted");
 }
 
 SKIP: {
-    skip 'No locale testing without d_setlocale', 4 if(!$Config{d_setlocale} || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/);
+    skip 'No locale testing without d_setlocale', 4 if(!$Config{d_setlocale});
 
     use feature 'fc';
     BEGIN {
@@ -2435,6 +2383,20 @@ $::x = "foo";
 $_ = "$TAINT".reset "x";
 is eval { eval $::x.1 }, 1, 'reset does not taint undef';
 
+# [perl #122669]
+{
+    # See the comment above the first formline test.
+    local $ENV{PATH} = $ENV{PATH};
+    $ENV{PATH} = $old_env_path if $Is_MSWin32;
+    is runperl(
+       switches => [ '-T' ],
+       prog => 'use constant K=>$^X; 0 if K; BEGIN{} use strict; '
+              .'print 122669, qq-\n-',
+       stderr => 1,
+     ), "122669\n",
+        'tainted constant as logop condition should not prevent "use"';
+}
+
 # This may bomb out with the alarm signal so keep it last
 SKIP: {
     skip "No alarm()"  unless $Config{d_alarm};
index 734b838..5cb9191 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan tests => 70;
+plan tests => 72;
 
 # These tests make sure, among other things, that we don't end up
 # burning tons of CPU for dates far in the future.
@@ -238,3 +238,11 @@ SKIP: { #rt #73040
     like $warning, qr/^localtime\($small_time_f\) too small/;
     like $warning, qr/^localtime\($small_time_f\) failed/m;
 }
+
+{
+    local $^W;
+    scalar gmtime("NaN");
+    pass('[perl #123495] gmtime(NaN) does not crash');
+    scalar localtime("NaN");
+    pass('localtime(NaN) does not crash');
+}
index 7591cde..7f0e881 100644 (file)
@@ -98,7 +98,7 @@ for my $tref ( @NumTests ){
 my $bas_tests = 21;
 
 # number of tests in section 3
-my $bug_tests = 66 + 3 * 3 * 5 * 2 * 3 + 2 + 66 + 4 + 2 + 3 + 96 + 11;
+my $bug_tests = 66 + 3 * 3 * 5 * 2 * 3 + 2 + 66 + 4 + 2 + 3 + 96 + 11 + 3;
 
 # number of tests in section 4
 my $hmb_tests = 37;
@@ -1935,6 +1935,42 @@ format Potshriggley =
    is $x, undef, 'formats in subs do not leak';
 }
 
+fresh_perl_is(<<'EOP', <<'EXPECT',
+use warnings 'syntax' ;
+format STDOUT =
+^*|^*
+my $x = q/dd/, $x
+.
+write;
+EOP
+dd|
+EXPECT
+             { stderr => 1 }, '#123245 panic in sv_chop');
+
+fresh_perl_is(<<'EOP', <<'EXPECT',
+use warnings 'syntax' ;
+format STDOUT =
+^*|^*
+my $x = q/dd/
+.
+write;
+EOP
+Not enough format arguments at - line 4.
+dd|
+EXPECT
+             { stderr => 1 }, '#123245 different panic in sv_chop');
+
+fresh_perl_is(<<'EOP', <<'EXPECT',
+format STDOUT =
+# x at the end to make the spaces visible
+@... x
+q/a/
+.
+write;
+EOP
+a    x
+EXPECT
+             { stderr => 1 }, '#123538 crash in FF_MORE');
 
 #############################
 ## Section 4
index 3c636c0..04c8db0 100644 (file)
@@ -1,4 +1,12 @@
-Digest::MD5 cpan/Digest-MD5/t/files.t c1417867017210ce3d199eb9d55d8ef61fdf1a83
+CPAN cpan/CPAN/lib/CPAN/Author.pm 792d7c8fbe6ed45e1244e589a8b712878c5dd2a5
+CPAN cpan/CPAN/lib/CPAN/CacheMgr.pm 132adb7f96014ec7ded45457044ed925d3181475
+CPAN cpan/CPAN/lib/CPAN/FTP.pm 3f0d5fc572c8749a566d73ca892c6c89ce3fb676
+CPAN cpan/CPAN/lib/CPAN/HandleConfig.pm e52052b6ef6d1d664f0ffa6cf01d48a8d1321520
+CPAN cpan/CPAN/lib/CPAN/HTTP/Client.pm 242842ca566fd8e3d776deb549ff758a571ca2e3
+CPAN cpan/CPAN/lib/CPAN/Index.pm 73aee30450127c5ac4dc05abc2c10a8accd4b198
+CPAN cpan/CPAN/lib/CPAN/LWP/UserAgent.pm e09525b0c2377c5ac28b7fad1b6d70c57e343913
+CPAN cpan/CPAN/lib/CPAN/Mirrors.pm 580e74746abaf1628d533015d5b529d82a470af4
+Digest::MD5 cpan/Digest-MD5/t/files.t bdbe05b705d9da305fedce7a9f4b6ba63250c7cf
 Encode cpan/Encode/bin/enc2xs f60036fd3574ec05c9aab7f4db00a828d5dea92d
 Encode cpan/Encode/Byte/Makefile.PL 0986e25f981a3bf182a13a0060d28d4efedd87e6
 Encode cpan/Encode/CN/Makefile.PL 5507a49d822d0c1d14e967f4595e29e9c873540b
@@ -12,6 +20,7 @@ Encode cpan/Encode/Symbol/Makefile.PL 4beddbbd00f638b7de9c6cd0821d9d38020a8218
 Encode cpan/Encode/TW/Makefile.PL 0cc44f95e59f45c0fb3b66bde41525f13c19a25c
 Module::Build cpan/Module-Build/lib/Module/Build/ConfigData.pm 85eb9656e68d1f256737dc52d86b5d0fed28f832
 PerlIO::via::QuotedPrint cpan/PerlIO-via-QuotedPrint/t/QuotedPrint.t ca39f0146e89de02c746e199c45dcb3e5edad691
+Pod::Parser cpan/Pod-Parser/lib/Pod/PlainText.pm f0b490545b4e52e141450d1192d0ca00bd8d7a82
 Text::Balanced cpan/Text-Balanced/t/01_compile.t 1598cf491a48fa546260a2ec41142abe84da533d
 Text::Balanced cpan/Text-Balanced/t/02_extbrk.t 6ba1b64a4604e822dc2260b8ffcea6b406339ee8
 Text::Balanced cpan/Text-Balanced/t/03_extcbk.t 3307c980af28963414cab799c427b359ef3b8657
index 165738c..8d9f070 100644 (file)
@@ -23,12 +23,6 @@ use File::Spec::Functions;
 # Exceptions that are found in dual-life bin dirs but aren't
 # installed by default; some occur only during testing:
 my $not_installed = qr{^(?:
-  \.\./cpan/Archive-Tar/bin/ptar.*
-   |
-  \.\./cpan/JSON-PP/bin/json_pp
-   |
-  \.\./cpan/IO-Compress/bin/zipdetails
-   |
   \.\./cpan/Encode/bin/u(?:cm(?:2table|lint|sort)|nidump)
    |
   \.\./cpan/Module-(?:Metadata|Build)
index 6509140..7965f4e 100755 (executable)
@@ -20,7 +20,7 @@ BEGIN {
     require './test.pl';
 }
 
-plan tests => 722;  # Update this when adding/deleting tests.
+plan tests => 726;  # Update this when adding/deleting tests.
 
 run_tests() unless caller;
 
@@ -509,13 +509,7 @@ sub run_tests {
         is(qr/\b\v$/,     '(?^:\b\v$)', 'qr/\b\v$/');
     }
 
-    SKIP: {   # Test that charset modifier work, and are interpolated
-        if (
-            !$Config::Config{d_setlocale}
-        || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-        ) {
-            skip "no locale support", 13
-        }
+    {   # Test that charset modifier work, and are interpolated
         is(qr/\b\v$/, '(?^:\b\v$)', 'Verify no locale, no unicode_strings gives default modifier');
         is(qr/(?l:\b\v$)/, '(?^:(?l:\b\v$))', 'Verify infix l modifier compiles');
         is(qr/(?u:\b\v$)/, '(?^:(?u:\b\v$))', 'Verify infix u modifier compiles');
@@ -1594,6 +1588,20 @@ EOP
         like("X", qr/$x/, "UTF-8 of /[x]/i matches upper case");
     }
 
+    {  # [perl #123539]
+        like("TffffffffffffTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT5TTTTTTTTTTTTTTTTTTTTTTTTT3TTgTTTTTTTTTTTTTTTTTTTTT2TTTTTTTTTTTTTTTTTTTTTTTHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHiHHHHHHHfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&ffff", qr/TffffffffffffTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT5TTTTTTTTTTTTTTTTTTTTTTTTT3TTgTTTTTTTTTTTTTTTTTTTTT2TTTTTTTTTTTTTTTTTTTTTTTHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHiHHHHHHHfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&ffff/il, "");
+        like("TffffffffffffT\x{100}TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT5TTTTTTTTTTTTTTTTTTTTTTTTT3TTgTTTTTTTTTTTTTTTTTTTTT2TTTTTTTTTTTTTTTTTTTTTTTHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHiHHHHHHHfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&ffff", qr/TffffffffffffT\x{100}TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT5TTTTTTTTTTTTTTTTTTTTTTTTT3TTgTTTTTTTTTTTTTTTTTTTTT2TTTTTTTTTTTTTTTTTTTTTTTHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHiHHHHHHHfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&ffff/il, "");
+    }
+
+       {       # [perl #123604]
+               my($s, $x, @x) = ('abc', 'a', 'd');
+               my $long = 'b' x 2000;
+               my $eval = q{$s =~ m{$x[bbb]c} ? 1 : 0};
+               $eval =~ s{bbb}{$long};
+               my $match = eval $eval;
+               ok(1, "did not crash");
+               ok($match, "[bbb...] resolved as character class, not subscript");
+       }
 } # End of sub run_tests
 
 1;
index a0e1551..94090e9 100644 (file)
@@ -432,7 +432,7 @@ foreach my $test_ref (@CF) {
         utf8::upgrade($utf8);
         is(fc($latin1), fc($utf8), "fc() gives the same results for \\x{$_} in Latin-1 and UTF-8 under unicode_strings");
         SKIP: {
-              skip 'No locale testing without d_setlocale', 2 if(!$Config{d_setlocale}) || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/;
+              skip 'No locale testing without d_setlocale', 2 if(!$Config{d_setlocale});
               BEGIN {
                   if($Config{d_setlocale}) {
                       require locale; import locale;
@@ -441,13 +441,7 @@ foreach my $test_ref (@CF) {
             is(fc($latin1), lc($latin1), "use locale; fc(qq{\\x{$_}}), lc(qq{\\x{$_}}) when qq{\\x{$_}} is in latin-1");
             is(fc($utf8), lc($utf8), "use locale; fc(qq{\\x{$_}}), lc(qq{\\x{$_}}) when qq{\\x{$_}} is in latin-1");
         }
-        SKIP: {
-            if (
-                !$Config::Config{d_setlocale}
-            || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-            ) {
-                skip "no locale support", 2
-            }
+        {
             no feature 'unicode_strings';
             is(fc($latin1), lc($latin1), "under nothing, fc() for <256 is the same as lc");
         }
index dbc8e01..bd87b66 100644 (file)
@@ -101,12 +101,6 @@ eval {
         $have_setlocale++;
     }
 };
-if (
-    !$Config::Config{d_setlocale}
-  || $Config::Config{ccflags} =~ /\bD?NO_LOCALE(_|\b)/
-) {
-    $have_setlocale = 0;
-}
 
 SKIP: {
     if (!$have_setlocale) {
index 0028b18..906d56c 100644 (file)
@@ -2268,9 +2268,10 @@ S_force_word(pTHX_ char *start, int token, int check_keyword, int allow_pack)
        s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, allow_pack, &len);
        if (check_keyword) {
          char *s2 = PL_tokenbuf;
+         STRLEN len2 = len;
          if (allow_pack && len > 6 && strnEQ(s2, "CORE::", 6))
-           s2 += 6, len -= 6;
-         if (keyword(s2, len, 0))
+           s2 += 6, len2 -= 6;
+         if (keyword(s2, len2, 0))
            return start;
        }
        start_force(PL_curforce);
@@ -4071,11 +4072,10 @@ S_intuit_more(pTHX_ char *s)
                    && !(last_un_char == '$' || last_un_char == '@'
                         || last_un_char == '&')
                    && isALPHA(*s) && s[1] && isALPHA(s[1])) {
-                   char *d = tmpbuf;
+                   char *d = s;
                    while (isALPHA(*s))
-                       *d++ = *s++;
-                   *d = '\0';
-                   if (keyword(tmpbuf, d - tmpbuf, 0))
+                       s++;
+                   if (keyword(d, s - d, 0))
                        weight -= 150;
                }
                if (un_char == last_un_char + 1)
index 4056b4b..e5cca08 100644 (file)
  */
 /*#define HAS_LOCALECONV       / **/
 
-/* HAS_LC_MONETARY_2008:
- *     This symbol, if defined, indicates that the localeconv routine is
- *     available and has the additional members added in POSIX 1003.1-2008.
- */
-/*#define HAS_LC_MONETARY_2008 / **/
-
 /* HAS_LOCKF:
  *     This symbol, if defined, indicates that the lockf routine is
  *     available to do file locking.
 #endif
 
 /* Generated from:
- * 1efb97c1f4b2c9e6bb17b9172f43cc7f281124904ecca38fa6561d6800432847 config_h.SH
- * 87143cb3dacf7a54fe1df682d22e85daae58d626055b7bd02efa3d12d3f05c27 uconfig.sh
+ * 7557e985de18f71e80f627226b454bc8eaf20477dcf0c45b5b2c51ec792f5c89 config_h.SH
+ * dbc8d38ba52ae23e5423418bb3f56b1b6fcdaa82cf71ba0be3463e8221bfe0c0 uconfig.sh
  * ex: set ro: */
index f246095..9585636 100644 (file)
@@ -235,7 +235,6 @@ d_isinf='undef'
 d_isnan='undef'
 d_isnanl='undef'
 d_killpg='undef'
-d_lc_monetary_2008='undef'
 d_lchown='undef'
 d_ldbl_dig='undef'
 d_libm_lib_version='undef'
index dfff260..98c0195 100644 (file)
@@ -236,7 +236,6 @@ d_isinf='undef'
 d_isnan='undef'
 d_isnanl='undef'
 d_killpg='undef'
-d_lc_monetary_2008='undef'
 d_lchown='undef'
 d_ldbl_dig='undef'
 d_libm_lib_version='undef'
index 4ae2c64..5a3c077 100644 (file)
@@ -4408,9 +4408,6 @@ Perl_parse_unicode_opts(pTHX_ const char **popt)
 U32
 Perl_seed(pTHX)
 {
-#if defined(__OpenBSD__)
-       return arc4random();
-#else
     dVAR;
     /*
      * This is really just a quick hack which grabs various garbage
@@ -4487,7 +4484,6 @@ Perl_seed(pTHX)
     u += SEED_C5 * (U32)PTR2UV(&when);
 #endif
     return u;
-#endif
 }
 
 void
@@ -5307,10 +5303,10 @@ Perl_get_db_sub(pTHX_ SV **svp, CV *cv)
     if (!PERLDB_SUB_NN) {
        GV *gv = CvGV(cv);
 
-       if (!svp) {
+       if (gv && !svp) {
            gv_efullname3(dbsv, gv, NULL);
        }
-       else if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED))
+       else if ( (CvFLAGS(cv) & (CVf_ANON | CVf_CLONED)) || !gv
             || strEQ(GvNAME(gv), "END")
             || ( /* Could be imported, and old sub redefined. */
                 (GvCV(gv) != cv || !S_gv_has_usable_name(aTHX_ gv))
index 268a04d..d1e5b8f 100644 (file)
@@ -11,16 +11,22 @@ utils/enc2xs
 utils/h2ph
 utils/h2xs
 utils/instmodsh
+utils/json_pp
 utils/libnetcfg
-utils/perlbug
+utils/perlbug  # link = utils/perlthanks
 utils/perldoc
 utils/perlivp
 utils/piconv
 utils/pl2pm
 utils/pod2html
 utils/prove
+utils/ptar
+utils/ptardiff
+utils/ptargrep
+utils/shasum
 utils/splain
 utils/xsubpp
+utils/zipdetails
 x2p/a2p
 x2p/find2perl
 x2p/s2p         # link = x2p/psed
index d80cfad..8e461d4 100644 (file)
@@ -35,9 +35,9 @@ print $fh <<'EOT';
 # Files to be built with variable substitution after miniperl is
 # available.  Dependencies handled manually below (for now).
 
-pl = c2ph.PL config_data.PL corelist.PL cpan.PL h2ph.PL h2xs.PL instmodsh.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL prove.PL splain.PL libnetcfg.PL piconv.PL enc2xs.PL xsubpp.PL pod2html.PL
-plextract = c2ph config_data corelist cpan h2ph h2xs instmodsh perlbug perldoc perlivp pl2pm prove splain libnetcfg piconv enc2xs xsubpp pod2html
-plextractexe = ./c2ph ./config_data ./corelist ./cpan ./h2ph ./h2xs ./instmodsh ./perlbug ./perldoc ./perlivp ./pl2pm ./prove ./splain ./libnetcfg ./piconv ./enc2xs ./xsubpp ./pod2html
+pl = c2ph.PL config_data.PL corelist.PL cpan.PL h2ph.PL h2xs.PL instmodsh.PL json_pp.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL prove.PL ptar.PL ptardiff.PL ptargrep.PL shasum.PL splain.PL libnetcfg.PL piconv.PL enc2xs.PL xsubpp.PL pod2html.PL zipdetails.PL
+plextract = c2ph config_data corelist cpan h2ph h2xs instmodsh json_pp perlbug perldoc perlivp pl2pm prove ptar ptardiff ptargrep shasum splain libnetcfg piconv enc2xs xsubpp pod2html zipdetails
+plextractexe = ./c2ph ./config_data ./corelist ./cpan ./h2ph ./h2xs ./json_pp ./instmodsh ./perlbug ./perldoc ./perlivp ./pl2pm ./prove ./ptar ./ptardiff ./ptargrep ./shasum ./splain ./libnetcfg ./piconv ./enc2xs ./xsubpp ./pod2html ./zipdetails
 
 all: $(plextract) 
 
@@ -58,6 +58,8 @@ h2xs:         h2xs.PL ../config.sh
 
 instmodsh:     instmodsh.PL ../config.sh
 
+json_pp:       json_pp.PL ../config.sh
+
 perlbug:       perlbug.PL ../config.sh ../patchlevel.h
 
 perldoc:       perldoc.PL ../config.sh
@@ -66,8 +68,16 @@ perlivp:     perlivp.PL ../config.sh
 
 prove:         prove.PL ../config.sh
 
+ptar:          ptar.PL ../config.sh
+
+ptardiff:      ptardiff.PL ../config.sh
+
+ptargrep:      ptargrep.PL ../config.sh
+
 pl2pm:         pl2pm.PL ../config.sh
 
+shasum:                shasum.PL ../config.sh
+
 splain:                splain.PL ../config.sh ../lib/diagnostics.pm
 
 libnetcfg:     libnetcfg.PL ../config.sh
@@ -78,6 +88,8 @@ enc2xs:               enc2xs.PL ../config.sh
 
 xsubpp:                xsubpp.PL ../config.sh
 
+zipdetails:    zipdetails.PL ../config.sh
+
 pod2html:      pod2html.PL ../config.sh ../ext/Pod-Html/bin/pod2html
 
 clean:
index 15a0fe4..9a8b14d 100644 (file)
@@ -571,7 +571,7 @@ sub next_line
                 $in =~ s/\?\?</{/g;                         # | ??<|  {|
                 $in =~ s/\?\?>/}/g;                         # | ??>|  }|
             }
-           if ($in =~ s/^\#ifdef __LANGUAGE_PASCAL__//) {
+           if ($in =~ /^\#ifdef __LANGUAGE_PASCAL__/) {
                # Tru64 disassembler.h evilness: mixed C and Pascal.
                while (<IN>) {
                    last if /^\#endif/;
@@ -579,8 +579,8 @@ sub next_line
                $in = "";
                next READ;
            }
-           # Skip inlined functions in headers
-           if ($in =~ s/^(extern|static) (__inline__|inline) .*[^;]\s*$//) {
+           if ($in =~ /^extern inline / && # Inlined assembler.
+               $^O eq 'linux' && $file =~ m!(?:^|/)asm/[^/]+\.h$!) {
                while (<IN>) {
                    last if /^}/;
                }
index 093ca96..885785a 100644 (file)
@@ -345,14 +345,15 @@ sub Query {
 This program provides an easy way to send a thank-you message back to the
 authors and maintainers of perl.
 
-If you wish to submit a bug report, please run it without the -T flag.
+If you wish to submit a bug report, please run it without the -T flag
+(or run the program perlbug rather than perlthanks)
 EOF
        } else {
            paraprint <<"EOF";
 This program provides an easy way to create a message reporting a
 bug in the core perl distribution (along with tests or patches)
 to the volunteers who maintain perl at $address.  To send a thank-you
-note to $thanksaddress instead of a bug report, please use the -T flag.
+note to $thanksaddress instead of a bug report, please run 'perlthanks'.
 
 Please do not use $0 to send test messages, test whether perl
 works, or to report bugs in perl modules from CPAN.
@@ -1243,6 +1244,8 @@ S<[ B<-S> ]> S<[ B<-t> ]>  S<[ B<-d> ]>  S<[ B<-A> ]>  S<[ B<-h> ]> S<[ B<-T> ]>
 B<perlbug> S<[ B<-v> ]> S<[ B<-r> I<returnaddress> ]>
  S<[ B<-A> ]> S<[ B<-ok> | B<-okay> | B<-nok> | B<-nokay> ]>
 
+B<perlthanks>
+
 =head1 DESCRIPTION
 
 
@@ -1395,8 +1398,8 @@ description of what's wrong is fine.
 
 =item Can you use C<perlbug> to submit a thank-you note?
 
-Yes, you can do this by using the C<-T> option.
-Thank-you notes are good. It makes people
+Yes, you can do this by either using the C<-T> option, or by invoking
+the program as C<perlthanks>. Thank-you notes are good. It makes people
 smile. 
 
 =back
index 02b826f..1f26140 100644 (file)
@@ -587,11 +587,7 @@ VER_NV:
 
        /* may get too much accuracy */ 
        char tbuf[64];
-#ifdef __vax__
-       SV *sv = SvNVX(ver) > 10e37 ? newSV(64) : 0;
-#else
        SV *sv = SvNVX(ver) > 10e50 ? newSV(64) : 0;
-#endif
        char *buf;
 #ifdef USE_LOCALE_NUMERIC
         const char * const cur_numeric = setlocale(LC_NUMERIC, NULL);
index c084e4d..aa664ce 100644 (file)
@@ -37,7 +37,7 @@ INST_TOP      = $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      = \5.20.1
+#INST_VER      = \5.20.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -1192,7 +1192,7 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5201delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5202delta.pod
        cd ..\win32
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
@@ -1265,7 +1265,6 @@ distclean: realclean
        -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
        -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
        -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
-       -if exist $(LIBDIR)\OpenBSD rmdir /s /q $(LIBDIR)\OpenBSD
        -if exist $(LIBDIR)\Package rmdir /s /q $(LIBDIR)\Package
        -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
        -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
@@ -1291,7 +1290,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5201delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5202delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
@@ -1299,7 +1298,8 @@ distclean: realclean
            perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
            perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
            perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
-           perltru64.pod perltw.pod perlvos.pod perlwin32.pod
+           perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
+           perlwin32.pod
        -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
            perldoc perlivp libnetcfg enc2xs piconv cpan *.bat \
            xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist config_data zipdetails
index 45ef282..bb87699 100644 (file)
@@ -283,7 +283,6 @@ d_isinf='undef'
 d_isnan='define'
 d_isnanl='undef'
 d_killpg='undef'
-d_lc_monetary_2008='undef'
 d_lchown='undef'
 d_ldbl_dig='define'
 d_libm_lib_version='undef'
@@ -291,7 +290,7 @@ d_link='define'
 d_localtime64='undef'
 d_localtime_r='undef'
 d_localtime_r_needs_tzset='undef'
-d_locconv='define'
+d_locconv='undef'
 d_lockf='undef'
 d_longdbl='undef'
 d_longlong='undef'
@@ -637,7 +636,7 @@ i_inttypes='undef'
 i_langinfo='undef'
 i_libutil='undef'
 i_limits='define'
-i_locale='undef'
+i_locale='define'
 i_machcthr='undef'
 i_malloc='define'
 i_mallocmalloc='undef'
index 645628a..39cdaef 100644 (file)
@@ -283,7 +283,6 @@ d_isinf='undef'
 d_isnan='define'
 d_isnanl='undef'
 d_killpg='define'
-d_lc_monetary_2008='undef'
 d_lchown='undef'
 d_ldbl_dig='define'
 d_libm_lib_version='undef'
index 7444e02..eef02e1 100644 (file)
@@ -283,7 +283,6 @@ d_isinf='undef'
 d_isnan='define'
 d_isnanl='undef'
 d_killpg='define'
-d_lc_monetary_2008='undef'
 d_lchown='undef'
 d_ldbl_dig='define'
 d_libm_lib_version='undef'
index 9f6e9fe..02231a1 100644 (file)
@@ -43,7 +43,7 @@ INST_TOP      *= $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      *= \5.20.1
+#INST_VER      *= \5.20.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -1391,7 +1391,7 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5201delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5202delta.pod
        $(PERLEXE) $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1463,7 +1463,6 @@ distclean: realclean
        -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
        -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
        -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
-       -if exist $(LIBDIR)\OpenBSD rmdir /s /q $(LIBDIR)\OpenBSD
        -if exist $(LIBDIR)\Package rmdir /s /q $(LIBDIR)\Package
        -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
        -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
@@ -1489,7 +1488,7 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5201delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5202delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
@@ -1497,7 +1496,8 @@ distclean: realclean
            perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
            perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
            perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
-           perltru64.pod perltw.pod perlvos.pod perlwin32.pod
+           perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
+           perlwin32.pod
        -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
            perldoc perlivp libnetcfg enc2xs piconv cpan *.bat \
            xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist config_data zipdetails
index 51c54f4..1f9593a 100644 (file)
@@ -35,8 +35,10 @@ POD = perl.pod       \
        perl5180delta.pod       \
        perl5181delta.pod       \
        perl5182delta.pod       \
+       perl5184delta.pod       \
        perl5200delta.pod       \
        perl5201delta.pod       \
+       perl5202delta.pod       \
        perl561delta.pod        \
        perl56delta.pod \
        perl581delta.pod        \
@@ -134,6 +136,7 @@ POD = perl.pod      \
        perltoot.pod    \
        perltrap.pod    \
        perlunicode.pod \
+       perlunicook.pod \
        perlunifaq.pod  \
        perluniintro.pod        \
        perluniprops.pod        \
@@ -165,8 +168,10 @@ MAN = perl.man     \
        perl5180delta.man       \
        perl5181delta.man       \
        perl5182delta.man       \
+       perl5184delta.man       \
        perl5200delta.man       \
        perl5201delta.man       \
+       perl5202delta.man       \
        perl561delta.man        \
        perl56delta.man \
        perl581delta.man        \
@@ -264,6 +269,7 @@ MAN = perl.man      \
        perltoot.man    \
        perltrap.man    \
        perlunicode.man \
+       perlunicook.man \
        perlunifaq.man  \
        perluniintro.man        \
        perluniprops.man        \
@@ -295,8 +301,10 @@ HTML = perl.html   \
        perl5180delta.html      \
        perl5181delta.html      \
        perl5182delta.html      \
+       perl5184delta.html      \
        perl5200delta.html      \
        perl5201delta.html      \
+       perl5202delta.html      \
        perl561delta.html       \
        perl56delta.html        \
        perl581delta.html       \
@@ -393,6 +401,7 @@ HTML = perl.html    \
        perltoot.html   \
        perltrap.html   \
        perlunicode.html        \
+       perlunicook.html        \
        perlunifaq.html \
        perluniintro.html       \
        perluniprops.html       \
@@ -425,8 +434,10 @@ TEX = perl.tex     \
        perl5180delta.tex       \
        perl5181delta.tex       \
        perl5182delta.tex       \
+       perl5184delta.tex       \
        perl5200delta.tex       \
        perl5201delta.tex       \
+       perl5202delta.tex       \
        perl561delta.tex        \
        perl56delta.tex \
        perl581delta.tex        \
@@ -524,6 +535,7 @@ TEX = perl.tex      \
        perltoot.tex    \
        perltrap.tex    \
        perlunicode.tex \
+       perlunicook.tex \
        perlunifaq.tex  \
        perluniintro.tex        \
        perluniprops.tex        \
index 8db0303..735c450 100644 (file)
@@ -254,11 +254,6 @@ typedef unsigned short     mode_t;
 #define snprintf       _snprintf
 #define vsnprintf      _vsnprintf
 
-#ifdef USING_MSVC6
-/* VC6 has broken NaN semantics: NaN == NaN returns true instead of false */
-#define NAN_COMPARE_BROKEN 1
-#endif
-
 /* on VC2003, msvcrt.lib is missing these symbols */
 #if _MSC_VER >= 1300 && _MSC_VER < 1400
 #  pragma intrinsic(_rotl64,_rotr64)
@@ -397,8 +392,8 @@ typedef  char *             caddr_t;        /* In malloc.c (core address). */
 
 #ifdef MYMALLOC
 #define EMBEDMYMALLOC  /**/
-/* #define USE_PERL_SBRK       /**/
-/* #define PERL_SBRK_VIA_MALLOC        /**/
+/* #define USE_PERL_SBRK       / **/
+/* #define PERL_SBRK_VIA_MALLOC        / **/
 #endif
 
 #ifdef PERL_TEXTMODE_SCRIPTS