Albert Dvornik <bert@alum.mit.edu>
Alberto Simões <ambs@cpan.org>
Alessandro Forghieri <alf@orion.it>
+Alexandre (Midnite) Jousset <mid@gtmp.org>
Alexander Alekseev <alex@alemate.ru>
Alexander Hartmaier <abraxxa@cpan.org>
Alexander Voronov <alexander-voronov@yandex.ru>
Andrew Burt <aburt@isis.cs.du.edu>
Andrew Cohen <cohen@andy.bu.edu>
andrew deryabin <djsf@technarchy.ru>
+Andrew Fresh <afresh1@openbsd.org>
Andrew Hamm <AHamm@civica.com.au>
Andrew M. Langmead <aml@world.std.com>
Andrew Pimlott <pimlott@idiomtech.com>
Merijn Broeren <merijnb@iloquent.nl>
Michael A Chase <mchase@ix.netcom.com>
Michael Breen <perl@mbreen.com>
+Michael Bunk <bunk@iat.uni-leipzig.de>
Michael Carman <mjcarman@home.com>
Michael Cook <mcook@cognex.com>
Michael Cummings <mcummings@gentoo.org>
Tobias Leich <email@froggs.de>
Toby Inkster <mail@tobyinkster.co.uk>
Todd C. Miller <Todd.Miller@courtesan.com>
-Todd Rinaldo <toddr@cpanel.net>
+Todd Rinaldo <toddr@cpan.org>
Todd T. Fries <todd@fries.int.mrleng.com>
Todd Vierling <tv@duh.org>
Tokuhiro Matsuno <tokuhirom@gmail.com>
Vishal Bhatia <vishal@deja.com>
Vlad Harchev <hvv@hippo.ru>
Vladimir Alexiev <vladimir@cs.ualberta.ca>
+Vladimir Marek <vlmarek@volny.cz>
Vladimir Timofeev <vovkasm@gmail.com>
Volker Schatz <perldoc@volkerschatz.com>
W. Geoffrey Rommel <grommel@sears.com>
# See Porting/pumpkin.pod for more information on metaconfig.
#
-# Generated on Wed Apr 9 12:24:24 CEST 2014 [metaconfig 3.5 PL0]
+# Generated on Wed Jun 4 08:58:13 CEST 2014 [metaconfig 3.5 PL0]
# (with additional metaconfig patches by perlbug@perl.org)
cat >c1$$ <<EOF
: Proper separator for the PATH environment variable
p_=:
: On OS/2 this directory should exist if this is not floppy only system ":-]"
-if test -d c:/. || ( uname -a | grep -i 'os\(/\|\)2' ) 2>&1 >/dev/null ; then
+if test -d c:/. || ( uname -a | grep -i 'os\(/\|\)2' 2>&1 ) 2>&1 >/dev/null ; then
if test -n "$OS2_SHELL"; then
p_=\;
PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
esac
case "$less" in
'') ;;
-*) if $less -R </dev/null >/dev/null; then
+*) if $less -R </dev/null >/dev/null 2>&1; then
echo "Substituting less -R for less."
less="$less -R"
_less=$less
h_shm=false
val="$undef"
set shmctl d_shmctl
- evat $setvar
+ eval $setvar
set shmget d_shmget
- evat $setvar
+ eval $setvar
set shmat d_shmat
- evat $setvar
+ eval $setvar
set shmdt d_shmdt
- evat $setvar
+ eval $setvar
;;
esac
;;
z8000
EOSH
# Maybe put other stuff here too.
-cat <<EOSH >>Cppsym.know
+./tr '-' '_' <<EOSH >>Cppsym.know
$osname
EOSH
./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
Scalar/List/Utils) this_ext="List/Util" ;;
PathTools) this_ext="Cwd" ;;
esac;
- echo " $xs_extensions $nonxs_extensions" > $$.tmp;
- if $contains " $this_ext " $$.tmp; then
+ echo " $xs_extensions $nonxs_extensions" > $tdir/$$.tmp;
+ if $contains " $this_ext " $tdir/$$.tmp; then
echo >&4;
echo "Duplicate directories detected for extension $xxx" >&4;
echo "Configure cannot correctly recover from this - shall I abort?" >&4;
esac;
echo "Ok. You will need to correct config.sh before running make." >&4;
fi;
- $ls -1 $xxx > $$.tmp;
- if $contains "\.xs$" $$.tmp > /dev/null 2>&1; then
+ $ls -1 $xxx > $tdir/$$.tmp;
+ if $contains "\.xs$" $tdir/$$.tmp > /dev/null 2>&1; then
xs_extensions="$xs_extensions $this_ext";
- elif $contains "\.c$" $$.tmp > /dev/null 2>&1; then
+ elif $contains "\.c$" $tdir/$$.tmp > /dev/null 2>&1; then
xs_extensions="$xs_extensions $this_ext";
elif $test -d $xxx; then
nonxs_extensions="$nonxs_extensions $this_ext";
fi;
- $rm -f $$.tmp;
+ $rm -f $tdir/$$.tmp;
;;
esac;
done'
api_revision='5'
api_subversion='0'
api_version='20'
-api_versionstring='5.20.0'
+api_versionstring='5.20.1'
ar='ar'
-archlib='/usr/lib/perl5/5.20.0/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.20.0/armv4l-linux'
+archlib='/usr/lib/perl5/5.20.1/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.20.1/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
cat='cat'
cc='cc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.20.0/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.20.1/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'
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.20.0/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.20.1/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
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.0'
+installprivlib='./install_me_here/usr/lib/perl5/5.20.1'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.20.0/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.20.0'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.20.1'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.20.0'
-privlibexp='/usr/lib/perl5/5.20.0'
+privlib='/usr/lib/perl5/5.20.1'
+privlibexp='/usr/lib/perl5/5.20.1'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
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.0/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.20.0/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.20.0'
+sitelib='/usr/lib/perl5/site_perl/5.20.1'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.20.0'
+sitelibexp='/usr/lib/perl5/site_perl/5.20.1'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='0'
+subversion='1'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.20.0'
-version_patchlevel_string='version 20 subversion 0'
+version='5.20.1'
+version_patchlevel_string='version 20 subversion 1'
versiononly='undef'
vi=''
xlibpth='/usr/lib/386 /lib/386'
config_argc=0
PERL_REVISION=5
PERL_VERSION=20
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
PERL_API_REVISION=5
PERL_API_VERSION=20
PERL_API_SUBVERSION=0
api_revision='5'
api_subversion='0'
api_version='20'
-api_versionstring='5.20.0'
+api_versionstring='5.20.1'
ar='ar'
-archlib='/usr/lib/perl5/5.20.0/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.20.0/armv4l-linux'
+archlib='/usr/lib/perl5/5.20.1/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.20.1/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
cat='cat'
cc='arm-none-linux-gnueabi-gcc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.20.0/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.20.1/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'
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.20.0/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.20.1/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
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.0'
+installprivlib='./install_me_here/usr/lib/perl5/5.20.1'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.20.0/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.20.0'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.20.1'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.20.0'
-privlibexp='/usr/lib/perl5/5.20.0'
+privlib='/usr/lib/perl5/5.20.1'
+privlibexp='/usr/lib/perl5/5.20.1'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
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.0/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.20.0/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.20.1/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.20.0'
+sitelib='/usr/lib/perl5/site_perl/5.20.1'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.20.0'
+sitelibexp='/usr/lib/perl5/site_perl/5.20.1'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='0'
+subversion='1'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.20.0'
-version_patchlevel_string='version 20 subversion 0'
+version='5.20.1'
+version_patchlevel_string='version 20 subversion 1'
versiononly='undef'
vi=''
xlibpth='/usr/lib/386 /lib/386'
config_argc=0
PERL_REVISION=5
PERL_VERSION=20
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
PERL_API_REVISION=5
PERL_API_VERSION=20
PERL_API_SUBVERSION=0
=item Directories for the perl distribution
-By default, Configure will use the following directories for 5.20.0.
+By default, Configure will use the following directories for 5.20.1.
$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
=head1 Coexistence with earlier versions of perl 5
-Perl 5.20.0 is not binary compatible with earlier versions of Perl.
+Perl 5.20.1 is not binary compatible with earlier versions of Perl.
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.
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.0
+ sh Configure -Dprefix=/opt/perl5.20.1
-and adding /opt/perl5.20.0/bin to the shell PATH variable. Such users
+and adding /opt/perl5.20.1/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.
=head2 Upgrading from 5.19.0 or earlier
-B<Perl 5.20.0 may not be binary compatible with Perl 5.19.11 or
+B<Perl 5.20.1 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.0. If you find you do need to rebuild an extension with
-5.20.0, you may safely do so without disturbing the older
+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
installations. (See L<"Coexistence with earlier versions of perl 5">
above.)
print("$f\n");
}
-in Linux with perl-5.20.0 is as follows (under $Config{prefix}):
+in Linux with perl-5.20.1 is as follows (under $Config{prefix}):
./bin/perl
- ./lib/perl5/5.20.0/strict.pm
- ./lib/perl5/5.20.0/warnings.pm
- ./lib/perl5/5.20.0/i686-linux/File/Glob.pm
- ./lib/perl5/5.20.0/feature.pm
- ./lib/perl5/5.20.0/XSLoader.pm
- ./lib/perl5/5.20.0/i686-linux/auto/File/Glob/Glob.so
+ ./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
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.
cpan/Compress-Raw-Zlib/zlib-src/zutil.c Compress::Raw::Zlib
cpan/Compress-Raw-Zlib/zlib-src/zutil.h Compress::Raw::Zlib
cpan/Compress-Raw-Zlib/Zlib.xs Compress::Raw::Zlib
-cpan/Config-Perl-V/t/00_pod.t Config::Perl::V
-cpan/Config-Perl-V/t/01_pod.t Config::Perl::V
cpan/Config-Perl-V/t/10_base.t Config::Perl::V
-cpan/Config-Perl-V/t/20_plv510.t Config::Perl::V
-cpan/Config-Perl-V/t/21_plv518.t Config::Perl::V
+cpan/Config-Perl-V/t/20_plv56.t Config::Perl::V
+cpan/Config-Perl-V/t/21_plv58.t Config::Perl::V
+cpan/Config-Perl-V/t/22_plv510.t Config::Perl::V
+cpan/Config-Perl-V/t/23_plv512.t Config::Perl::V
+cpan/Config-Perl-V/t/24_plv514.t Config::Perl::V
+cpan/Config-Perl-V/t/25_plv5162.t Config::Perl::V
+cpan/Config-Perl-V/t/25_plv516.t Config::Perl::V
+cpan/Config-Perl-V/t/26_plv5182.t Config::Perl::V
+cpan/Config-Perl-V/t/26_plv518.t Config::Perl::V
+cpan/Config-Perl-V/t/27_plv5200.t Config::Perl::V
cpan/Config-Perl-V/V.pm Config::Perl::V
cpan/CPAN/lib/App/Cpan.pm helper package for CPAN.pm
cpan/CPAN/lib/CPAN/API/HOWTO.pod recipe book for programming with CPAN.pm
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
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/perl5200delta.pod Perl changes in version 5.20.0
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
"url" : "http://perl5.git.perl.org/"
}
},
- "version" : "5.020000"
+ "version" : "5.020001"
}
homepage: http://www.perl.org/
license: http://dev.perl.org/licenses/
repository: http://perl5.git.perl.org/
-version: '5.020000'
+version: '5.020001'
ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
obj = $(ndt_obj) $(DTRACE_O)
-perltoc_pod_prereqs = extra.pods pod/perl5200delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
+perltoc_pod_prereqs = extra.pods pod/perl5201delta.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
# it on the target system if we're cross-compiling.
# If it is defined, then we just run it locally.
case "$hostgenerate" in
-'')
+''|'undef')
$spitshell >>$Makefile <<!GROK!THIS!
bitcount.h: generate_uudmap\$(HOST_EXE_EXT)
$run ./generate_uudmap\$(HOST_EXE_EXT) \$(generated_headers)
pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
$(MINIPERL) pod/perlmodlib.PL -q
-pod/perl5200delta.pod: pod/perldelta.pod
- $(RMS) pod/perl5200delta.pod
- $(LNS) perldelta.pod pod/perl5200delta.pod
+pod/perl5201delta.pod: pod/perldelta.pod
+ $(RMS) pod/perl5201delta.pod
+ $(LNS) perldelta.pod pod/perl5201delta.pod
extra.pods: $(MINIPERL_EXE)
-@test ! -f extra.pods || rm -f `cat extra.pods`
$to cpan/*/t
$to dist/*/t
$to ext/*/t
+ $to cpan/Archive-Tar/*
+ $to cpan/Module-Metadata/*
$to cpan/Term-Cap/test.pl
$to cpan/Pod-Usage/*
$to cpan/Pod-Parser/*
$to *.h
# --- For t/x2p/s2p.t
$to x2p
+# --- For t/porting/customized.t
+ $to vutil.c
+ $to vxs.inc
# --- For t/TEST
$to config.sh
# --- For lib/diagnostics.t with -Duseshrplib
# Here comes the CW tools - TO BE FILLED TO BUILD WITH CW -
-MODULE_DESC = "Perl 5.20.0 for NetWare"
+MODULE_DESC = "Perl 5.20.1 for NetWare"
CCTYPE = CodeWarrior
C_COMPILER = mwccnlm -c
CPP_COMPILER = mwccnlm
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-INST_VER = \5.20.0
+INST_VER = \5.20.1
#
# Comment this out if you DON'T want your perl installation to have
* 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 "c:\\perl\\5.20.0\\lib\\NetWare-x86-multi-thread" /**/
+#define ARCHLIB "c:\\perl\\5.20.1\\lib\\NetWare-x86-multi-thread" /**/
/*#define ARCHLIB_EXP "" /**/
/* ARCHNAME:
* This symbol is the filename expanded version of the BIN symbol, for
* programs that do not want to deal with that at run-time.
*/
-#define BIN "c:\\perl\\5.20.0\\bin\\NetWare-x86-multi-thread" /**/
-#define BIN_EXP "c:\\perl\\5.20.0\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN "c:\\perl\\5.20.1\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN_EXP "c:\\perl\\5.20.1\\bin\\NetWare-x86-multi-thread" /**/
/* BYTEORDER:
* This symbol holds the hexadecimal constant defined in byteorder,
* 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 "c:\\perl\\site\\5.20.0\\lib\\NetWare-x86-multi-thread" /**/
+#define SITEARCH "c:\\perl\\site\\5.20.1\\lib\\NetWare-x86-multi-thread" /**/
/*#define SITEARCH_EXP "" /**/
/* SITELIB:
* 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 "c:\\perl\\site\\5.20.0\\lib" /**/
+#define SITELIB "c:\\perl\\site\\5.20.1\\lib" /**/
/*#define SITELIB_EXP "" /**/
#define SITELIB_STEM "" /**/
},
'Config::Perl::V' => {
- 'DISTRIBUTION' => 'HMBRAND/Config-Perl-V-0.20.tgz',
+ 'DISTRIBUTION' => 'HMBRAND/Config-Perl-V-0.22.tgz',
'FILES' => q[cpan/Config-Perl-V],
- 'EXCLUDED' => ['examples/show-v.pl'],
+ 'EXCLUDED' => [qw(
+ examples/show-v.pl
+ t/00_pod.t
+ t/01_pod.t
+ )],
},
'constant' => {
},
'version' => {
- 'DISTRIBUTION' => 'JPEACOCK/version-0.9908.tar.gz',
+ 'DISTRIBUTION' => 'JPEACOCK/version-0.9909.tar.gz',
'FILES' => q[cpan/version vutil.c vutil.h vxs.inc],
'EXCLUDED' => [
qr{^vutil/lib/},
'CUSTOMIZED' => [
qw( lib/version.pm
),
-
- # Merged upstream, waiting for new CPAN release: see CPAN RT#92721
- qw( vutil.c
- vxs.inc
- ),
],
'MAP' => {
tjenness\100cpan.org t.jenness\100jach.hawaii.edu
+ timj\100jach.hawaii.edu
tobez\100tobez.org tobez\100plab.ku.dk
-toddr\100cpanel.net toddr\100cpan.org
+toddr\100cpan.org toddr\100cpanel.net
tom\100compton.nu thh\100cyberscience.com
tom.horsley\100mail.ccur.com tom.horsley\100ccur.com
+ tom\100amber.ssd.hcsc.com
api_revision='5'
api_subversion='0'
api_version='20'
-api_versionstring='5.20.0'
+api_versionstring='5.20.1'
ar='ar'
-archlib='/pro/lib/perl5/5.20.0/i686-linux-64int'
-archlibexp='/pro/lib/perl5/5.20.0/i686-linux-64int'
+archlib='/pro/lib/perl5/5.20.1/i686-linux-64int'
+archlibexp='/pro/lib/perl5/5.20.1/i686-linux-64int'
archname64='64int'
archname='i686-linux-64int'
archobjs=''
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.0/i686-linux-64int'
+installarchlib='/pro/lib/perl5/5.20.1/i686-linux-64int'
installbin='/pro/bin'
installhtml1dir=''
installhtml3dir=''
installman3dir='/pro/local/man/man3'
installprefix='/pro'
installprefixexp='/pro'
-installprivlib='/pro/lib/perl5/5.20.0'
+installprivlib='/pro/lib/perl5/5.20.1'
installscript='/pro/bin'
-installsitearch='/pro/lib/perl5/site_perl/5.20.0/i686-linux-64int'
+installsitearch='/pro/lib/perl5/site_perl/5.20.1/i686-linux-64int'
installsitebin='/pro/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='/pro/lib/perl5/site_perl/5.20.0'
+installsitelib='/pro/lib/perl5/site_perl/5.20.1'
installsiteman1dir='/pro/local/man/man1'
installsiteman3dir='/pro/local/man/man3'
installsitescript='/pro/bin'
perl_static_inline='static __inline__'
perladmin='hmbrand@cpan.org'
perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/pro/bin/perl5.20.0'
+perlpath='/pro/bin/perl5.20.1'
pg='pg'
phostname='hostname'
pidtype='pid_t'
pr=''
prefix='/pro'
prefixexp='/pro'
-privlib='/pro/lib/perl5/5.20.0'
-privlibexp='/pro/lib/perl5/5.20.0'
+privlib='/pro/lib/perl5/5.20.1'
+privlibexp='/pro/lib/perl5/5.20.1'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
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.0/i686-linux-64int'
-sitearchexp='/pro/lib/perl5/site_perl/5.20.0/i686-linux-64int'
+sitearch='/pro/lib/perl5/site_perl/5.20.1/i686-linux-64int'
+sitearchexp='/pro/lib/perl5/site_perl/5.20.1/i686-linux-64int'
sitebin='/pro/bin'
sitebinexp='/pro/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/pro/lib/perl5/site_perl/5.20.0'
+sitelib='/pro/lib/perl5/site_perl/5.20.1'
sitelib_stem='/pro/lib/perl5/site_perl'
-sitelibexp='/pro/lib/perl5/site_perl/5.20.0'
+sitelibexp='/pro/lib/perl5/site_perl/5.20.1'
siteman1dir='/pro/local/man/man1'
siteman1direxp='/pro/local/man/man1'
siteman3dir='/pro/local/man/man3'
ssizetype='ssize_t'
st_ino_sign='1'
st_ino_size='8'
-startperl='#!/pro/bin/perl5.20.0'
+startperl='#!/pro/bin/perl5.20.1'
startsh='#!/bin/sh'
static_ext=' '
stdchar='char'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='0'
+subversion='1'
sysman='/usr/share/man/man1'
sysroot=''
tail=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.20.0'
-version_patchlevel_string='version 20 subversion 0'
+version='5.20.1'
+version_patchlevel_string='version 20 subversion 1'
versiononly='define'
vi=''
xlibpth='/usr/lib/386 /lib/386'
zip='zip'
PERL_REVISION=5
PERL_VERSION=20
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
PERL_API_REVISION=5
PERL_API_VERSION=20
PERL_API_SUBVERSION=0
* 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.0/i686-linux-64int-ld" /**/
-#define ARCHLIB_EXP "/pro/lib/perl5/5.20.0/i686-linux-64int-ld" /**/
+#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" /**/
/* 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.0" /**/
-#define PRIVLIB_EXP "/pro/lib/perl5/5.20.0" /**/
+#define PRIVLIB "/pro/lib/perl5/5.20.1" /**/
+#define PRIVLIB_EXP "/pro/lib/perl5/5.20.1" /**/
/* 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.0/i686-linux-64int-ld" /**/
-#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.20.0/i686-linux-64int-ld" /**/
+#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" /**/
/* 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.0" /**/
-#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.20.0" /**/
+#define SITELIB "/pro/lib/perl5/site_perl/5.20.1" /**/
+#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.20.1" /**/
#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.0" /**/
+#define STARTPERL "#!/pro/bin/perl5.20.1" /**/
/* HAS_STDIO_STREAM_ARRAY:
* This symbol, if defined, tells that there is an array
=head1 EPIGRAPHS
+=head2 v5.20.1-RC2 - Lorenzo da Ponte, Così fan tutte
+
+L<Announced on 2014-09-07 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2014/09/msg219446.html>
+
+ GUGLIELMO:
+ Oh God, I feel that this foot of mine
+ is reluctant to come before her.
+
+ FERRANDO:
+ My trembling lip
+ can utter no word.
+
+ DON ALFONSO:
+ The hero displays his manliness
+ in the most terrible moments.
+
+ FIORDILIGI, DORABELLA:
+ Now that we have heard the news,
+ you have the lesser duty:
+ Take heart, and plunge your swords
+ into both our hearts.
+
+ FERRANDO, GUGLIELMO:
+ My idol, blame fate
+ that I must abandon you.
+
+ DORABELLA: Ah no, you shall not leave...
+ FIORDILIGI: No, cruel one, you shall not go...
+ DORABELLA: First I want to tear out my heart.
+ FIORDILIGI: First I want to die at your feet.
+ FERRANDO (softly to Don Alfonso): What do you say to that?
+ GUGLIELMO (softly to Don Alfonso): You realise?
+ DON ALFONSO (softly): Steady, friend, finem lauda.
+
+ ALL:
+ Thus destiny defrauds
+ the hopes of mortals.
+ Ah, among so many misfortunes,
+ who can ever love life?
+
+ -- Lorenzo da Ponte, /Così fan tutte/,
+ trans. William Weaver
+
+=head2 v5.20.1-RC1 - Lorenzo da Ponte, Così fan tutte
+
+L<Announced on 2014-08-25 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2014/08/msg218975.html>
+
+ DON ALFONSO:
+ I'd like to speak, but I haven't the heart:
+ my lip stammers.
+ My voice cannot emerge,
+ but remains in my throat.
+ What will you do? What shall I do?
+ Oh what a great catastrophe!
+ There can be nothing worse.
+ I feel pity for you and for them.
+
+ FIORDILIGI: Heavens! For mercy's sake, Signor Alfonso, don't make us
+ die.
+ DON ALFONSO: My children, you must arm yourselves with constancy.
+ DORABELLA: Ye Gods! What evil has occurred? What horrible event? Is my
+ love dead, perhaps?
+ FIORDILIGI: Is mine dead?
+ DON ALFONSO: They are not dead, but they are not far from it.
+ DORABELLA: Wounded?
+ DON ALFONSO: No.
+ FIORDILIGI: Ill?
+ DON ALFONSO: Nor that.
+ FIORDILIGI: What, then?
+ DON ALFONSO: A royal command summons them to the field of battle.
+ FIORDILIGI, DORABELLA: Alas, what do I hear? And they will leave?
+ DON ALFONSO: Immediately.
+ DORABELLA: And there is no way of preventing it?
+ DON ALFONSO: There is none.
+ FIORDILIGI: And not even a single farewell...
+ DON ALFONSO: The unhappy men haven't the courage to see you; but if
+ you wish it, they are ready...
+ DORABELLA: Where are they?
+ DON ALFONSO: Come in, friends.
+
+ -- Lorenzo da Ponte, /Così fan tutte/,
+ trans. William Weaver
+
+=head2 v5.21.3 - Robert Service, The Men that Don't Fit In
+
+L<Announced on 2014-08-20 by Peter Martini|http://www.nntp.perl.org/group/perl.perl5.porters/2014/08/msg218826.html>
+
+ If they just went straight they might go far,
+ They are strong and brave and true;
+ But they're always tired of the things that are,
+ And they want the strange and new.
+ They say: "Could I find my proper groove,
+ What a deep mark I would make!"
+ So they chop and change, and each fresh move
+ Is only a fresh mistake.
+
+=head2 v5.21.2 - Neil Armstrong, Buzz Aldrin, Charlie Duke, Final minutes of communication of the first manned moon landing, July 20, 1969.
+
+L<Announced on 2014-07-20 by Abigail|http://www.nntp.perl.org/group/perl.perl5.porters/2014/07/msg217937.html>
+
+ Armstrong: Okay. Here's a...Looks like a good area here.
+ Aldrin: I got the shadow out there.
+ Aldrin: 250, down at 2 1/2, 19 forward.
+ Aldrin: Altitude, velocity lights.
+ Aldrin: 3 1/2 down, 220 feet, 13 forward.
+ Aldrin: 11 forward. Coming down nicely.
+ Armstrong: Gonna be right over that crater.
+ Aldrin: 200 feet, 4 1/2 down.
+ Aldrin: 5 1/2 down.
+ Armstrong: I got a good spot [garbled].
+ Aldrin: 160 feet, 6 1/2 down.
+ Aldrin: 5 1/2 down, 9 forward. You're looking good.
+ Aldrin: 120 feet.
+ Aldrin: 100 feet, 3 1/2 down, 9 forward. Five percent. Quantity light.
+ Aldrin: Okay. 75 feet. And it's looking good. Down a half, 6 forward.
+ Duke: 60 seconds.
+ Aldrin: Light's on.
+ Aldrin: 60 feet, down 2 1/2. 2 forward. 2 forward. That's good.
+ Aldrin: 40 feet, down 2 1/2. Picking up some dust.
+ Aldrin: 30 feet, 2 1/2 down. [Garbled] shadow.
+ Aldrin: 4 forward. 4 forward. Drifting to the right a little. 20 feet,
+ down a half.
+ Duke: 30 seconds.
+ Aldrin: Drifting forward just a little bit; that's good.
+ Aldrin: Contact Light.
+ Armstrong: Shutdown.
+ Aldrin: Okay. Engine Stop.
+ Aldrin: ACA out of Detent.
+ Armstrong: Out of Detent. Auto.
+ Aldrin: Mode Control, both Auto. Descent Engine Command Override, Off.
+ Engine Arm, Off. 413 is in.
+ Duke: We copy you down, Eagle.
+ Armstrong: Engine arm is off.
+ Armstrong: Houston, Tranquility Base here. The Eagle has landed.
+ Duke: Roger, Twan...[correcting himself] Tranquility. We copy you on
+ the ground. You got a bunch of guys about to turn blue.
+ We're breathing again. Thanks a lot.
+ Aldrin: Thank you.
+
+=head2 v5.21.1 - Robert Jordan, The Crossroads of Twilights, Book 10 of the Wheel of Time
+
+L<Announced on 2014-06-20 by Matthew Horsfall|http://www.nntp.perl.org/group/perl.perl5.porters/2014/06/msg217030.html>
+
+ We rode on the winds of the rising storm,
+ We ran to the sounds of the thunder.
+ We danced among the lightning bolts,
+ and tore the world asunder.
+
+ -- Anonymous fragment of a poem believed
+ written near the end of the previous Age,
+ known by some as the Third Age.
+ Sometimes attributed to the Dragon
+ Reborn.
+
+=head2 v5.21.0 - Friedrich von Schiller, The Song of the Bell
+
+L<Announced on 2014-05-27 by Ricardo Signes|http://www.nntp.perl.org/group/perl.perl5.porters/2014/05/msg215826.html>
+
+ Walled in fast within the earth
+ Stands the form burnt out of clay.
+ This must be the bell’s great birth!
+ Fellows, lend a hand to-day.
+ Sweat must trickle now
+ From the burning brow,
+ Till the work its master honour.
+ Blessing comes from Heaven’s Donor.
+
+=head2 v5.20.0 - William Shakespeare, Sonnet 18
+
+L<Announced on 2014-05-27 by Ricardo Signes|http://www.nntp.perl.org/group/perl.perl5.porters/2014/05/msg215815.html>
+
+ But thy eternal summer shall not fade,
+ Nor lose possession of that fair thou ow'st;
+ Nor shall Death brag thou wander'st in his shade,
+ When in eternal lines to time thou grow'st:
+ So long as men can breathe or eyes can see,
+ So long lives this, and this gives life to thee.
+
+ -- William Shakespeare, Sonnet 18
+
+=head2 v5.20.0-RC1 - Lindsey Buckingham, "Second Hand News"
+
+L<Announced on 2014-05-17 by Ricardo Signes|http://www.nntp.perl.org/group/perl.perl5.porters/2014/05/msg215479.html>
+
+ When times go bad
+ when times go rough
+ Won't you lay me down in tall grass
+ And let me do my stuff
+
+ -- Lindsey Buckingham, "Second Hand News"
+
=head2 v5.19.11 - Lautréamont, Les Chants de Maldoror
L<Announced on 2014-04-20 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2014/04/msg214580.html>
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.20.0..HEAD
+ perl Porting/acknowledgements.pl v5.20.1..HEAD
=head1 Reporting Bugs
Leon Brocard <acme@astray.com>
Matt Trout <mst@shadowcat.co.uk>
Max Maischein <corion@cpan.org>
+Peter Martini <petercmartini@gmail.com>
Philippe Bruhat <book@cpan.org>
Ricardo Signes <rjbs@cpan.org>
Stevan Little <stevan.little@iinteractive.com>
On these systems, it might be the default compilation mode, and there
is currently no guarantee that passing no use64bitall option to the
Configure process will build a 32bit perl. Implementing -Duse32bit*
-options would be nice for perl 5.20.0.
+options would be nice for perl 5.20.1.
=head2 Profile Perl - am I hot or not?
=head1 Big projects
Tasks that will get your name mentioned in the description of the "Highlights
-of 5.20.0"
+of 5.20.1"
=head2 make ithreads more robust
underlying windows pid. Most posix compliant Proc functions expect
the cygwin pid, but several Win32::Process functions expect the
winpid. E.g. C<$$> is the cygwin pid of F</usr/bin/perl>, which is not
-the winpid. Use C<Cygwin::winpid_to_pid()> and C<Cygwin::winpid_to_pid()>
+the winpid. Use C<Cygwin::pid_to_winpid()> and C<Cygwin::winpid_to_pid()>
to translate between them.
=item * Cygwin vs. Windows errors
Make perl executable and create a symlink for libperl:
chmod a+x /boot/common/bin/perl
- cd /boot/common/lib; ln -s perl5/5.20.0/BePC-haiku/CORE/libperl.so .
+ cd /boot/common/lib; ln -s perl5/5.20.1/BePC-haiku/CORE/libperl.so .
-Replace C<5.20.0> with your respective version of Perl.
+Replace C<5.20.1> with your respective version of Perl.
=head1 KNOWN PROBLEMS
This document briefly describes Perl under Mac OS X.
- curl -O http://www.cpan.org/src/perl-5.20.0.tar.gz
- tar -xzf perl-5.20.0.tar.gz
- cd perl-5.20.0
+ curl -O http://www.cpan.org/src/perl-5.20.1.tar.gz
+ tar -xzf perl-5.20.1.tar.gz
+ cd perl-5.20.1
./Configure -des -Dprefix=/usr/local/
make
make test
=head1 DESCRIPTION
-The latest Perl release (5.20.0 as of this writing) builds without changes
+The latest Perl release (5.20.1 as of this writing) builds without changes
under all versions of Mac OS X from 10.3 "Panther" onwards.
In order to build your own version of Perl you will need 'make',
=item Additional Perl modules
- unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.20.0/
+ unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.20.1/
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
choice. Once you have done so, use a command like the following to
unpack the archive:
- vmstar -xvf perl-5^.20^.0.tar
+ vmstar -xvf perl-5^.20^.1.tar
Then set default to the top-level source directory like so:
- set default [.perl-5^.20^.0]
+ set default [.perl-5^.20^.1]
and proceed with configuration as described in the next section.
(A slightly shorter form is C<av_tindex>.)
+=for apidoc av_tindex
+
+Same as L</av_top_index>.
+
=for apidoc av_len
-Same as L</av_top_index>. Returns the highest index in the array. Note that the
-return value is +1 what its name implies it returns; and hence differs in
-meaning from what the similarly named L</sv_len> returns.
+Same as L</av_top_index>. Note that, unlike what the name implies, it returns
+the highest index in the array, so to get the size of the array you need to use
+S<C<av_len(av) + 1>>. This is unlike L</sv_len>, which returns what you would
+expect.
=cut
*/
Set the highest index in the array to the given number, equivalent to
Perl's C<$#array = $fill;>.
-The number of elements in the an array will be C<fill + 1> after
+The number of elements in the array will be C<fill + 1> after
av_fill() returns. If the array was previously shorter, then the
additional elements appended are set to NULL. If the array
was longer, then the excess elements are freed. C<av_fill(av, -1)> is
* /bin/pdksh, /bin/ash, /bin/bash, or even something such as
* D:/bin/sh.exe.
*/
-#define SH_PATH "$sh" /**/
+#define SH_PATH "$targetsh" /**/
/* SIG_NAME:
* This symbol contains a list of signal names in order of
use Config;
use Exporter;
use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS);
-$VERSION = "0.20";
+$VERSION = "0.22";
@ISA = ("Exporter");
@EXPORT_OK = qw( plv2hash summary myconfig signature );
%EXPORT_TAGS = (
my %BTD = map { $_ => 0 } qw(
DEBUGGING
- NO_MATHOMS
NO_HASH_SEED
+ NO_MATHOMS
NO_TAINT_SUPPORT
PERL_BOOL_AS_CHAR
PERL_DISABLE_PMC
PERL_DONT_CREATE_GVSV
PERL_EXTERNAL_GLOB
- PERL_HASH_FUNC_SIPHASH
- PERL_HASH_FUNC_SDBM
PERL_HASH_FUNC_DJB2
- PERL_HASH_FUNC_SUPERFAST
PERL_HASH_FUNC_MURMUR3
PERL_HASH_FUNC_ONE_AT_A_TIME
PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
PERL_HASH_FUNC_ONE_AT_A_TIME_OLD
+ PERL_HASH_FUNC_SDBM
+ PERL_HASH_FUNC_SIPHASH
+ PERL_HASH_FUNC_SUPERFAST
PERL_IS_MINIPERL
PERL_MALLOC_WRAP
PERL_MEM_LOG
HAVE_INTERP_INTERN
MULTIPLICITY
MYMALLOC
- PERLIO_LAYERS
PERL_DEBUG_READONLY_COW
PERL_DEBUG_READONLY_OPS
PERL_GLOBAL_STRUCT
+ PERL_GLOBAL_STRUCT_PRIVATE
PERL_IMPLICIT_CONTEXT
PERL_IMPLICIT_SYS
+ PERLIO_LAYERS
PERL_MAD
PERL_MICRO
PERL_NEED_APPCTX
USE_LARGE_FILES
USE_LOCALE_COLLATE
USE_LOCALE_NUMERIC
+ USE_LOCALE_TIME
USE_LONG_DOUBLE
USE_PERLIO
USE_REENTRANT_API
sub plv2hash
{
my %config;
- for (split m/\n+/ => join "\n", @_) {
-
- if (s/^Summary of my\s+(\S+)\s+\(\s*(.*?)\s*\)//) {
- $config{"package"} = $1;
- my $rev = $2;
- $rev =~ s/^ revision \s+ (\S+) \s*//x and $config{revision} = $1;
- $rev and $config{version_patchlevel_string} = $rev;
- my ($rel) = $config{package} =~ m{perl(\d)};
- my ($vers, $subvers) = $rev =~ m{version\s+(\d+)\s+subversion\s+(\d+)};
- defined $vers && defined $subvers && defined $rel and
- $config{version} = "$rel.$vers.$subvers";
- next;
- }
- if (s/^\s+(Snapshot of:)\s+(\S+)//) {
- $config{git_commit_id_title} = $1;
- $config{git_commit_id} = $2;
- next;
- }
+ my $pv = join "\n" => @_;
+
+ if ($pv =~ m/^Summary of my\s+(\S+)\s+\(\s*(.*?)\s*\)/m) {
+ $config{"package"} = $1;
+ my $rev = $2;
+ $rev =~ s/^ revision \s+ (\S+) \s*//x and $config{revision} = $1;
+ $rev and $config{version_patchlevel_string} = $rev;
+ my ($rel) = $config{"package"} =~ m{perl(\d)};
+ my ($vers, $subvers) = $rev =~ m{version\s+(\d+)\s+subversion\s+(\d+)};
+ defined $vers && defined $subvers && defined $rel and
+ $config{version} = "$rel.$vers.$subvers";
+ }
+
+ if ($pv =~ m/^\s+(Snapshot of:)\s+(\S+)/) {
+ $config{git_commit_id_title} = $1;
+ $config{git_commit_id} = $2;
+ }
- my %kv = m/\G,?\s*([^=]+)=('[^']+?'|\S+)/gc;
+ if (my %kv = ($pv =~ m{\b
+ (\w+) # key
+ \s*= # assign
+ ( '\s*[^']*?\s*' # quoted value
+ | \S+[^=]*?\s*\n # unquoted running till end of line
+ | \S+ # unquoted value
+ | \s*\n # empty
+ )
+ (?:,?\s+|\s*\n)? # separator (5.8.x reports did not have a ','
+ }gx)) { # between every kv pair
while (my ($k, $v) = each %kv) {
$k =~ s/\s+$//;
+ $v =~ s/\s*\n\z//;
$v =~ s/,$//;
$v =~ m/^'(.*)'$/ and $v = $1;
- $v =~ s/^\s+//;
$v =~ s/\s+$//;
$config{$k} = $v;
}
}
+
my $build = { %empty_build };
+
+ $pv =~ m{^\s+Compiled at\s+(.*)}m
+ and $build->{stamp} = $1;
+ $pv =~ m{^\s+Locally applied patches:(?:\s+|\n)(.*?)(?:[\s\n]+Buil[td] under)}ms
+ and $build->{patches} = [ split m/\n+\s*/, $1 ];
+ $pv =~ m{^\s+Compile-time options:(?:\s+|\n)(.*?)(?:[\s\n]+(?:Locally applied|Buil[td] under))}ms
+ and map { $build->{options}{$_} = 1 } split m/\s+|\n/ => $1;
+
$build->{osname} = $config{osname};
+ $pv =~ m{^\s+Built under\s+(.*)}m
+ and $build->{osname} = $1;
+ $config{osname} ||= $build->{osname};
+
return _make_derived ({
build => $build,
environment => {},
}
else {
#y $pv = qx[$^X -e"sub Config::myconfig{};" -V];
- my $pv = qx[$^X -V];
- $pv =~ s{.*?\n\n}{}s;
- $pv =~ s{\n(?: \s+|\t\s*)}{\0}g;
-
- # print STDERR $pv;
-
- $pv =~ m{^\s+Built under\s+(.*)}m
- and $build->{osname} = $1;
- $pv =~ m{^\s+Compiled at\s+(.*)}m
- and $build->{stamp} = $1;
- $pv =~ m{^\s+Locally applied patches:(?:\s+|\0)(.*)}m
- and $build->{patches} = [ split m/\0+/, $1 ];
- $pv =~ m{^\s+Compile-time options:(?:\s+|\0)(.*)}m
- and map { $build->{options}{$_} = 1 } split m/\s+|\0/ => $1;
+ my $cnf = plv2hash (qx[$^X -V]);
+
+ $build->{$_} = $cnf->{build}{$_} for qw( osname stamp patches options );
}
my @KEYS = keys %ENV;
+++ /dev/null
-#!/usr/bin/perl
-
-use Test::More;
-
-eval "use Test::Pod 1.00";
-plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
-all_pod_files_ok ();
+++ /dev/null
-#!/usr/bin/perl
-
-use Test::More;
-
-eval "use Test::Pod::Coverage tests => 1";
-plan skip_all => "Test::Pod::Coverage required for testing POD Coverage" if $@;
-pod_coverage_ok ("Config::Perl::V", "Config::Perl::V is covered");
}
ok (my $conf = Config::Perl::V::myconfig, "Read config");
-for (qw( build environment config inc )) {
- ok (exists $conf->{build}, "Has build entry");
- }
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
is (lc $conf->{build}{osname}, lc $conf->{config}{osname}, "osname");
SKIP: {
--- /dev/null
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 92;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
+
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, "Mar 23 2010 17:34:56", "Build time");
+is ($conf->{config}{"package"}, "perl5", "reconstructed \%Config{package}");
+is ($conf->{config}{version}, "5.6.2", "reconstructed \%Config{version}");
+
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ DEBUGGING USE_64_BIT_INT USE_LARGE_FILES
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+__END__
+Summary of my perl5 (revision 5.0 version 6 subversion 2) configuration:
+ Platform:
+ osname=linux, osvers=2.6.31.12-0.2-default, archname=i686-linux-64int-perlio
+ uname='linux nb09 2.6.31.12-0.2-default #1 smp 2010-03-16 21:25:39 +0100 i686 i686 i386 gnulinux '
+ config_args='-Dusedevel -Duse64bitint -Duseperlio -des -Dusedevel -Uinstallusrbinperl -Dprefix=/media/Tux/perls'
+ hint=recommended, useposix=true, d_sigaction=define
+ usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
+ useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
+ use64bitint=define use64bitall=undef uselongdouble=undef
+ Compiler:
+ cc='cc', ccflags ='-DDEBUGGING -fno-strict-aliasing -I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
+ optimize='-O2',
+ cppflags='-DDEBUGGING -fno-strict-aliasing -I/pro/local/include'
+ ccversion='', gccversion='4.4.1 [gcc-4_4-branch revision 150839]', gccosandvers=''
+ intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
+ ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
+ alignbytes=4, usemymalloc=n, prototype=define
+ Linker and Libraries:
+ ld='cc', ldflags ='-L/pro/local/lib'
+ libpth=/pro/local/lib /lib /usr/lib /usr/local/lib
+ libs=-lnsl -lgdbm -ldb -ldl -lm -lc -lcrypt -lutil
+ perllibs=-lnsl -ldl -lm -lc -lcrypt -lutil
+ libc=/lib/libc-2.10.1.so, so=so, useshrplib=false, libperl=libperl.a
+ Dynamic Linking:
+ dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
+ cccdlflags='-fpic', lddlflags='-shared -L/pro/local/lib'
+
+
+Characteristics of this binary (from libperl):
+ Compile-time options: DEBUGGING USE_64_BIT_INT USE_LARGE_FILES
+ Built under linux
+ Compiled at Mar 23 2010 17:34:56
+ @INC:
+ /media/Tux/perls/lib/5.6.2/i686-linux-64int-perlio
+ /media/Tux/perls/lib/5.6.2
+ /media/Tux/perls/lib/site_perl/5.6.2/i686-linux-64int-perlio
+ /media/Tux/perls/lib/site_perl/5.6.2
+ /media/Tux/perls/lib/site_perl
+ .
--- /dev/null
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 92;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
+
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, "Oct 21 2010 14:50:53", "Build time");
+is ($conf->{config}{version}, "5.8.9", "reconstructed \%Config{version}");
+is ($conf->{config}{usethreads}, "define", "This was a threaded perl");
+
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ DEBUGGING MULTIPLICITY PERL_IMPLICIT_CONTEXT
+ PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_64_BIT_INT
+ USE_FAST_STDIO USE_ITHREADS USE_LARGE_FILES
+ USE_LONG_DOUBLE USE_PERLIO USE_REENTRANT_API
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+__END__
+Summary of my perl5 (revision 5 version 8 subversion 9) configuration:
+ Platform:
+ osname=linux, osvers=2.6.34.7-0.4-desktop, archname=i686-linux-thread-multi-64int-ld
+ uname='linux tux09.procura.nl 2.6.34.7-0.4-desktop #1 smp preempt 2010-10-07 19:07:51 +0200 i686 i686 i386 gnulinux '
+ config_args='-Dusedevel -Dusethreads -Duseithreads -Duse64bitint -Duselongdouble -Duseperlio -des -Dusedevel -Uinstallusrbinperl -Dprefix=/media/Tux/perls-t'
+ hint=recommended, useposix=true, d_sigaction=define
+ usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
+ useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
+ use64bitint=define use64bitall=undef uselongdouble=define
+ usemymalloc=n, bincompat5005=undef
+ Compiler:
+ cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBUGGING -fno-strict-aliasing -pipe -I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
+ optimize='-O2',
+ cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBUGGING -fno-strict-aliasing -pipe -I/pro/local/include'
+ ccversion='', gccversion='4.5.0 20100604 [gcc-4_5-branch revision 160292]', gccosandvers=''
+ intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
+ ivtype='long long', ivsize=8, nvtype='long double', nvsize=12, Off_t='off_t', lseeksize=8
+ alignbytes=4, prototype=define
+ Linker and Libraries:
+ ld='cc', ldflags ='-L/pro/local/lib'
+ libpth=/pro/local/lib /lib /usr/lib /usr/local/lib
+ libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
+ perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
+ libc=/lib/libc-2.11.2.so, so=so, useshrplib=false, libperl=libperl.a
+ gnulibc_version='2.11.2'
+ Dynamic Linking:
+ dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
+ cccdlflags='-fPIC', lddlflags='-shared -O2 -L/pro/local/lib'
+
+
+Characteristics of this binary (from libperl):
+ Compile-time options: DEBUGGING MULTIPLICITY PERL_IMPLICIT_CONTEXT
+ PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_64_BIT_INT
+ USE_FAST_STDIO USE_ITHREADS USE_LARGE_FILES
+ USE_LONG_DOUBLE USE_PERLIO USE_REENTRANT_API
+ Built under linux
+ Compiled at Oct 21 2010 14:50:53
+ @INC:
+ /media/Tux/perls-t/lib/5.8.9/i686-linux-thread-multi-64int-ld
+ /media/Tux/perls-t/lib/5.8.9
+ /media/Tux/perls-t/lib/site_perl/5.8.9/i686-linux-thread-multi-64int-ld
+ /media/Tux/perls-t/lib/site_perl/5.8.9
+ .
BEGIN {
use Test::More;
- my $tests = 8;
+ my $tests = 91;
unless ($ENV{PERL_CORE}) {
require Test::NoWarnings;
Test::NoWarnings->import ();
is ($conf->{build}{stamp}, 0, "No build time known");
is ($conf->{config}{version}, "5.10.0", "reconstructed \%Config{version}");
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
__END__
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
Platform:
--- /dev/null
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 93;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
+
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, "Dec 20 2010 12:46:00", "Build time");
+is ($conf->{config}{version}, "5.12.2", "reconstructed \%Config{version}");
+is ($conf->{config}{gccversion}, "", "not built with gcc");
+is ($conf->{config}{ccversion}, "B3910B", "built with HP C-ANSI-C");
+
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_64_BIT_ALL
+ USE_64_BIT_INT USE_LARGE_FILES USE_LONG_DOUBLE
+ USE_PERLIO USE_PERL_ATOF
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+__END__
+Summary of my perl5 (revision 5 version 12 subversion 2) configuration:
+
+ Platform:
+ osname=hpux, osvers=11.31, archname=IA64.ARCHREV_0-LP64-ld
+ uname='hp-ux x2 b.11.31 u ia64 2977233888 unlimited-user license '
+ config_args='-Duse64bitall -Duselongdouble -des'
+ hint=recommended, useposix=true, d_sigaction=define
+ useithreads=undef, usemultiplicity=undef
+ useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
+ use64bitint=define, use64bitall=define, uselongdouble=define
+ usemymalloc=n, bincompat5005=undef
+ Compiler:
+ cc='cc', ccflags =' -Ae -DPERL_DONT_CREATE_GVSV +Z -z -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64 -I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 ',
+ optimize='+O2 +Onolimit',
+ cppflags='-Aa -D__STDC_EXT__ -DPERL_DONT_CREATE_GVSV +Z -z -D_HPUX_SOURCE -Ae -DPERL_DONT_CREATE_GVSV +Z -z -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64 -I/pro/local/include'
+ ccversion='B3910B', gccversion='', gccosandvers=''
+ intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=87654321
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
+ ivtype='long', ivsize=8, nvtype='long double', nvsize=16, Off_t='off_t', lseeksize=8
+ alignbytes=16, prototype=define
+ Linker and Libraries:
+ ld='/usr/bin/ld', ldflags ='-L/pro/local/lib +DD64 -L/usr/lib/hpux64'
+ libpth=/pro/local/lib /usr/lib/hpux64 /lib /usr/lib /usr/ccs/lib /usr/local/lib
+ libs=-lcl -lpthread -lnsl -lnm -ldb -ldl -ldld -lm -lsec -lc
+ perllibs=-lcl -lpthread -lnsl -lnm -ldl -ldld -lm -lsec -lc
+ libc=/usr/lib/hpux64/libc.so, so=so, useshrplib=false, libperl=libperl.a
+ gnulibc_version=''
+ Dynamic Linking:
+ dlsrc=dl_hpux.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-B,deferred '
+ cccdlflags='+Z', lddlflags='-b +vnocompatwarnings -L/pro/local/lib -L/usr/lib/hpux64'
+
+
+Characteristics of this binary (from libperl):
+ Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP USE_64_BIT_ALL
+ USE_64_BIT_INT USE_LARGE_FILES USE_LONG_DOUBLE
+ USE_PERLIO USE_PERL_ATOF
+ Built under hpux
+ Compiled at Dec 20 2010 12:46:00
+ @INC:
+ /pro/lib/perl5/site_perl/5.12.2/IA64.ARCHREV_0-LP64-ld
+ /pro/lib/perl5/site_perl/5.12.2
+ /pro/lib/perl5/5.12.2/IA64.ARCHREV_0-LP64-ld
+ /pro/lib/perl5/5.12.2
+ .
--- /dev/null
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 93;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
+
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, "May 11 2012 16:36:53", "Build time");
+is ($conf->{config}{version}, "5.14.2", "reconstructed \%Config{version}");
+is ($conf->{config}{gccversion}, "", "not built with gcc");
+is ($conf->{config}{ccversion}, "11.1.0.8", "xlc version");
+
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ DEBUGGING PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP
+ PERL_PRESERVE_IVUV PERL_USE_DEVEL USE_64_BIT_ALL
+ USE_64_BIT_INT USE_LARGE_FILES USE_PERLIO
+ USE_PERL_ATOF
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+__END__
+Summary of my perl5 (revision 5 version 14 subversion 2) configuration:
+
+ Platform:
+ osname=aix, osvers=5.3.0.0, archname=aix-64all
+ uname='aix i3 3 5 0004898ad300 '
+ config_args='-Dusedevel -Duse64bitall -Uversiononly -Dinc_version_list=none -des'
+ hint=recommended, useposix=true, d_sigaction=define
+ useithreads=undef, usemultiplicity=undef
+ useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
+ use64bitint=define, use64bitall=define, uselongdouble=undef
+ usemymalloc=n, bincompat5005=undef
+ Compiler:
+ cc='xlc -q64', ccflags ='-q64 -DDEBUGGING -qlanglvl=extended -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=-1 -qnoansialias -DUSE_NATIVE_DLOPEN -qlanglvl=extended -I/pro/local/include -q64 -DUSE_64_BIT_ALL -q64',
+ optimize='-O',
+ cppflags='-DDEBUGGING -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -DUSE_NATIVE_DLOPEN -I/pro/local/include'
+ ccversion='11.1.0.8', gccversion='', gccosandvers=''
+ intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=87654321
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8
+ ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
+ alignbytes=8, prototype=define
+ Linker and Libraries:
+ ld='ld', ldflags ='-L/usr/local/ppc64/lib64 -b64 -q64 -L/pro/local/lib -brtl -bdynamic -b64'
+ libpth=/usr/local/ppc64/lib64 /lib /usr/lib /usr/ccs/lib /usr/local/lib /usr/lib64
+ libs=-lbind -lnsl -ldbm -ldb -ldl -lld -lm -lcrypt -lc
+ perllibs=-lbind -lnsl -ldl -lld -lm -lcrypt -lc
+ libc=/lib/libc.a, so=a, useshrplib=false, libperl=libperl.a
+ gnulibc_version=''
+ Dynamic Linking:
+ dlsrc=dl_aix.xs, dlext=so, d_dlsymun=undef, ccdlflags=' -bE:/pro/lib/perl5/5.14.2/aix-64all/CORE/perl.exp'
+ cccdlflags=' ', lddlflags='-b64 -bhalt:4 -G -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -bnoentry -lc -lm -L/usr/local/ppc64/lib64 -L/pro/local/lib'
+
+
+Characteristics of this binary (from libperl):
+ Compile-time options: DEBUGGING PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP
+ PERL_PRESERVE_IVUV PERL_USE_DEVEL USE_64_BIT_ALL
+ USE_64_BIT_INT USE_LARGE_FILES USE_PERLIO
+ USE_PERL_ATOF
+ Built under aix
+ Compiled at May 11 2012 16:36:53
+ @INC:
+ /pro/lib/perl5/site_perl/5.14.2/aix-64all
+ /pro/lib/perl5/site_perl/5.14.2
+ /pro/lib/perl5/5.14.2/aix-64all
+ /pro/lib/perl5/5.14.2
+ .
--- /dev/null
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 92;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
+
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, "Mar 12 2013 08:36:17", "Build time");
+is ($conf->{config}{version}, "5.16.3", "reconstructed \%Config{version}");
+is ($conf->{config}{ccversion}, "", "Using gcc. non-gcc version should not be defined");
+
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
+ PERL_MALLOC_WRAP PERL_PRESERVE_IVUV USE_64_BIT_INT
+ USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
+ USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO
+ USE_PERL_ATOF
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+__END__
+Summary of my perl5 (revision 5 version 16 subversion 3) configuration:
+
+ Platform:
+ osname=linux, osvers=3.4.33-2.24-desktop, archname=i686-linux-64int
+ uname='linux lx09 3.4.33-2.24-desktop #1 smp preempt tue feb 26 03:34:33 utc 2013 (5f00a32) i686 i686 i386 gnulinux '
+ config_args='-Duse64bitint -Duselongdouble -des'
+ hint=previous, useposix=true, d_sigaction=define
+ useithreads=undef, usemultiplicity=undef
+ useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
+ use64bitint=define, use64bitall=undef, uselongdouble=undef
+ usemymalloc=n, bincompat5005=undef
+ Compiler:
+ cc='cc', ccflags ='-fno-strict-aliasing -pipe -fstack-protector -I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
+ optimize='-O2',
+ cppflags='-fno-strict-aliasing -pipe -fstack-protector -I/pro/local/include -fno-strict-aliasing -pipe -fstack-protector -I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
+ ccversion='', gccversion='4.7.1 20120723 [gcc-4_7-branch revision 189773]', gccosandvers=''
+ intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
+ ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
+ alignbytes=4, prototype=define
+ Linker and Libraries:
+ ld='cc', ldflags ='-L/pro/local/lib -fstack-protector'
+ libpth=/pro/local/lib /lib /usr/lib /usr/local/lib
+ libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat
+ perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
+ libc=/lib/libc-2.15.so, so=so, useshrplib=false, libperl=libperl.a
+ gnulibc_version='2.15'
+ Dynamic Linking:
+ dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
+ cccdlflags='-fPIC', lddlflags='-shared -O2 -L/pro/local/lib -fstack-protector'
+
+
+Characteristics of this binary (from libperl):
+ Compile-time options: HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
+ PERL_MALLOC_WRAP PERL_PRESERVE_IVUV USE_64_BIT_INT
+ USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
+ USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO
+ USE_PERL_ATOF
+ Built under linux
+ Compiled at Mar 12 2013 08:36:17
+ @INC:
+ /pro/lib/perl5/site_perl/5.16.3/i686-linux-64int
+ /pro/lib/perl5/site_perl/5.16.3
+ /pro/lib/perl5/5.16.3/i686-linux-64int
+ /pro/lib/perl5/5.16.3
+ .
--- /dev/null
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 150;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
+
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, "Aug 25 2013 01:24:40", "Build time");
+is ($conf->{config}{version}, "5.16.2", "reconstructed \%Config{version}");
+is ($conf->{config}{ccversion}, "", "Using gcc. non-gcc version should not be defined");
+
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ HAS_TIMES MULTIPLICITY PERLIO_LAYERS
+ PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT
+ PERL_MALLOC_WRAP PERL_PRESERVE_IVUV USE_64_BIT_ALL
+ USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
+ USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
+ USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
+ USE_REENTRANT_API
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+is_deeply ($conf->{build}{patches}, [
+ "/Library/Perl/Updates/<version> comes before system perl directories",
+ "installprivlib and installarchlib points to the Updates directory",
+ "CVE-2013-1667 hashtable DOS fix",
+ ], "Local patches");
+
+my %check = (
+
+ archname => "darwin-thread-multi-2level",
+ bincompat5005 => "undef",
+ config_args => "-ds -e -Dprefix=/usr -Dccflags=-g -pipe -Dldflags= -Dman3ext=3pm -Duseithreads -Duseshrplib -Dinc_version_list=none -Dcc=cc",
+ d_sfio => "undef",
+ d_sigaction => "define",
+ hint => "recommended",
+ myuname => "darwin jackson.apple.com 13.0 darwin kernel version 13.0.0: tue jul 30 20:52:22 pdt 2013; root:xnu-2422.1.53~3release_x86_64 x86_64",
+ use64bitall => "define",
+ use64bitint => "define",
+ useithreads => "define",
+ uselargefiles => "define",
+ uselongdouble => "undef",
+ usemultiplicity => "define",
+ usemymalloc => "n",
+ useperlio => "define",
+ useposix => "true",
+ usesocks => "undef",
+
+ alignbytes => 8,
+ byteorder => "12345678",
+ cc => "cc",
+ ccflags => "-arch x86_64 -arch i386 -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -I/usr/local/include",
+ ccversion => "",
+ cppflags => "-g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -I/usr/local/include",
+ d_longdbl => "define",
+ d_longlong => "define",
+ doublesize => 8,
+ gccosandvers => "",
+ gccversion => "4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)",
+ intsize => 4,
+ ivsize => 8,
+ ivtype => "long",
+ longdblsize => 16,
+ longlongsize => 8,
+ longsize => 8,
+ lseeksize => 8,
+ nvsize => 8,
+ nvtype => "double",
+ lseektype => "off_t",
+ optimize => "-Os",
+ prototype => "define",
+ ptrsize => 8,
+
+ gnulibc_version => "",
+ ld => "cc -mmacosx-version-min=10.9",
+ ldflags => "-arch x86_64 -arch i386 -fstack-protector -L/usr/local/lib",
+ libc => "",
+ libperl => "libperl.dylib",
+ libpth => "/usr/local/lib /usr/lib",
+ libs => "",
+ perllibs => "",
+ so => "dylib",
+ useshrplib => "true",
+
+ cccdlflags => "",
+ ccdlflags => "",
+ d_dlsymun => "undef",
+ dlext => "bundle",
+ dlsrc => "dl_dlopen.xs",
+ lddlflags => "-arch x86_64 -arch i386 -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector",
+ );
+is ($conf->{config}{$_}, $check{$_}, "reconstructed \$Config{$_}") for sort keys %check;
+
+
+__END__
+Summary of my perl5 (revision 5 version 16 subversion 2) configuration:
+
+ Platform:
+ osname=darwin, osvers=13.0, archname=darwin-thread-multi-2level
+ uname='darwin jackson.apple.com 13.0 darwin kernel version 13.0.0: tue jul 30 20:52:22 pdt 2013; root:xnu-2422.1.53~3release_x86_64 x86_64 '
+ config_args='-ds -e -Dprefix=/usr -Dccflags=-g -pipe -Dldflags= -Dman3ext=3pm -Duseithreads -Duseshrplib -Dinc_version_list=none -Dcc=cc'
+ hint=recommended, useposix=true, d_sigaction=define
+ useithreads=define, usemultiplicity=define
+ useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
+ use64bitint=define, use64bitall=define, uselongdouble=undef
+ usemymalloc=n, bincompat5005=undef
+ Compiler:
+ cc='cc', ccflags ='-arch x86_64 -arch i386 -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -I/usr/local/include',
+ optimize='-Os',
+ cppflags='-g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -I/usr/local/include'
+ ccversion='', gccversion='4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)', gccosandvers=''
+ intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
+ ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
+ alignbytes=8, prototype=define
+ Linker and Libraries:
+ ld='cc -mmacosx-version-min=10.9', ldflags ='-arch x86_64 -arch i386 -fstack-protector -L/usr/local/lib'
+ libpth=/usr/local/lib /usr/lib
+ libs=
+ perllibs=
+ libc=, so=dylib, useshrplib=true, libperl=libperl.dylib
+ gnulibc_version=''
+ Dynamic Linking:
+ dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
+ cccdlflags=' ', lddlflags='-arch x86_64 -arch i386 -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector'
+
+
+Characteristics of this binary (from libperl):
+ Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS
+ PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT
+ PERL_MALLOC_WRAP PERL_PRESERVE_IVUV USE_64_BIT_ALL
+ USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
+ USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
+ USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF
+ USE_REENTRANT_API
+ Locally applied patches:
+ /Library/Perl/Updates/<version> comes before system perl directories
+ installprivlib and installarchlib points to the Updates directory
+ CVE-2013-1667 hashtable DOS fix
+ Built under darwin
+ Compiled at Aug 25 2013 01:24:40
+ %ENV:
+ PERL5LIB=""
+ PERL5OPT=""
+ PERL5_CPANPLUS_IS_RUNNING="37393"
+ PERL5_CPAN_IS_RUNNING="37393"
+ @INC:
+ /Library/Perl/5.16/darwin-thread-multi-2level
+ /Library/Perl/5.16
+ /Network/Library/Perl/5.16/darwin-thread-multi-2level
+ /Network/Library/Perl/5.16
+ /Library/Perl/Updates/5.16.2/darwin-thread-multi-2level
+ /Library/Perl/Updates/5.16.2
+ /System/Library/Perl/5.16/darwin-thread-multi-2level
+ /System/Library/Perl/5.16
+ /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level
+ /System/Library/Perl/Extras/5.16
+ .
+
BEGIN {
use Test::More;
- my $tests = 35;
+ my $tests = 111;
unless ($ENV{PERL_CORE}) {
require Test::NoWarnings;
Test::NoWarnings->import ();
ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
-is ($conf->{build}{stamp}, 0, "No build time known");
+is ($conf->{build}{stamp}, "May 18 2013 17:34:20", "Build time");
is ($conf->{config}{version}, "5.18.0", "reconstructed \$Config{version}");
-# Some random checks
-is ($conf->{build}{options}{$_}, 0, "Runtime option $_") for qw(
- DEBUG_LEAKING_SCALARS NO_HASH_SEED PERL_MEM_LOG_STDERR PERL_MEM_LOG_ENV
- PERL_MEM_LOG_TIMESTAMP PERL_MICRO USE_ATTRIBUTES_FOR_PERLIO VMS_DO_SOCKETS );
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
+ PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_MALLOC_WRAP
+ PERL_PRESERVE_IVUV PERL_SAWAMPERSAND USE_64_BIT_INT
+ USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
+ USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_LONG_DOUBLE
+ USE_PERLIO USE_PERL_ATOF
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+is_deeply ($conf->{build}{patches}, [], "No local patches");
my %check = (
alignbytes => 4,
--- /dev/null
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 111;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
+
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, "Jan 9 2014 09:22:04", "Build time");
+is ($conf->{config}{version}, "5.18.2", "reconstructed \$Config{version}");
+
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
+ PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_MALLOC_WRAP
+ PERL_PRESERVE_IVUV PERL_SAWAMPERSAND USE_64_BIT_INT
+ USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
+ USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_LONG_DOUBLE
+ USE_PERLIO USE_PERL_ATOF
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+is_deeply ($conf->{build}{patches}, [], "No local patches");
+
+my %check = (
+ alignbytes => 4,
+ api_version => 18,
+ bincompat5005 => "undef",
+ byteorder => 12345678,
+ cc => "cc",
+ cccdlflags => "-fPIC",
+ ccdlflags => "-Wl,-E",
+ config_args => "-Duse64bitint -Duselongdouble -des",
+ gccversion => "4.8.1 20130909 [gcc-4_8-branch revision 202388]",
+ gnulibc_version => "2.18",
+ ivsize => 8,
+ ivtype => "long long",
+ ld => "cc",
+ lddlflags => "-shared -O2 -L/pro/local/lib -fstack-protector",
+ ldflags => "-L/pro/local/lib -fstack-protector",
+ libc => "/lib/libc-2.18.so",
+ lseektype => "off_t",
+ osvers => "3.11.6-4-desktop",
+ use64bitint => "define",
+ );
+is ($conf->{config}{$_}, $check{$_}, "reconstructed \$Config{$_}") for sort keys %check;
+
+__END__
+Summary of my perl5 (revision 5 version 18 subversion 2) configuration:
+
+ Platform:
+ osname=linux, osvers=3.11.6-4-desktop, archname=i686-linux-64int-ld
+ uname='linux lx09 3.11.6-4-desktop #1 smp preempt wed oct 30 18:04:56 utc 2013 (e6d4a27) i686 i686 i386 gnulinux '
+ config_args='-Duse64bitint -Duselongdouble -des'
+ hint=recommended, useposix=true, d_sigaction=define
+ useithreads=undef, usemultiplicity=undef
+ useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
+ use64bitint=define, use64bitall=undef, uselongdouble=define
+ usemymalloc=n, bincompat5005=undef
+ Compiler:
+ cc='cc', ccflags ='-fno-strict-aliasing -pipe -fstack-protector -I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
+ optimize='-O2',
+ cppflags='-fno-strict-aliasing -pipe -fstack-protector -I/pro/local/include'
+ ccversion='', gccversion='4.8.1 20130909 [gcc-4_8-branch revision 202388]', gccosandvers=''
+ intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
+ ivtype='long long', ivsize=8, nvtype='long double', nvsize=12, Off_t='off_t', lseeksize=8
+ alignbytes=4, prototype=define
+ Linker and Libraries:
+ ld='cc', ldflags ='-L/pro/local/lib -fstack-protector'
+ libpth=/pro/local/lib /lib /usr/lib /usr/local/lib
+ libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat
+ perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
+ libc=/lib/libc-2.18.so, so=so, useshrplib=false, libperl=libperl.a
+ gnulibc_version='2.18'
+ Dynamic Linking:
+ dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
+ cccdlflags='-fPIC', lddlflags='-shared -O2 -L/pro/local/lib -fstack-protector'
+
+
+Characteristics of this binary (from libperl):
+ Compile-time options: HAS_TIMES PERLIO_LAYERS PERL_DONT_CREATE_GVSV
+ PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_MALLOC_WRAP
+ PERL_PRESERVE_IVUV PERL_SAWAMPERSAND USE_64_BIT_INT
+ USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
+ USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_LONG_DOUBLE
+ USE_PERLIO USE_PERL_ATOF
+ Built under linux
+ Compiled at Jan 9 2014 09:22:04
+ @INC:
+ /pro/lib/perl5/site_perl/5.18.2/i686-linux-64int-ld
+ /pro/lib/perl5/site_perl/5.18.2
+ /pro/lib/perl5/5.18.2/i686-linux-64int-ld
+ /pro/lib/perl5/5.18.2
+ .
--- /dev/null
+#!/pro/bin/perl
+
+use strict;
+use warnings;
+
+BEGIN {
+ use Test::More;
+ my $tests = 111;
+ unless ($ENV{PERL_CORE}) {
+ require Test::NoWarnings;
+ Test::NoWarnings->import ();
+ $tests++;
+ }
+
+ plan tests => $tests;
+ }
+
+use Config::Perl::V;
+
+ok (my $conf = Config::Perl::V::plv2hash (<DATA>), "Read perl -v block");
+ok (exists $conf->{$_}, "Has $_ entry") for qw( build environment config inc );
+
+is ($conf->{build}{osname}, $conf->{config}{osname}, "osname");
+is ($conf->{build}{stamp}, "Jun 30 2014 15:37:09", "Build time");
+is ($conf->{config}{version}, "5.20.0", "reconstructed \$Config{version}");
+
+my $opt = Config::Perl::V::plv2hash ("")->{build}{options};
+foreach my $o (sort qw(
+ HAS_TIMES MULTIPLICITY PERLIO_LAYERS
+ PERL_DONT_CREATE_GVSV
+ PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
+ PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
+ PERL_NEW_COPY_ON_WRITE PERL_PRESERVE_IVUV
+ PERL_USE_DEVEL USE_64_BIT_INT USE_ITHREADS
+ USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
+ USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_LONG_DOUBLE
+ USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API
+ )) {
+ is ($conf->{build}{options}{$o}, 1, "Runtime option $o set");
+ delete $opt->{$o};
+ }
+foreach my $o (sort keys %$opt) {
+ is ($conf->{build}{options}{$o}, 0, "Runtime option $o unset");
+ }
+
+is_deeply ($conf->{build}{patches}, [], "No local patches");
+
+my %check = (
+ alignbytes => 4,
+ api_version => 20,
+ bincompat5005 => "undef",
+ byteorder => 12345678,
+ cc => "cc",
+ cccdlflags => "-fPIC",
+ ccdlflags => "-Wl,-E",
+ config_args => "-Dusedevel -Uversiononly -Dinc_version_list=none -Duse64bitint -Dusethreads -Duseithreads -Duselongdouble -des",
+ gccversion => "4.8.1 20130909 [gcc-4_8-branch revision 202388]",
+ gnulibc_version => "2.18",
+ ivsize => 8,
+ ivtype => "long long",
+ ld => "cc",
+ lddlflags => "-shared -O2 -L/pro/local/lib -fstack-protector",
+ ldflags => "-L/pro/local/lib -fstack-protector",
+ libc => "libc-2.18.so",
+ lseektype => "off_t",
+ osvers => "3.11.10-17-desktop",
+ use64bitint => "define",
+ );
+is ($conf->{config}{$_}, $check{$_}, "reconstructed \$Config{$_}") for sort keys %check;
+
+__END__
+Summary of my perl5 (revision 5 version 20 subversion 0) configuration:
+
+ Platform:
+ osname=linux, osvers=3.11.10-17-desktop, archname=i686-linux-thread-multi-64int-ld
+ uname='linux lx09 3.11.10-17-desktop #1 smp preempt mon jun 16 15:28:13 utc 2014 (fba7c1f) i686 i686 i386 gnulinux '
+ config_args='-Dusedevel -Uversiononly -Dinc_version_list=none -Duse64bitint -Dusethreads -Duseithreads -Duselongdouble -des'
+ hint=recommended, useposix=true, d_sigaction=define
+ useithreads=define, usemultiplicity=define
+ use64bitint=define, use64bitall=undef, uselongdouble=define
+ usemymalloc=n, bincompat5005=undef
+ Compiler:
+ cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/pro/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
+ optimize='-O2',
+ cppflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector -I/pro/local/include'
+ ccversion='', gccversion='4.8.1 20130909 [gcc-4_8-branch revision 202388]', gccosandvers=''
+ intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
+ d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
+ ivtype='long long', ivsize=8, nvtype='long double', nvsize=12, Off_t='off_t', lseeksize=8
+ alignbytes=4, prototype=define
+ Linker and Libraries:
+ ld='cc', ldflags ='-L/pro/local/lib -fstack-protector'
+ libpth=/usr/local/lib /usr/lib/gcc/i586-suse-linux/4.8/include-fixed /usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/lib /usr/lib /pro/local/lib /lib
+ libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc -lgdbm_compat
+ perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
+ libc=libc-2.18.so, so=so, useshrplib=false, libperl=libperl.a
+ gnulibc_version='2.18'
+ Dynamic Linking:
+ dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
+ cccdlflags='-fPIC', lddlflags='-shared -O2 -L/pro/local/lib -fstack-protector'
+
+
+Characteristics of this binary (from libperl):
+ Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS
+ PERL_DONT_CREATE_GVSV
+ PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
+ PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP
+ PERL_NEW_COPY_ON_WRITE PERL_PRESERVE_IVUV
+ PERL_USE_DEVEL USE_64_BIT_INT USE_ITHREADS
+ USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE
+ USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_LONG_DOUBLE
+ USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API
+ Built under linux
+ Compiled at Jun 30 2014 15:37:09
+ @INC:
+ /pro/lib/perl5/site_perl/5.20.0/i686-linux-thread-multi-64int-ld
+ /pro/lib/perl5/site_perl/5.20.0
+ /pro/lib/perl5/5.20.0/i686-linux-thread-multi-64int-ld
+ /pro/lib/perl5/5.20.0
+ .
use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv);
-$VERSION = 0.9908;
+$VERSION = 0.9909;
$CLASS = 'version';
# avoid using Exporter
use vars qw($VERSION $CLASS $STRICT $LAX);
-$VERSION = 0.9908;
+$VERSION = 0.9909;
#--------------------------------------------------------------------------#
# Version regexp components
use Config;
use vars qw($VERSION $CLASS @ISA $LAX $STRICT);
-$VERSION = 0.9908;
+$VERSION = 0.9909;
$CLASS = 'version::vpp';
require version::regex;
BEGIN {
(my $coretests = $0) =~ s'[^/]+\.t'coretests.pm';
require $coretests;
- use_ok('version::vpp', 0.9908);
+ use_ok('version::vpp', 0.9909);
}
BaseTests("version::vpp","new","qv");
BEGIN {
(my $coretests = $0) =~ s'[^/]+\.t'coretests.pm';
require $coretests;
- use_ok('version', 0.9908);
+ use_ok('version', 0.9909);
}
BaseTests("version","new","qv");
BEGIN {
(my $coretests = $0) =~ s'[^/]+\.t'coretests.pm';
require $coretests;
- use_ok("version", 0.9908);
+ use_ok("version", 0.9909);
# If we made it this far, we are ok.
}
# Don't want to use, because we need to make sure that the import doesn't
# fire just yet (some code does this to avoid importing qv() and delare()).
require_ok("version");
-is $version::VERSION, 0.9908, "Make sure we have the correct class";
+is $version::VERSION, 0.9909, "Make sure we have the correct class";
ok(!"main"->can("qv"), "We don't have the imported qv()");
ok(!"main"->can("declare"), "We don't have the imported declare()");
}
BEGIN {
- use version 0.9908;
+ use version 0.9909;
}
pass "Didn't get caught by the wrong DIE handler, which is a good thing";
use Test::More qw/no_plan/;
BEGIN {
- use_ok('version', 0.9908);
+ use_ok('version', 0.9909);
}
my $v1 = version->new('1.2');
use Config;
BEGIN {
- use_ok('version', 0.9908);
+ use_ok('version', 0.9909);
}
SKIP: {
#########################
use Test::More tests => 3;
-use_ok("version", 0.9908);
+use_ok("version", 0.9909);
# do strict lax tests in a sub to isolate a package to test importing
SKIP: {
#########################
use strict;
-use_ok("version", 0.9908);
+use_ok("version", 0.9909);
use Test::More;
BEGIN {
for (;;)
{
const size_t si_name_ix = si->si_type+1; /* -1 is a valid index */
- const char * const si_name = (si_name_ix >= sizeof(si_names)) ? "????" : si_names[si_name_ix];
+ const char * const si_name =
+ si_name_ix < C_ARRAY_LENGTH(si_names) ?
+ si_names[si_name_ix] : "????";
I32 ix;
PerlIO_printf(Perl_debug_log, "STACK %"IVdf": %s\n",
(IV)si_ix, si_name);
our $Debug = 0;
our $ExportLevel = 0;
our $Verbose ||= 0;
-our $VERSION = '5.70';
+our $VERSION = '5.71';
our (%Cache);
sub as_heavy {
common symbol names to reduce the risk of name clashes.
Generally anything not exported is still accessible from outside the
-module using the C<YourModule::item_name> (or C<< $blessed_ref->method>>)
+module using the C<YourModule::item_name> (or C<< $blessed_ref->method >>)
syntax. By convention you can use a leading underscore on names to
informally indicate that they are 'internal' and not for public use.
use Perl::OSType qw/os_type/;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
$VERSION = eval $VERSION;
# We only use this once - don't waste a symbol table entry on it.
use File::Temp qw(tempfile);
use vars qw($VERSION);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
# More details about C/C++ compilers:
# http://developers.sun.com/sunstudio/documentation/product/compiler.jsp
use ExtUtils::CBuilder::Base;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
@ISA = qw(ExtUtils::CBuilder::Base);
sub link_executable {
use ExtUtils::CBuilder::Base;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
@ISA = qw(ExtUtils::CBuilder::Base);
use File::Spec::Functions qw(catfile catdir);
use IO::File;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
@ISA = qw(ExtUtils::CBuilder::Base);
=begin comment
package ExtUtils::CBuilder::Platform::Windows::BCC;
use vars qw($VERSION);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
sub format_compiler_cmd {
my ($self, %spec) = @_;
package ExtUtils::CBuilder::Platform::Windows::GCC;
use vars qw($VERSION);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
sub format_compiler_cmd {
my ($self, %spec) = @_;
package ExtUtils::CBuilder::Platform::Windows::MSVC;
use vars qw($VERSION);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
sub arg_exec_file {
my ($self, $file) = @_;
use File::Spec;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
@ISA = qw(ExtUtils::CBuilder::Platform::Unix);
sub need_prelink { 1 }
package ExtUtils::CBuilder::Platform::android;
use strict;
+use Config;
use File::Spec;
use ExtUtils::CBuilder::Platform::Unix;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
@ISA = qw(ExtUtils::CBuilder::Platform::Unix);
# The Android linker will not recognize symbols from
$self->split_like_shell($args{extra_linker_flags}),
'-L' . $self->perl_inc(),
'-lperl',
+ $self->split_like_shell($Config{perllibs}),
];
}
use ExtUtils::CBuilder::Platform::Unix;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
@ISA = qw(ExtUtils::CBuilder::Platform::Unix);
# TODO: If a specific exe_file name is requested, if the exe created
use ExtUtils::CBuilder::Platform::Unix;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
@ISA = qw(ExtUtils::CBuilder::Platform::Unix);
sub compile {
use vars qw($VERSION @ISA);
@ISA = qw(ExtUtils::CBuilder::Platform::Unix);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
sub link_executable {
my $self = shift;
use ExtUtils::CBuilder::Platform::Unix;
use vars qw($VERSION @ISA);
-$VERSION = '0.280216';
+$VERSION = '0.280217';
@ISA = qw(ExtUtils::CBuilder::Platform::Unix);
sub need_prelink { 1 }
written in the XS language and is the core component of the Perl
extension interface.
+Before writing XS, read the L</CAVEATS> section below.
+
An B<XSUB> forms the basic unit of the XS interface. After compilation
by the B<xsubpp> compiler, each XSUB amounts to a C function definition
which will provide the glue between Perl calling conventions and C
print "time = $a\n";
print "netconf = $netconf\n";
+=head1 CAVEATS
+
+XS code has full access to system calls including C library functions.
+It thus has the capability of interfering with things that the Perl core
+or other modules have set up, such as signal handlers or file handles.
+It could mess with the memory, or any number of harmful things. Don't.
+
+Some modules have an event loop, waiting for user-input. It is highly
+unlikely that two such modules would work adequately together in a
+single Perl application.
+
+In general, the perl interpreter views itself as the center of the
+universe as far as the Perl program goes. XS code is viewed as a
+help-mate, to accomplish things that perl doesn't do, or doesn't do fast
+enough, but always subservient to perl. The closer XS code adheres to
+this model, the less likely conflicts will occur.
+
+One area where there has been conflict is in regards to C locales. (See
+L<perllocale>.) perl, with one exception and unless told otherwise,
+sets up the underlying locale the program is running in to that passed
+into it from the environment. As of v5.20, this underlying locale is
+completely hidden from pure perl code outside the lexical scope of
+C<S<use locale>>; except a couple of function calls in the POSIX
+module of necessity use it. But the underlying locale, with that one
+exception is exposed to XS code, affecting all C library routines whose
+behavior is locale-dependent. The exception is the
+L<C<LC_NUMERIC>|perllocale/Category LC_NUMERIC: Numeric Formatting>
+locale category, and the reason it is an exception is that experience
+has shown that it can be problematic for XS code, whereas we have not
+had reports of problems with the
+L<other locale categories|perllocale/WHAT IS A LOCALE>. And the reason
+for this one category being problematic is that the character used as a
+decimal point can vary. Many European languages use a comma, whereas
+English, and hence Perl are expecting a dot (U+002E: FULL STOP). Many
+modules can handle only the radix character being a dot, and so perl
+attempts to make it so. Up through Perl v5.20, the attempt was merely
+to set C<LC_NUMERIC> upon startup to the C<"C"> locale. Any
+L<setlocale()|perllocale/The setlocale function> otherwise would change
+it; this caused some failures. Therefore, starting in v5.22, perl tries
+to keep C<LC_NUMERIC> always set to C<"C"> for XS code.
+
+To summarize, here's what to expect and how to handle locales in XS code:
+
+=over
+
+=item Non-locale-aware XS code
+
+Keep in mind that even if you think your code is not locale-aware, it
+may call a C library function that is. Hopefully the man page for such
+a function will indicate that dependency, but the documentation is
+imperfect.
+
+The current locale is exposed to XS code except possibly C<LC_NUMERIC>.
+There have not been reports of problems with these other categories.
+
+Up through v5.20, Perl initializes things on start-up so that
+C<LC_NUMERIC> is set to the "C" locale. But if any code anywhere
+changes it, it will stay changed. This means that your module can't
+count on C<LC_NUMERIC> being something in particular, and you can't
+expect floating point numbers (including version strings) to have dots
+in them. If you don't allow for a non-dot, your code could break if
+anyone anywhere changes the locale. For this reason, v5.22 is changing
+the behavior so that Perl tries to keep C<LC_NUMERIC> in the "C" locale
+except around the operations internally where it should be something
+else. Misbehaving XS code will always be able to change the locale
+anyway, but the most common instance of this is checked for and
+handled.
+
+=item Locale-aware XS code
+
+If the locale from the user's environment is desired, there should be no
+need for XS code to set the locale except for C<LC_NUMERIC>, as perl has
+already set it up. XS code should avoid changing the locale, as it can
+adversely affect other, unrelated, code and may not be thread safe.
+However, some alien libraries that may be called do set it, such as
+C<Gtk>. This can cause problems for the perl core and other modules.
+Starting in v5.20.1, calling the function
+L<sync_locale()|perlapi/sync_locale> from XS should be sufficient to
+avoid most of these problems. Prior to this, you need a pure Perl
+segment that does this:
+
+ POSIX::setlocale(LC_ALL, POSIX::setlocale(LC_ALL));
+
+Macros are provided for XS code to temporarily change to use the
+underlying C<LC_NUMERIC> locale when necessary. An API is being
+developed for this, but has not yet been nailed down, but will be during
+the course of v5.21. Send email to L<mailto:perl5-porters@perl.org> for
+guidance.
+
+=back
=head1 XS VERSION
But failure_handler_auto, instead of dying or anything, compiles
$key, caching it in
- $lh->{'failure_lex'}{$key} = $complied
+ $lh->{'failure_lex'}{$key} = $compiled
and then calls the compiled value, and returns that. (I.e., if
$key looks like bracket notation, $compiled is a sub, and we return
about, even if some of their answers are sometimes wonky,
particularly where they start talking about pluralization.
-The Locale/Maketext.pm source. Obverse that the module is much
+The Locale/Maketext.pm source. Observe that the module is much
shorter than its documentation!
=head1 COPYRIGHT AND DISCLAIMER
+5.020001
+ - Updated for v5.20.1
+
+5.021003
+ - Prepared for v5.21.3
+
+5.021002
+ - Prepared for v5.21.2
+
+5.021001_01
+ - Prepared for v5.21.1
+
3.11
- Prepared for v5.20.0
- Fix regression in corelist with -v output listing the same perl
%bug_tracker %deprecated %delta/;
use Module::CoreList::TieHashDelta;
use version;
-$VERSION = '3.11';
+$VERSION = '5.020001';
my $dumpinc = 0;
sub import {
5.01901 => '2014-03-20',
5.019011 => '2014-04-20',
5.020000 => '2014-05-27',
+ 5.021000 => '2014-05-27',
+ 5.021001 => '2014-06-20',
+ 5.021002 => '2014-07-20',
+ 5.021003 => '2014-08-20',
+ 5.020001 => '2014-09-14',
);
for my $version ( sort { $a <=> $b } keys %released ) {
removed => {
}
},
+ 5.021000 => {
+ delta_from => 5.020000,
+ changed => {
+ 'Module::CoreList' => '5.021001',
+ 'Module::CoreList::TieHashDelta'=> '5.021001',
+ 'Module::CoreList::Utils'=> '5.021001',
+ 'feature' => '1.37',
+ },
+ removed => {
+ 'CGI' => 1,
+ 'CGI::Apache' => 1,
+ 'CGI::Carp' => 1,
+ 'CGI::Cookie' => 1,
+ 'CGI::Fast' => 1,
+ 'CGI::Pretty' => 1,
+ 'CGI::Push' => 1,
+ 'CGI::Switch' => 1,
+ 'CGI::Util' => 1,
+ 'Module::Build' => 1,
+ 'Module::Build::Base' => 1,
+ 'Module::Build::Compat' => 1,
+ 'Module::Build::Config' => 1,
+ 'Module::Build::ConfigData'=> 1,
+ 'Module::Build::Cookbook'=> 1,
+ 'Module::Build::Dumper' => 1,
+ 'Module::Build::ModuleInfo'=> 1,
+ 'Module::Build::Notes' => 1,
+ 'Module::Build::PPMMaker'=> 1,
+ 'Module::Build::Platform::Default'=> 1,
+ 'Module::Build::Platform::MacOS'=> 1,
+ 'Module::Build::Platform::Unix'=> 1,
+ 'Module::Build::Platform::VMS'=> 1,
+ 'Module::Build::Platform::VOS'=> 1,
+ 'Module::Build::Platform::Windows'=> 1,
+ 'Module::Build::Platform::aix'=> 1,
+ 'Module::Build::Platform::cygwin'=> 1,
+ 'Module::Build::Platform::darwin'=> 1,
+ 'Module::Build::Platform::os2'=> 1,
+ 'Module::Build::PodParser'=> 1,
+ 'Module::Build::Version'=> 1,
+ 'Module::Build::YAML' => 1,
+ 'Package::Constants' => 1,
+ 'Simple' => 1,
+ 'inc::latest' => 1,
+ }
+ },
+ 5.021001 => {
+ delta_from => 5.021000,
+ changed => {
+ 'App::Prove' => '3.32',
+ 'App::Prove::State' => '3.32',
+ 'App::Prove::State::Result'=> '3.32',
+ 'App::Prove::State::Result::Test'=> '3.32',
+ 'Archive::Tar' => '2.00',
+ 'Archive::Tar::Constant'=> '2.00',
+ 'Archive::Tar::File' => '2.00',
+ 'B' => '1.49',
+ 'B::Deparse' => '1.27',
+ 'Benchmark' => '1.19',
+ 'CPAN::Meta' => '2.141520',
+ 'CPAN::Meta::Converter' => '2.141520',
+ 'CPAN::Meta::Feature' => '2.141520',
+ 'CPAN::Meta::History' => '2.141520',
+ 'CPAN::Meta::Prereqs' => '2.141520',
+ 'CPAN::Meta::Spec' => '2.141520',
+ 'CPAN::Meta::Validator' => '2.141520',
+ 'Carp' => '1.34',
+ 'Carp::Heavy' => '1.34',
+ 'Config' => '5.021001',
+ 'Cwd' => '3.48',
+ 'Data::Dumper' => '2.152',
+ 'Devel::PPPort' => '3.24',
+ 'Devel::Peek' => '1.17',
+ 'Digest::SHA' => '5.92',
+ 'DynaLoader' => '1.26',
+ 'Encode' => '2.62',
+ 'Errno' => '1.20_04',
+ 'Exporter' => '5.71',
+ 'Exporter::Heavy' => '5.71',
+ 'ExtUtils::Install' => '1.68',
+ 'ExtUtils::Miniperl' => '1.02',
+ 'ExtUtils::ParseXS' => '3.25',
+ 'ExtUtils::ParseXS::Constants'=> '3.25',
+ 'ExtUtils::ParseXS::CountLines'=> '3.25',
+ 'ExtUtils::ParseXS::Eval'=> '3.25',
+ 'ExtUtils::ParseXS::Utilities'=> '3.25',
+ 'ExtUtils::Typemaps' => '3.25',
+ 'ExtUtils::Typemaps::Cmd'=> '3.25',
+ 'ExtUtils::Typemaps::InputMap'=> '3.25',
+ 'ExtUtils::Typemaps::OutputMap'=> '3.25',
+ 'ExtUtils::Typemaps::Type'=> '3.25',
+ 'Fatal' => '2.25',
+ 'File::Spec' => '3.48',
+ 'File::Spec::Cygwin' => '3.48',
+ 'File::Spec::Epoc' => '3.48',
+ 'File::Spec::Functions' => '3.48',
+ 'File::Spec::Mac' => '3.48',
+ 'File::Spec::OS2' => '3.48',
+ 'File::Spec::Unix' => '3.48',
+ 'File::Spec::VMS' => '3.48',
+ 'File::Spec::Win32' => '3.48',
+ 'Hash::Util' => '0.17',
+ 'IO' => '1.32',
+ 'List::Util' => '1.39',
+ 'List::Util::XS' => '1.39',
+ 'Locale::Codes' => '3.31',
+ 'Locale::Codes::Constants'=> '3.31',
+ 'Locale::Codes::Country'=> '3.31',
+ 'Locale::Codes::Country_Codes'=> '3.31',
+ 'Locale::Codes::Country_Retired'=> '3.31',
+ 'Locale::Codes::Currency'=> '3.31',
+ 'Locale::Codes::Currency_Codes'=> '3.31',
+ 'Locale::Codes::Currency_Retired'=> '3.31',
+ 'Locale::Codes::LangExt'=> '3.31',
+ 'Locale::Codes::LangExt_Codes'=> '3.31',
+ 'Locale::Codes::LangExt_Retired'=> '3.31',
+ 'Locale::Codes::LangFam'=> '3.31',
+ 'Locale::Codes::LangFam_Codes'=> '3.31',
+ 'Locale::Codes::LangFam_Retired'=> '3.31',
+ 'Locale::Codes::LangVar'=> '3.31',
+ 'Locale::Codes::LangVar_Codes'=> '3.31',
+ 'Locale::Codes::LangVar_Retired'=> '3.31',
+ 'Locale::Codes::Language'=> '3.31',
+ 'Locale::Codes::Language_Codes'=> '3.31',
+ 'Locale::Codes::Language_Retired'=> '3.31',
+ 'Locale::Codes::Script' => '3.31',
+ 'Locale::Codes::Script_Codes'=> '3.31',
+ 'Locale::Codes::Script_Retired'=> '3.31',
+ 'Locale::Country' => '3.31',
+ 'Locale::Currency' => '3.31',
+ 'Locale::Language' => '3.31',
+ 'Locale::Script' => '3.31',
+ 'Math::BigFloat' => '1.9994',
+ 'Math::BigInt' => '1.9995',
+ 'Math::BigInt::Calc' => '1.9994',
+ 'Math::BigInt::CalcEmu' => '1.9994',
+ 'Math::BigRat' => '0.2608',
+ 'Module::CoreList' => '5.021001_01',
+ 'Module::CoreList::TieHashDelta'=> '5.021001_01',
+ 'Module::CoreList::Utils'=> '5.021001_01',
+ 'Module::Metadata' => '1.000024',
+ 'Module::Metadata::corpus::BOMTest::UTF16BE'=> undef,
+ 'Module::Metadata::corpus::BOMTest::UTF16LE'=> undef,
+ 'Module::Metadata::corpus::BOMTest::UTF8'=> '1',
+ 'NDBM_File' => '1.13',
+ 'Net::Config' => '1.14',
+ 'Net::SMTP' => '2.34',
+ 'Net::Time' => '2.11',
+ 'OS2::Process' => '1.10',
+ 'POSIX' => '1.40',
+ 'PerlIO::encoding' => '0.19',
+ 'PerlIO::mmap' => '0.013',
+ 'PerlIO::scalar' => '0.19',
+ 'PerlIO::via' => '0.15',
+ 'Pod::Html' => '1.22',
+ 'Scalar::Util' => '1.39',
+ 'SelfLoader' => '1.22',
+ 'Socket' => '2.014',
+ 'Storable' => '2.51',
+ 'TAP::Base' => '3.32',
+ 'TAP::Formatter::Base' => '3.32',
+ 'TAP::Formatter::Color' => '3.32',
+ 'TAP::Formatter::Console'=> '3.32',
+ 'TAP::Formatter::Console::ParallelSession'=> '3.32',
+ 'TAP::Formatter::Console::Session'=> '3.32',
+ 'TAP::Formatter::File' => '3.32',
+ 'TAP::Formatter::File::Session'=> '3.32',
+ 'TAP::Formatter::Session'=> '3.32',
+ 'TAP::Harness' => '3.32',
+ 'TAP::Harness::Env' => '3.32',
+ 'TAP::Object' => '3.32',
+ 'TAP::Parser' => '3.32',
+ 'TAP::Parser::Aggregator'=> '3.32',
+ 'TAP::Parser::Grammar' => '3.32',
+ 'TAP::Parser::Iterator' => '3.32',
+ 'TAP::Parser::Iterator::Array'=> '3.32',
+ 'TAP::Parser::Iterator::Process'=> '3.32',
+ 'TAP::Parser::Iterator::Stream'=> '3.32',
+ 'TAP::Parser::IteratorFactory'=> '3.32',
+ 'TAP::Parser::Multiplexer'=> '3.32',
+ 'TAP::Parser::Result' => '3.32',
+ 'TAP::Parser::Result::Bailout'=> '3.32',
+ 'TAP::Parser::Result::Comment'=> '3.32',
+ 'TAP::Parser::Result::Plan'=> '3.32',
+ 'TAP::Parser::Result::Pragma'=> '3.32',
+ 'TAP::Parser::Result::Test'=> '3.32',
+ 'TAP::Parser::Result::Unknown'=> '3.32',
+ 'TAP::Parser::Result::Version'=> '3.32',
+ 'TAP::Parser::Result::YAML'=> '3.32',
+ 'TAP::Parser::ResultFactory'=> '3.32',
+ 'TAP::Parser::Scheduler'=> '3.32',
+ 'TAP::Parser::Scheduler::Job'=> '3.32',
+ 'TAP::Parser::Scheduler::Spinner'=> '3.32',
+ 'TAP::Parser::Source' => '3.32',
+ 'TAP::Parser::SourceHandler'=> '3.32',
+ 'TAP::Parser::SourceHandler::Executable'=> '3.32',
+ 'TAP::Parser::SourceHandler::File'=> '3.32',
+ 'TAP::Parser::SourceHandler::Handle'=> '3.32',
+ 'TAP::Parser::SourceHandler::Perl'=> '3.32',
+ 'TAP::Parser::SourceHandler::RawTAP'=> '3.32',
+ 'TAP::Parser::YAMLish::Reader'=> '3.32',
+ 'TAP::Parser::YAMLish::Writer'=> '3.32',
+ 'Term::ANSIColor' => '4.03',
+ 'Test::Builder' => '1.001003',
+ 'Test::Builder::Module' => '1.001003',
+ 'Test::Builder::Tester' => '1.23_003',
+ 'Test::Harness' => '3.32',
+ 'Test::More' => '1.001003',
+ 'Test::Simple' => '1.001003',
+ 'Tie::File' => '1.01',
+ 'Unicode' => '7.0.0',
+ 'Unicode::Collate' => '1.07',
+ 'Unicode::Normalize' => '1.18',
+ 'Unicode::UCD' => '0.58',
+ 'XS::APItest' => '0.61',
+ '_charnames' => '1.41',
+ 'autodie' => '2.25',
+ 'autodie::Scope::Guard' => '2.25',
+ 'autodie::Scope::GuardStack'=> '2.25',
+ 'autodie::ScopeUtil' => '2.25',
+ 'autodie::exception' => '2.25',
+ 'autodie::exception::system'=> '2.25',
+ 'autodie::hints' => '2.25',
+ 'autodie::skip' => '2.25',
+ 'charnames' => '1.41',
+ 'locale' => '1.04',
+ 'threads' => '1.94',
+ 'utf8' => '1.14',
+ 'warnings' => '1.24',
+ },
+ removed => {
+ }
+ },
+ 5.021002 => {
+ delta_from => 5.021001,
+ changed => {
+ 'B' => '1.50',
+ 'Config' => '5.021002',
+ 'Cwd' => '3.49',
+ 'Devel::Peek' => '1.18',
+ 'ExtUtils::Manifest' => '1.64',
+ 'File::Copy' => '2.30',
+ 'File::Spec' => '3.49',
+ 'File::Spec::Cygwin' => '3.49',
+ 'File::Spec::Epoc' => '3.49',
+ 'File::Spec::Functions' => '3.49',
+ 'File::Spec::Mac' => '3.49',
+ 'File::Spec::OS2' => '3.49',
+ 'File::Spec::Unix' => '3.49',
+ 'File::Spec::VMS' => '3.49',
+ 'File::Spec::Win32' => '3.49',
+ 'Filter::Simple' => '0.92',
+ 'Hash::Util' => '0.18',
+ 'IO' => '1.33',
+ 'IO::Socket::IP' => '0.31',
+ 'IPC::Open3' => '1.17',
+ 'Math::BigFloat' => '1.9996',
+ 'Math::BigInt' => '1.9996',
+ 'Math::BigInt::Calc' => '1.9996',
+ 'Math::BigInt::CalcEmu' => '1.9996',
+ 'Module::CoreList' => '5.021002',
+ 'Module::CoreList::TieHashDelta'=> '5.021002',
+ 'Module::CoreList::Utils'=> '5.021002',
+ 'POSIX' => '1.41',
+ 'Pod::Usage' => '1.64',
+ 'XS::APItest' => '0.62',
+ 'arybase' => '0.08',
+ 'experimental' => '0.008',
+ 'threads' => '1.95',
+ 'warnings' => '1.26',
+ },
+ removed => {
+ }
+ },
+ 5.021003 => {
+ delta_from => 5.021002,
+ changed => {
+ 'B::Debug' => '1.21',
+ 'CPAN::Meta' => '2.142060',
+ 'CPAN::Meta::Converter' => '2.142060',
+ 'CPAN::Meta::Feature' => '2.142060',
+ 'CPAN::Meta::History' => '2.142060',
+ 'CPAN::Meta::Merge' => '2.142060',
+ 'CPAN::Meta::Prereqs' => '2.142060',
+ 'CPAN::Meta::Requirements'=> '2.126',
+ 'CPAN::Meta::Spec' => '2.142060',
+ 'CPAN::Meta::Validator' => '2.142060',
+ 'Config' => '5.021003',
+ 'Config::Perl::V' => '0.22',
+ 'ExtUtils::CBuilder' => '0.280217',
+ 'ExtUtils::CBuilder::Base'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Unix'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::VMS'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Windows'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Windows::GCC'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Windows::MSVC'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::aix'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::android'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::cygwin'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::darwin'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::dec_osf'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::os2'=> '0.280217',
+ 'ExtUtils::Manifest' => '1.65',
+ 'HTTP::Tiny' => '0.047',
+ 'IPC::Open3' => '1.18',
+ 'Module::CoreList' => '5.021003',
+ 'Module::CoreList::TieHashDelta'=> '5.021003',
+ 'Module::CoreList::Utils'=> '5.021003',
+ 'Opcode' => '1.28',
+ 'POSIX' => '1.42',
+ 'Safe' => '2.38',
+ 'Socket' => '2.015',
+ 'Sys::Hostname' => '1.19',
+ 'UNIVERSAL' => '1.12',
+ 'XS::APItest' => '0.63',
+ 'perlfaq' => '5.0150045',
+ },
+ removed => {
+ }
+ },
+ 5.020001 => {
+ delta_from => 5.020000,
+ changed => {
+ 'Config' => '5.020001',
+ 'Config::Perl::V' => '0.22',
+ 'Cwd' => '3.48',
+ 'Exporter' => '5.71',
+ 'Exporter::Heavy' => '5.71',
+ 'ExtUtils::CBuilder' => '0.280217',
+ 'ExtUtils::CBuilder::Base'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Unix'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::VMS'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Windows'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Windows::GCC'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::Windows::MSVC'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::aix'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::android'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::cygwin'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::darwin'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::dec_osf'=> '0.280217',
+ 'ExtUtils::CBuilder::Platform::os2'=> '0.280217',
+ 'File::Copy' => '2.30',
+ 'File::Spec' => '3.48',
+ 'File::Spec::Cygwin' => '3.48',
+ 'File::Spec::Epoc' => '3.48',
+ 'File::Spec::Functions' => '3.48',
+ 'File::Spec::Mac' => '3.48',
+ 'File::Spec::OS2' => '3.48',
+ 'File::Spec::Unix' => '3.48',
+ 'File::Spec::VMS' => '3.48',
+ 'File::Spec::Win32' => '3.48',
+ 'Module::CoreList' => '5.020001',
+ 'Module::CoreList::TieHashDelta'=> '5.020001',
+ 'Module::CoreList::Utils'=> '5.020001',
+ 'PerlIO::via' => '0.15',
+ 'Unicode::UCD' => '0.58',
+ 'XS::APItest' => '0.60_01',
+ 'utf8' => '1.13_01',
+ 'version' => '0.9909',
+ 'version::regex' => '0.9909',
+ 'version::vpp' => '0.9909',
+ },
+ removed => {
+ }
+ },
);
sub is_core
removed => {
}
},
+ 5.021000 => {
+ delta_from => 5.020000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.021001 => {
+ delta_from => 5.017007,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.021002 => {
+ delta_from => 5.021001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.021003 => {
+ delta_from => 5.021002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.020001 => {
+ delta_from => 5.020000,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
for my $version (sort { $a <=> $b } keys %deprecated) {
'Archive::Tar::Constant'=> undef,
'Archive::Tar::File' => undef,
'B::Debug' => undef,
- 'CGI' => 'https://github.com/markstos/CGI.pm/issues',
- 'CGI::Apache' => 'https://github.com/markstos/CGI.pm/issues',
- 'CGI::Carp' => 'https://github.com/markstos/CGI.pm/issues',
- 'CGI::Cookie' => 'https://github.com/markstos/CGI.pm/issues',
- 'CGI::Fast' => 'https://github.com/markstos/CGI.pm/issues',
- 'CGI::Pretty' => 'https://github.com/markstos/CGI.pm/issues',
- 'CGI::Push' => 'https://github.com/markstos/CGI.pm/issues',
- 'CGI::Switch' => 'https://github.com/markstos/CGI.pm/issues',
- 'CGI::Util' => 'https://github.com/markstos/CGI.pm/issues',
+ 'CGI' => 'https://github.com/leejo/CGI.pm/issues',
+ 'CGI::Apache' => 'https://github.com/leejo/CGI.pm/issues',
+ 'CGI::Carp' => 'https://github.com/leejo/CGI.pm/issues',
+ 'CGI::Cookie' => 'https://github.com/leejo/CGI.pm/issues',
+ 'CGI::Fast' => 'https://github.com/leejo/cgi-fast/issues',
+ 'CGI::Pretty' => 'https://github.com/leejo/CGI.pm/issues',
+ 'CGI::Push' => 'https://github.com/leejo/CGI.pm/issues',
+ 'CGI::Switch' => 'https://github.com/leejo/CGI.pm/issues',
+ 'CGI::Util' => 'https://github.com/leejo/CGI.pm/issues',
'CPAN' => undef,
'CPAN::Author' => undef,
'CPAN::Bundle' => undef,
'Module::Build::ConfigData'=> undef,
'Module::Build::Cookbook'=> undef,
'Module::Build::Dumper' => undef,
- 'Module::Build::ModuleInfo'=> undef,
+ 'Module::Build::ModuleInfo'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Module-Build-Deprecated',
'Module::Build::Notes' => undef,
'Module::Build::PPMMaker'=> undef,
'Module::Build::Platform::Default'=> undef,
'Module::Build::Platform::darwin'=> undef,
'Module::Build::Platform::os2'=> undef,
'Module::Build::PodParser'=> undef,
- 'Module::Build::Version'=> undef,
- 'Module::Build::YAML' => undef,
+ 'Module::Build::Version'=> 'http://rt.cpan.org/Public/Dist/Display.html?Name=Module-Build-Deprecated',
+ 'Module::Build::YAML' => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Module-Build-Deprecated',
'Module::Load' => undef,
'Module::Load::Conditional'=> undef,
'Module::Loaded' => undef,
print join ', ', Module::CoreList->find_modules(qr/Data/);
# prints 'Data::Dumper'
- print join ', ', Module::CoreList->find_modules(qr/test::h.*::.*s/i, 5.008008);
+ print join ', ',
+ Module::CoreList->find_modules(qr/test::h.*::.*s/i, 5.008008);
# prints 'Test::Harness::Assert, Test::Harness::Straps'
print join ", ", @{ $Module::CoreList::families{5.005} };
5.15.9, 5.16.0, 5.16.1, 5.16.2, 5.16.3, 5.17.0, 5.17.1, 5.17.2, 5.17.3,
5.17.4, 5.17.5, 5.17.6, 5.17.7, 5.17.8, 5.17.9, 5.17.10, 5.17.11, 5.18.0,
5.19.0, 5.19.1, 5.19.2, 5.19.3, 5.19.4, 5.19.5, 5.19.6, 5.19.7, 5.19.8,
-5.19.9, 5.19.10, 5.19.11 and 5.20.0 releases of perl.
+5.19.9, 5.19.10, 5.19.11, 5.20.0, 5.21.0, 5.21.1, 5.21.2, 5.21.3 and
+5.20.1 releases of perl.
=head1 HISTORY
use strict;
use vars qw($VERSION);
-$VERSION = "3.11";
+$VERSION = '5.020001';
sub TIEHASH {
my ($class, $changed, $removed, $parent) = @_;
sub EXISTS {
my ($self, $key) = @_;
+ restart:
if (exists $self->{changed}{$key}) {
return 1;
} elsif (exists $self->{removed}{$key}) {
return '';
} elsif (defined $self->{parent}) {
- return exists $self->{parent}{$key};
+ $self = tied %{$self->{parent}}; #avoid extreme magic/tie recursion
+ goto restart;
}
return '';
}
use Module::CoreList;
use Module::CoreList::TieHashDelta;
-$VERSION = '3.11';
+$VERSION = '5.020001';
sub utilities {
my $perl = shift;
removed => {
}
},
+ 5.021000 => {
+ delta_from => 5.020000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.021001 => {
+ delta_from => 5.021000,
+ changed => {
+ },
+ removed => {
+ 'a2p' => 1,
+ 'config_data' => 1,
+ 'find2perl' => 1,
+ 'psed' => 1,
+ 's2p' => 1,
+ }
+ },
+ 5.021002 => {
+ delta_from => 5.021001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.021003 => {
+ delta_from => 5.021002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.020001 => {
+ delta_from => 5.02,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
for my $version (sort { $a <=> $b } keys %delta) {
--- /dev/null
+#!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 $]");
+}
use Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
-$VERSION = '3.47';
+$VERSION = '3.48';
my $xs_version = $VERSION;
$VERSION =~ tr/_//;
$pwd_cmd = "$Config::Config{targetsh} -c pwd"
}
else {
- $pwd_cmd = "$Config::Config{sh} -c pwd"
+ my $sh = $Config::Config{sh} || (-x '/system/bin/sh' ? '/system/bin/sh' : 'sh');
+ $pwd_cmd = "$sh -c pwd"
}
}
use strict;
use vars qw(@ISA $VERSION);
-$VERSION = '3.47';
+$VERSION = '3.48';
$VERSION =~ tr/_//;
my %module = (MacOS => 'Mac',
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.47';
+$VERSION = '3.48';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
use strict;
use vars qw($VERSION @ISA);
-$VERSION = '3.47';
+$VERSION = '3.48';
$VERSION =~ tr/_//;
require File::Spec::Unix;
use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
-$VERSION = '3.47';
+$VERSION = '3.48';
$VERSION =~ tr/_//;
require Exporter;
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.47';
+$VERSION = '3.48';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.47';
+$VERSION = '3.48';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
use strict;
use vars qw($VERSION);
-$VERSION = '3.47';
+$VERSION = '3.48';
my $xs_version = $VERSION;
$VERSION =~ tr/_//;
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.47';
+$VERSION = '3.48';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
use vars qw(@ISA $VERSION);
require File::Spec::Unix;
-$VERSION = '3.47';
+$VERSION = '3.48';
$VERSION =~ tr/_//;
@ISA = qw(File::Spec::Unix);
(void)PerlLIO_chmod(PL_oldname,PL_filemode);
#endif
if (fileuid != PL_statbuf.st_uid || filegid != PL_statbuf.st_gid) {
- int rc = 0;
+ /* XXX silently ignore failures */
#ifdef HAS_FCHOWN
- rc = fchown(PL_lastfd,fileuid,filegid);
+ PERL_UNUSED_RESULT(fchown(PL_lastfd,fileuid,filegid));
#else
#ifdef HAS_CHOWN
- rc = PerlLIO_chown(PL_oldname,fileuid,filegid);
+ PERL_UNUSED_RESULT(PerlLIO_chown(PL_oldname,fileuid,filegid));
#endif
#endif
- /* XXX silently ignore failures */
- PERL_UNUSED_VAR(rc);
}
return IoIFP(GvIOp(gv));
}
Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't exec \"%s\": %s",
cmd, Strerror(e));
if (do_report) {
- int rc = PerlLIO_write(fd, (void*)&e, sizeof(int));
- /* silently ignore failures */
- PERL_UNUSED_VAR(rc);
+ /* XXX silently ignore failures */
+ PERL_UNUSED_RESULT(PerlLIO_write(fd, (void*)&e, sizeof(int)));
PerlLIO_close(fd);
}
}
static bool
S_op_private_to_names(pTHX_ SV *tmpsv, U32 optype, U32 op_private) {
const struct op_private_by_op *start = op_private_names;
- const struct op_private_by_op *const end
- = op_private_names + C_ARRAY_LENGTH(op_private_names);
+ const struct op_private_by_op *const end = C_ARRAY_END(op_private_names);
/* This is a linear search, but no worse than the code that it replaced.
It's debugging code - size is more important than speed. */
if (HvARRAY(sv) && usedkeys) {
/* Show distribution of HEs in the ARRAY */
int freq[200];
-#define FREQ_MAX ((int)(sizeof freq / sizeof freq[0] - 1))
+#define FREQ_MAX ((int)(C_ARRAY_LENGTH(freq) - 1))
int i;
int max = 0;
U32 pow2 = 2, keys = usedkeys;
Ap |void |set_numeric_local
Ap |void |set_numeric_radix
Ap |void |set_numeric_standard
+Admn |void |sync_locale
ApdO |void |require_pv |NN const char* pv
Apd |void |pack_cat |NN SV *cat|NN const char *pat|NN const char *patend \
|NN SV **beglist|NN SV **endlist|NN SV ***next_in_list|U32 flags
plan(skip_all => "GDBM_File was not built")
unless $Config{extensions} =~ /\bGDBM_File\b/;
+ # https://rt.perl.org/Public/Bug/Display.html?id=117967
+ plan(skip_all => "GDBM_File is flaky in $^O")
+ if $^O =~ /darwin/;
+
plan(tests => 8);
use_ok('GDBM_File');
}
=item C<atexit>
-C<atexit()> is C-specific: use C<END {}> instead, see L<perlsub>.
+C<atexit()> is C-specific: use C<END {}> instead, see L<perlmod>.
=item C<atof>
package PerlIO::via;
-our $VERSION = '0.14';
+our $VERSION = '0.15';
require XSLoader;
XSLoader::load();
1;
...)
{
PerlIOVia *s = PerlIOSelf(f, PerlIOVia);
+ SV *result = Nullsv;
CV *cv =
(*save) ? *save : PerlIOVia_fetchmethod(aTHX_ s, method, save);
- SV *result = Nullsv;
- va_list ap;
- va_start(ap, flags);
if (cv != (CV *) - 1) {
IV count;
dSP;
SV *arg;
+ va_list ap;
+
+ va_start(ap, flags);
PUSHSTACKi(PERLSI_MAGIC);
ENTER;
PUSHMARK(sp);
while ((arg = va_arg(ap, SV *))) {
XPUSHs(arg);
}
+ va_end(ap);
if (*PerlIONext(f)) {
if (!s->fh) {
GV *gv;
LEAVE;
POPSTACK;
}
- va_end(ap);
return result;
}
*/
#ifdef BADMESS
rc = write(2, "sdbm: cannot insert after SPLTMAX attempts.\n", 44);
- (void)rc;
-
+ /* PERL_UNUSED_VAR() or PERL_UNUSED_RESULT() would be
+ * useful here but that would mean pulling in perl.h */
+ (void)rc;
#endif
return 0;
use warnings;
use Carp;
-our $VERSION = '0.60';
+our $VERSION = '0.60_01';
require XSLoader;
MGVTBL *want;
CODE:
#define test_get_this_vtable(name) \
- want = CAT2(&PL_vtbl_, name); \
+ want = (MGVTBL*)CAT2(&PL_vtbl_, name); \
have = get_vtbl(CAT2(want_vtbl_, name)); \
if (have != want) \
croak("fail %p!=%p for get_vtbl(want_vtbl_" STRINGIFY(name) ") at " __FILE__ " line %d", have, want, __LINE__)
=head1 SV-Body Allocation
=for apidoc Ama|SV*|newSVpvs|const char* s
-Like C<newSVpvn>, but takes a literal string instead of a string/length pair.
+Like C<newSVpvn>, but takes a literal C<NUL>-terminated string instead of a
+string/length pair.
=for apidoc Ama|SV*|newSVpvs_flags|const char* s|U32 flags
-Like C<newSVpvn_flags>, but takes a literal string instead of a string/length
-pair.
+Like C<newSVpvn_flags>, but takes a literal C<NUL>-terminated string instead of
+a string/length pair.
=for apidoc Ama|SV*|newSVpvs_share|const char* s
-Like C<newSVpvn_share>, but takes a literal string instead of a string/length
-pair and omits the hash parameter.
+Like C<newSVpvn_share>, but takes a literal C<NUL>-terminated string instead of
+a string/length pair and omits the hash parameter.
=for apidoc Am|void|sv_catpvs_flags|SV* sv|const char* s|I32 flags
-Like C<sv_catpvn_flags>, but takes a literal string instead of a
-string/length pair.
+Like C<sv_catpvn_flags>, but takes a literal C<NUL>-terminated string instead
+of a string/length pair.
=for apidoc Am|void|sv_catpvs_nomg|SV* sv|const char* s
Like C<sv_catpvn_nomg>, but takes a literal string instead of a
=head1 Memory Management
=for apidoc Ama|char*|savepvs|const char* s
-Like C<savepvn>, but takes a literal string instead of a string/length pair.
+Like C<savepvn>, but takes a literal C<NUL>-terminated string instead of a
+string/length pair.
=for apidoc Ama|char*|savesharedpvs|const char* s
A version of C<savepvs()> which allocates the duplicate string in memory
#define StructCopy(s,d,t) Copy(s,d,1,t)
#endif
+/* C_ARRAY_LENGTH is the number of elements in the C array (so you
+ * want your zero-based indices to be less than but not equal to).
+ *
+ * C_ARRAY_END is one past the last: half-open/half-closed range,
+ * not last-inclusive range. */
#define C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0]))
-#define C_ARRAY_END(a) (a) + (sizeof(a)/sizeof((a)[0]))
+#define C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a))
#ifdef NEED_VA_COPY
# ifdef va_copy
# mkdir -p /opt/perl-catamount
# mkdir -p /opt/perl-catamount/include
# mkdir -p /opt/perl-catamount/lib
-# mkdir -p /opt/perl-catamount/lib/perl5/5.20.0
+# mkdir -p /opt/perl-catamount/lib/perl5/5.20.1
# mkdir -p /opt/perl-catamount/bin
# cp *.h /opt/perl-catamount/include
# cp libperl.a /opt/perl-catamount/lib
-# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.20.0
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.20.1
# cp miniperl perl run.sh cc.sh /opt/perl-catamount/lib
#
# With the headers and the libperl.a you can embed Perl to your Catamount
case "X$optimize" in
X)
case `gcc -v 2>&1|grep "gcc version"` in
- "gcc version 3."*)
- optimize="-O2 -falign-loops=2 -falign-jumps=2 -falign-functions=2" ;;
- *)
+ "gcc version 1."*|"gcc version 2."*)
optimize="-O2 -malign-loops=2 -malign-jumps=2 -malign-functions=2" ;;
+ *)
+ optimize="-O2 -falign-loops=2 -falign-jumps=2 -falign-functions=2" ;;
esac
ldflags='-s'
;;
$cat <<EOO >> $pwd/config.arch
osname='android'
+eval "libpth='$libpth /system/lib /vendor/lib'"
EOO
# Android is a linux variant, so run those hints.
#
ARCH=`arch | sed 's/^OpenBSD.//'`
case "${ARCH}-${osvers}" in
-alpha-2.[0-8]|mips-2.[0-8]|powerpc-2.[0-7]|m88k-*|hppa-*|vax-*)
+alpha-2.[0-8]|mips-2.[0-8]|powerpc-2.[0-7]|m88k-[2-4].*|m88k-5.[0-2]|hppa-3.[0-5]|vax-*)
test -z "$usedl" && usedl=$undef
;;
*)
# cc is gcc so we can do better than -O
# Allow a command-line override, such as -Doptimize=-g
-case ${ARCH} in
-m88k)
- optimize='-O0'
+case "${ARCH}-${osvers}" in
+hppa-3.3|m88k-2.*|m88k-3.[0-3])
+ test "$optimize" || optimize='-O0'
;;
-hppa)
- optimize='-O0'
+m88k-3.4)
+ test "$optimize" || optimize='-O1'
;;
*)
test "$optimize" || optimize='-O2'
esac
case "$osvers" in
[012].*|3.[0-6])
- # Broken at least up to OpenBSD 3.6, we'll see about 3.7
+ # Broken up to OpenBSD 3.6, fixed in OpenBSD 3.7
d_getservbyname_r=$undef ;;
esac
esac
`
case "$cc" in
-'') if test -f /opt/SUNWspro/bin/cc; then
- cc=/opt/SUNWspro/bin/cc
- cat <<EOF >&4
+'') for i in `ls -r /opt/solstudio*/bin/cc` /opt/SUNWspro/bin/cc
+ do
+ if test -f "$i"; then
+ cc=$i
+ cat <<EOF >&4
You specified no cc but you seem to have the Workshop compiler
($cc) installed, using that.
e.g. Configure -Dcc=gcc
EOF
- fi
+ break
+ fi
+ done
;;
esac
if $tryworkshopcc >/dev/null 2>&1; then
cc_name=`$run ./try`
if test "$cc_name" = "workshop"; then
- ccversion="`${cc:-cc} -V 2>&1|sed -n -e '1s/^[Cc][Cc]: //p'`"
+ ccversion="`${cc:-cc} -V 2>&1|sed -n -e '1s/^[Cc][Cc9]9*: //p'`"
fi
if test "$cc_name" = "workshop CC"; then
ccversion="`${cc:-CC} -V 2>&1|sed -n -e '1s/^[Cc][C]: //p'`"
d_attribute_pure='undef'
d_attribute_unused='undef'
d_attribute_warn_unused_result='undef'
+ case "$cc" in
+ *c99) # c99 rejects bare '-O'.
+ case "$optimize" in
+ ''|-O) optimize=-O3 ;;
+ esac
+ # Without -Xa c99 doesn't see
+ # many OS interfaces.
+ case "$ccflags" in
+ *-Xa*) ;;
+ *) ccflags="$ccflags -Xa" ;;
+ esac
+ ;;
+ esac
;;
esac
fi
#
cat >> config.over <<'EOOVER'
if test "$d_unsetenv" = "$define" -a \
- `expr "$ccflags" : '.*-D_PERL_USE_SAFE_PUTENV'` -eq 0; then
+ `expr "$ccflags" : '.*-DPERL_USE_SAFE_PUTENV'` -eq 0; then
ccflags="$ccflags -DPERL_USE_SAFE_PUTENV"
fi
EOOVER
/*
=for apidoc AiR|bool|is_safe_syscall|const char *pv|STRLEN len|const char *what|const char *op_name
-Test that the given C<pv> doesn't contain any internal NUL characters.
+Test that the given C<pv> doesn't contain any internal C<NUL> characters.
If it does, set C<errno> to ENOENT, optionally warn, and return FALSE.
Return TRUE if the name is safe.
/* Hook for File::Glob */
PERLVARI(I, globhook, globhook_t, NULL)
-/* The last unconditional member of the interpreter structure when 5.20.0 was
+/* The last unconditional member of the interpreter structure when 5.20.1 was
released. The offset of the end of this is baked into a global variable in
any shared perl library which will allow a sanity test in future perl
releases. */
sub cp;
sub mv;
-$VERSION = '2.29';
+$VERSION = '2.30';
require Exporter;
@ISA = qw(Exporter);
directory does exist, then it will be created. Trying to copy
a file into a non-existent directory is an error.
Trying to copy a file on top of itself is also an error.
+C<copy> will not overwrite read-only files.
If the destination (second argument) already exists and is a directory,
and the source (first argument) is not a filehandle, then the source
no warnings 'surrogate'; # surrogates can be inputs to this
use charnames ();
-our $VERSION = '0.57';
+our $VERSION = '0.58';
require Exporter;
is empty if I<code> has no decomposition; or is one or more codes
(separated by spaces) that, taken in order, represent a decomposition for
I<code>. Each has at least four hexdigits.
-The codes may be preceded by a word enclosed in angle brackets then a space,
+The codes may be preceded by a word enclosed in angle brackets, then a space,
like C<E<lt>compatE<gt> >, giving the type of decomposition
This decomposition may be an intermediate one whose components are also
=item B<decimal>
-if I<code> is a decimal digit this is its integer numeric value
+if I<code> represents a decimal digit this is its integer numeric value
=item B<digit>
my $range = charblock('Armenian');
-With a L</code point argument> charblock() returns the I<block> the code point
+With a L</code point argument> C<charblock()> returns the I<block> the code point
belongs to, e.g. C<Basic Latin>. The old-style block name is returned (see
L</Old-style versus new-style block names>).
If the code point is unassigned, this returns the block it would belong to if
See also L</Blocks versus Scripts>.
-If supplied with an argument that can't be a code point, charblock() tries to
+If supplied with an argument that can't be a code point, C<charblock()> tries to
do the opposite and interpret the argument as an old-style block name. On an
ASCII platform, the return value is a I<range set> with one range: an
anonymous list with a single element that consists of another anonymous list
whose first element is the first code point in the block, and whose second
-(and final) element is the final code point in the block. On an EBCDIC
+element is the final code point in the block. On an EBCDIC
platform, the first two Unicode blocks are not contiguous. Their range sets
-are lists containing I<start-of-range>, I<end-of-range> code point pairs. You
+are lists containing I<start-of-range>, I<end-of-range> code point pairs. You
can test whether a code point is in a range set using the L</charinrange()>
-function. If the argument is not a known block, C<undef> is returned.
+function. (To be precise, each I<range set> contains a third array element,
+after the range boundary ones: the old_style block name.)
+
+If the argument to C<charblock()> is not a known block, C<undef> is
+returned.
=cut
my $range = charscript('Thai');
-With a L</code point argument> charscript() returns the I<script> the
-code point belongs to, e.g. C<Latin>, C<Greek>, C<Han>.
+With a L</code point argument>, C<charscript()> returns the I<script> the
+code point belongs to, e.g., C<Latin>, C<Greek>, C<Han>.
If the code point is unassigned or the Unicode version being used is so early
that it doesn't have scripts, this function returns C<"Unknown">.
to do the opposite and interpret the argument as a script name. The
return value is a I<range set>: an anonymous list of lists that contain
I<start-of-range>, I<end-of-range> code point pairs. You can test whether a
-code point is in a range set using the L</charinrange()> function. If the
-argument is not a known script, C<undef> is returned.
+code point is in a range set using the L</charinrange()> function.
+(To be precise, each I<range set> contains a third array element,
+after the range boundary ones: the script name.)
+
+If the C<charscript()> argument is not a known script, C<undef> is returned.
See also L</Blocks versus Scripts>.
my $charblocks = charblocks();
-charblocks() returns a reference to a hash with the known block names
+C<charblocks()> returns a reference to a hash with the known block names
as the keys, and the code point ranges (see L</charblock()>) as the values.
The names are in the old-style (see L</Old-style versus new-style block
my $charscripts = charscripts();
-charscripts() returns a reference to a hash with the known script
+C<charscripts()> returns a reference to a hash with the known script
names as the keys, and the code point ranges (see L</charscript()>) as
the values.
In addition to using the C<\p{Blk=...}> and C<\P{Blk=...}> constructs, you
can also test whether a code point is in the I<range> as returned by
L</charblock()> and L</charscript()> or as the values of the hash returned
-by L</charblocks()> and L</charscripts()> by using charinrange():
+by L</charblocks()> and L</charscripts()> by using C<charinrange()>:
use Unicode::UCD qw(charscript charinrange);
my $compexcl = compexcl(0x09dc);
This routine returns C<undef> if the Unicode version being used is so early
-that it doesn't have this property. It is included for backwards
+that it doesn't have this property.
+
+C<compexcl()> is included for backwards
compatibility, but as of Perl 5.12 and more modern Unicode versions, for
most purposes it is probably more convenient to use one of the following
instead:
If used with a single argument in a scalar context, returns the string
consisting of the code points of the named sequence, or C<undef> if no
named sequence by that name exists. If used with a single argument in
-a list context, it returns the list of the ordinals of the code points. If used
-with no
-arguments in a list context, returns a hash with the names of the
-named sequences as the keys and the named sequences as strings as
+a list context, it returns the list of the ordinals of the code points.
+
+If used with no
+arguments in a list context, it returns a hash with the names of all the
+named sequences as the keys and their sequences as strings as
the values. Otherwise, it returns C<undef> or an empty list depending
on the context.
my $val = num("123");
my $one_quarter = num("\N{VULGAR FRACTION 1/4}");
-C<num> returns the numeric value of the input Unicode string; or C<undef> if it
+C<num()> returns the numeric value of the input Unicode string; or C<undef> if it
doesn't think the entire string has a completely valid, safe numeric value.
If the string is just one character in length, the Unicode numeric value
$utf8::hint_bits = 0x00800000;
-our $VERSION = '1.13';
+our $VERSION = '1.13_01';
sub import {
$^H |= $utf8::hint_bits;
=over 4
-=item * $num_octets = utf8::upgrade($string)
+=item * C<$num_octets = utf8::upgrade($string)>
Converts in-place the internal representation of the string from an octet
sequence in the native encoding (Latin-1 or EBCDIC) to I<UTF-X>. The
Therefore Encode is recommended for the general purposes; see also
L<Encode>.
-=item * $success = utf8::downgrade($string[, $fail_ok])
+=item * C<$success = utf8::downgrade($string[, $fail_ok])>
Converts in-place the internal representation of the string from
I<UTF-X> to the equivalent octet sequence in the native encoding (Latin-1
Therefore Encode is recommended for the general purposes; see also
L<Encode>.
-=item * utf8::encode($string)
+=item * C<utf8::encode($string)>
Converts in-place the character sequence to the corresponding octet
sequence in I<UTF-X>. That is, every (possibly wide) character gets
Therefore Encode is recommended for the general purposes; see also
L<Encode>.
-=item * $success = utf8::decode($string)
+=item * C<$success = utf8::decode($string)>
Attempts to convert in-place the octet sequence encoded as I<UTF-X> to the
corresponding character sequence. That is, it replaces each sequence of
Therefore Encode is recommended for the general purposes; see also
L<Encode>.
-=item * $flag = utf8::is_utf8($string)
+=item * C<$flag = utf8::is_utf8($string)>
(Since Perl 5.8.1) Test whether I<$string> is marked internally as encoded in
UTF-8. Functionally the same as Encode::is_utf8().
-=item * $flag = utf8::valid($string)
+=item * C<$flag = utf8::valid($string)>
[INTERNAL] Test whether I<$string> is in a consistent state regarding
UTF-8. Will return true if it is well-formed UTF-8 and has the UTF-8 flag
Safefree(save_input_locale);
return is_utf8;
}
+ Safefree(codeset);
}
# endif
* result */
if (is_utf8) {
wchar_t wc;
- GCC_DIAG_IGNORE(-Wunused-result);
- (void) mbtowc(&wc, NULL, 0); /* Reset any shift state */
- GCC_DIAG_RESTORE;
+ PERL_UNUSED_RESULT(mbtowc(&wc, NULL, 0));/* Reset any shift state */
errno = 0;
if (mbtowc(&wc, HYPHEN_UTF8, strlen(HYPHEN_UTF8))
!= strlen(HYPHEN_UTF8)
Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
{
dTHXs;
+ int ret = 0;
va_list(arglist);
/* Easier to special case this here than in embed.pl. (Look at what it
#endif
va_start(arglist, format);
- return PerlIO_vprintf(stream, format, arglist);
+ ret = PerlIO_vprintf(stream, format, arglist);
+ va_end(arglist);
+ return ret;
}
int
{
dTHX;
va_list(arglist);
+ int ret = 0;
#ifdef PERL_IMPLICIT_CONTEXT
PERL_ARGS_ASSERT_PRINTF_NOCONTEXT;
#endif
va_start(arglist, format);
- return PerlIO_vprintf(PerlIO_stdout(), format, arglist);
+ ret = PerlIO_vprintf(PerlIO_stdout(), format, arglist);
+ va_end(arglist);
+ return ret;
}
#if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL))
break;
case '<':
{
- int rc = 0;
+ /* XXX $< currently silently ignores failures */
const Uid_t new_uid = SvUID(sv);
PL_delaymagic_uid = new_uid;
if (PL_delaymagic) {
break; /* don't do magic till later */
}
#ifdef HAS_SETRUID
- rc = setruid(new_uid);
+ PERL_UNUSED_RESULT(setruid(new_uid));
#else
#ifdef HAS_SETREUID
- rc = setreuid(new_uid, (Uid_t)-1);
+ PERL_UNUSED_RESULT(setreuid(new_uid, (Uid_t)-1));
#else
#ifdef HAS_SETRESUID
- rc = setresuid(new_uid, (Uid_t)-1, (Uid_t)-1);
+ PERL_UNUSED_RESULT(setresuid(new_uid, (Uid_t)-1, (Uid_t)-1));
#else
if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
#ifdef PERL_DARWIN
/* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
if (new_uid != 0 && PerlProc_getuid() == 0)
- rc = PerlProc_setuid(0);
+ PERL_UNUSED_RESULT(PerlProc_setuid(0));
#endif
- rc = PerlProc_setuid(new_uid);
+ PERL_UNUSED_RESULT(PerlProc_setuid(new_uid));
} else {
Perl_croak(aTHX_ "setruid() not implemented");
}
#endif
#endif
#endif
- /* XXX $< currently silently ignores failures */
- PERL_UNUSED_VAR(rc);
break;
}
case '>':
{
- int rc = 0;
+ /* XXX $> currently silently ignores failures */
const Uid_t new_euid = SvUID(sv);
PL_delaymagic_euid = new_euid;
if (PL_delaymagic) {
break; /* don't do magic till later */
}
#ifdef HAS_SETEUID
- rc = seteuid(new_euid);
+ PERL_UNUSED_RESULT(seteuid(new_euid));
#else
#ifdef HAS_SETREUID
- rc = setreuid((Uid_t)-1, new_euid);
+ PERL_UNUSED_RESULT(setreuid((Uid_t)-1, new_euid));
#else
#ifdef HAS_SETRESUID
- rc = setresuid((Uid_t)-1, new_euid, (Uid_t)-1);
+ PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1));
#else
if (new_euid == PerlProc_getuid()) /* special case $> = $< */
- rc = PerlProc_setuid(new_euid);
+ PERL_UNUSED_RESULT(PerlProc_setuid(new_euid));
else {
Perl_croak(aTHX_ "seteuid() not implemented");
}
#endif
#endif
#endif
- /* XXX $> currently silently ignores failures */
- PERL_UNUSED_VAR(rc);
break;
}
case '(':
{
- int rc = 0;
+ /* XXX $( currently silently ignores failures */
const Gid_t new_gid = SvGID(sv);
PL_delaymagic_gid = new_gid;
if (PL_delaymagic) {
break; /* don't do magic till later */
}
#ifdef HAS_SETRGID
- rc = setrgid(new_gid);
+ PERL_UNUSED_RESULT(setrgid(new_gid));
#else
#ifdef HAS_SETREGID
- rc = setregid(new_gid, (Gid_t)-1);
+ PERL_UNUSED_RESULT(setregid(new_gid, (Gid_t)-1));
#else
#ifdef HAS_SETRESGID
- rc = setresgid(new_gid, (Gid_t)-1, (Gid_t) -1);
+ PERL_UNUSED_RESULT(setresgid(new_gid, (Gid_t)-1, (Gid_t) -1));
#else
if (new_gid == PerlProc_getegid()) /* special case $( = $) */
- rc = PerlProc_setgid(new_gid);
+ PERL_UNUSED_RESULT(PerlProc_setgid(new_gid));
else {
Perl_croak(aTHX_ "setrgid() not implemented");
}
#endif
#endif
#endif
- /* XXX $( currently silently ignores failures */
- PERL_UNUSED_VAR(rc);
break;
}
case ')':
{
- int rc = 0;
+ /* XXX $) currently silently ignores failures */
Gid_t new_egid;
#ifdef HAS_SETGROUPS
{
gary[i] = (Groups_t)Atol(p);
}
if (i)
- rc = setgroups(i, gary);
+ PERL_UNUSED_RESULT(setgroups(i, gary));
Safefree(gary);
}
#else /* HAS_SETGROUPS */
break; /* don't do magic till later */
}
#ifdef HAS_SETEGID
- rc = setegid(new_egid);
+ PERL_UNUSED_RESULT(setegid(new_egid));
#else
#ifdef HAS_SETREGID
- rc = setregid((Gid_t)-1, new_egid);
+ PERL_UNUSED_RESULT(setregid((Gid_t)-1, new_egid));
#else
#ifdef HAS_SETRESGID
- rc = setresgid((Gid_t)-1, new_egid, (Gid_t)-1);
+ PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1));
#else
if (new_egid == PerlProc_getgid()) /* special case $) = $( */
- rc = PerlProc_setgid(new_egid);
+ PERL_UNUSED_RESULT(PerlProc_setgid(new_egid));
else {
Perl_croak(aTHX_ "setegid() not implemented");
}
#endif
#endif
#endif
- /* XXX $) currently silently ignores failures */
- PERL_UNUSED_VAR(rc);
break;
}
case ':':
#define PERL_REVISION 5 /* age */
#define PERL_VERSION 20 /* epoch */
-#define PERL_SUBVERSION 0 /* generation */
+#define PERL_SUBVERSION 1 /* generation */
/* The following numbers describe the earliest compatible version of
Perl ("compatibility" here being defined as sufficient binary/API
/* Initial space prevents this variable from being inserted in config.sh */
# define LOCAL_PATCH_COUNT \
- ((int)(sizeof(local_patches)/sizeof(local_patches[0])-2))
+ ((int)(C_ARRAY_LENGTH(local_patches)-2))
/* the old terms of reference, add them only when explicitly included */
#define PATCHLEVEL PERL_VERSION
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_iov = vec;
- msg.msg_iovlen = sizeof(vec)/sizeof(vec[0]);
+ msg.msg_iovlen = C_ARRAY_LENGTH(vec);
vec[0].iov_base = (void*)⌖
vec[0].iov_len = sizeof(target);
# define PERL_UNUSED_CONTEXT
#endif
+/* gcc (-ansi) -pedantic doesn't allow gcc statement expressions,
+ * g++ allows them but seems to have problems with them
+ * (insane errors ensue).
+ * g++ does not give insane errors now (RMB 2008-01-30, gcc 4.2.2).
+ */
+#if defined(PERL_GCC_PEDANTIC) || \
+ (defined(__GNUC__) && defined(__cplusplus) && \
+ ((__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ < 2))))
+# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# define PERL_GCC_BRACE_GROUPS_FORBIDDEN
+# endif
+#endif
+
+/* Use PERL_UNUSED_RESULT() to suppress the warnings about unused results
+ * of function calls, e.g. PERL_UNUSED_RESULT(foo(a, b)).
+ *
+ * The main reason for this is that the combination of gcc -Wunused-result
+ * (part of -Wall) and the __attribute__((warn_unused_result)) cannot
+ * be silenced with casting to void. This causes trouble when the system
+ * header files use the attribute.
+ *
+ * Use PERL_UNUSED_RESULT sparingly, though, since usually the warning
+ * is there for a good reason: you might lose success/failure information,
+ * or leak resources, or changes in resources.
+ *
+ * But sometimes you just want to ignore the return value, e.g. on
+ * codepaths soon ending up in abort, or in "best effort" attempts,
+ * or in situations where there is no good way to handle failures.
+ *
+ * Sometimes PERL_UNUSED_RESULT might not be the most natural way:
+ * another possibility is that you can capture the return value
+ * and use PERL_UNUSED_VAR on that.
+ *
+ * The __typeof__() is used instead of typeof() since typeof() is not
+ * available under strict C89, and because of compilers masquerading
+ * as gcc (clang and icc), we want exactly the gcc extension
+ * __typeof__ and nothing else.
+ */
+#ifndef PERL_UNUSED_RESULT
+# if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT)
+# define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END
+# else
+# define PERL_UNUSED_RESULT(v) ((void)(v))
+# endif
+#endif
+
/* on gcc (and clang), specify that a warning should be temporarily
* ignored; e.g.
*
# endif
#endif
-/* gcc (-ansi) -pedantic doesn't allow gcc statement expressions,
- * g++ allows them but seems to have problems with them
- * (insane errors ensue).
- * g++ does not give insane errors now (RMB 2008-01-30, gcc 4.2.2).
- */
-#if defined(PERL_GCC_PEDANTIC) || \
- (defined(__GNUC__) && defined(__cplusplus) && \
- ((__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ < 2))))
-# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
-# define PERL_GCC_BRACE_GROUPS_FORBIDDEN
-# endif
-#endif
-
#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
# ifndef PERL_USE_GCC_BRACE_GROUPS
# define PERL_USE_GCC_BRACE_GROUPS
# ifdef PERL_GLOBAL_STRUCT
" PERL_GLOBAL_STRUCT"
# endif
+# ifdef PERL_GLOBAL_STRUCT_PRIVATE
+ " PERL_GLOBAL_STRUCT_PRIVATE"
+# endif
# ifdef PERL_IMPLICIT_CONTEXT
" PERL_IMPLICIT_CONTEXT"
# endif
#define PERLDB_SAVESRC_NOSUBS (PL_perldb && (PL_perldb & PERLDBf_SAVESRC_NOSUBS))
#define PERLDB_SAVESRC_INVALID (PL_perldb && (PL_perldb & PERLDBf_SAVESRC_INVALID))
+/*
+
+=head1 Locale-related functions and macros
+
+=for apidoc 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 macro
+to do so, before returning to Perl code.
+
+=cut
+*/
+
+/* Temporary for maint. Is a function in 5.21 */
+#define sync_locale() (new_ctype(setlocale(LC_CTYPE, NULL)), \
+ new_collate(setlocale(LC_COLLATE, NULL)), \
+ set_numeric_local(), \
+ new_numeric(setlocale(LC_NUMERIC, NULL)))
+
#ifdef USE_LOCALE_NUMERIC
/* Returns TRUE if the plain locale pragma without a parameter is in effect
}
}
if (PL_perlio_debug_fd > 0) {
- int rc = 0;
#ifdef USE_ITHREADS
const char * const s = CopFILE(PL_curcop);
/* Use fixed buffer as sv_catpvf etc. needs SVs */
char buffer[1024];
const STRLEN len1 = my_snprintf(buffer, sizeof(buffer), "%.40s:%" IVdf " ", s ? s : "(none)", (IV) CopLINE(PL_curcop));
const STRLEN len2 = my_vsnprintf(buffer + len1, sizeof(buffer) - len1, fmt, ap);
- rc = PerlLIO_write(PL_perlio_debug_fd, buffer, len1 + len2);
+ PERL_UNUSED_RESULT(PerlLIO_write(PL_perlio_debug_fd, buffer, len1 + len2));
#else
const char *s = CopFILE(PL_curcop);
STRLEN len;
Perl_sv_vcatpvf(aTHX_ sv, fmt, &ap);
s = SvPV_const(sv, len);
- rc = PerlLIO_write(PL_perlio_debug_fd, s, len);
+ PERL_UNUSED_RESULT(PerlLIO_write(PL_perlio_debug_fd, s, len));
SvREFCNT_dec(sv);
#endif
- /* silently ignore failures */
- PERL_UNUSED_VAR(rc);
}
va_end(ap);
}
}
if (!PerlIOValid(f)) {
if (!(f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg))) {
+ PerlLIO_close(fd);
return NULL;
}
}
PerlIOUnix_setfd(aTHX_ f, fd, os->oflags);
return f;
}
+ PerlLIO_close(fd);
}
return NULL;
}
}
return f;
}
+ PerlLIO_close(fd);
}
}
return NULL;
va_list apc;
Perl_va_copy(ap, apc);
sv = vnewSVpvf(fmt, &apc);
+ va_end(apc);
#else
sv = vnewSVpvf(fmt, &ap);
#endif
* 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.0" /**/
-#define PRIVLIB_EXP "/sys/lib/perl/5.20.0" /**/
+#define PRIVLIB "/sys/lib/perl/5.20.1" /**/
+#define PRIVLIB_EXP "/sys/lib/perl/5.20.1" /**/
/* 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.0/site_perl" /**/
-#define SITELIB_EXP "/sys/lib/perl/5.20.0/site_perl" /**/
-#define SITELIB_STEM "/sys/lib/perl/5.20.0/site_perl" /**/
+#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" /**/
/* Size_t_size:
* This symbol holds the size of a Size_t in bytes.
api_revision='5'
api_subversion='0'
api_version='20'
-api_versionstring='5.20.0'
+api_versionstring='5.20.1'
ar='ar'
-archlib='/sys/lib/perl5/5.20.0/386'
-archlibexp='/sys/lib/perl5/5.20.0/386'
+archlib='/sys/lib/perl5/5.20.1/386'
+archlibexp='/sys/lib/perl5/5.20.1/386'
archname64=''
archname='386'
archobjs=''
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='/sys/lib/perl/5.20.0/386'
+installarchlib='/sys/lib/perl/5.20.1/386'
installbin='/usr/bin'
installman1dir='/sys/man/1pub'
installman3dir='/sys/man/2pub'
installprefix='/usr'
installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.20.0'
+installprivlib='/sys/lib/perl/5.20.1'
installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.20.0/site_perl/386'
+installsitearch='/sys/lib/perl/5.20.1/site_perl/386'
installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.20.0/site_perl'
+installsitelib='/sys/lib/perl/5.20.1/site_perl'
installstyle='lib/perl5'
installusrbinperl='undef'
installvendorarch=''
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/sys/lib/perl/5.20.0'
-privlibexp='/sys/lib/perl/5.20.0'
+privlib='/sys/lib/perl/5.20.1'
+privlibexp='/sys/lib/perl/5.20.1'
procselfexe=''
prototype='define'
ptrsize='4'
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.0/site_perl/386'
+sitearch='/sys/lib/perl/5.20.1/site_perl/386'
sitearchexp='/sys/lib/perl/site_perl/386'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.20.0/site_perl'
-sitelib_stem='/sys/lib/perl/5.20.0/site_perl'
-sitelibexp='/sys/lib/perl/5.20.0/site_perl'
+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'
siteprefix='/usr'
siteprefixexp='/usr'
sizesize='4'
strerror_r_proto='0'
strings='/sys/include/ape/string.h'
submit=''
-subversion='0'
+subversion='1'
sysman='/sys/man/1pub'
tail=''
tar=''
vendorlibexp=''
vendorprefix=''
vendorprefixexp=''
-version='5.20.0'
-version_patchlevel_string='version 20 subversion 0'
+version='5.20.1'
+version_patchlevel_string='version 20 subversion 1'
versiononly='undef'
vi=''
xlibpth=''
config_argc=0
PERL_REVISION=5
PERL_VERSION=20
-PERL_SUBVERSION=0
+PERL_SUBVERSION=1
PERL_API_REVISION=5
PERL_API_VERSION=20
PERL_API_SUBVERSION=0
/roffitall
# generated
-/perl5200delta.pod
+/perl5201delta.pod
/perlapi.pod
/perlintern.pod
*.html
perlhist Perl history records
perldelta Perl changes since previous version
+ perl5200delta Perl changes in version 5.20.0
perl5182delta Perl changes in version 5.18.2
perl5181delta Perl changes in version 5.18.1
perl5180delta Perl changes in version 5.18.0
--- /dev/null
+=encoding utf8
+
+=head1 NAME
+
+perl5200delta - what is new for perl v5.20.0
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.18.0 release and the
+5.20.0 release.
+
+If you are upgrading from an earlier release such as 5.16.0, first read
+L<perl5180delta>, which describes differences between 5.16.0 and 5.18.0.
+
+=head1 Core Enhancements
+
+=head2 Experimental Subroutine signatures
+
+Declarative syntax to unwrap argument list into lexical variables.
+C<sub foo ($a,$b) {...}> checks the number of arguments and puts the
+arguments into lexical variables. Signatures are not equivalent to
+the existing idiom of C<sub foo { my($a,$b) = @_; ... }>. Signatures
+are only available by enabling a non-default feature, and generate
+warnings about being experimental. The syntactic clash with
+prototypes is managed by disabling the short prototype syntax when
+signatures are enabled.
+
+See L<perlsub/Signatures> for details.
+
+=head2 C<sub>s now take a C<prototype> attribute
+
+When declaring or defining a C<sub>, the prototype can now be specified inside
+of a C<prototype> attribute instead of in parens following the name.
+
+For example, C<sub foo($$){}> could be rewritten as
+C<sub foo : prototype($$){}>.
+
+=head2 More consistent prototype parsing
+
+Multiple semicolons in subroutine prototypes have long been tolerated and
+treated as a single semicolon. There was one case where this did not
+happen. A subroutine whose prototype begins with "*" or ";*" can affect
+whether a bareword is considered a method name or sub call. This now
+applies also to ";;;*".
+
+Whitespace has long been allowed inside subroutine prototypes, so
+C<sub( $ $ )> is equivalent to C<sub($$)>, but until now it was stripped
+when the subroutine was parsed. Hence, whitespace was I<not> allowed in
+prototypes set by C<Scalar::Util::set_prototype>. Now it is permitted,
+and the parser no longer strips whitespace. This means
+C<prototype &mysub> returns the original prototype, whitespace and all.
+
+=head2 C<rand> now uses a consistent random number generator
+
+Previously perl would use a platform specific random number generator, varying
+between the libc rand(), random() or drand48().
+
+This meant that the quality of perl's random numbers would vary from platform
+to platform, from the 15 bits of rand() on Windows to 48-bits on POSIX
+platforms such as Linux with drand48().
+
+Perl now uses its own internal drand48() implementation on all platforms. This
+does not make perl's C<rand> cryptographically secure. [perl #115928]
+
+=head2 New slice syntax
+
+The new C<%hash{...}> and C<%array[...]> syntax returns a list of key/value (or
+index/value) pairs. See L<perldata/"Key/Value Hash Slices">.
+
+=head2 Experimental Postfix Dereferencing
+
+When the C<postderef> feature is in effect, the following syntactical
+equivalencies are set up:
+
+ $sref->$*; # same as ${ $sref } # interpolates
+ $aref->@*; # same as @{ $aref } # interpolates
+ $href->%*; # same as %{ $href }
+ $cref->&*; # same as &{ $cref }
+ $gref->**; # same as *{ $gref }
+
+ $aref->$#*; # same as $#{ $aref }
+
+ $gref->*{ $slot }; # same as *{ $gref }{ $slot }
+
+ $aref->@[ ... ]; # same as @$aref[ ... ] # interpolates
+ $href->@{ ... }; # same as @$href{ ... } # interpolates
+ $aref->%[ ... ]; # same as %$aref[ ... ]
+ $href->%{ ... }; # same as %$href{ ... }
+
+Those marked as interpolating only interpolate if the associated
+C<postderef_qq> feature is also enabled. This feature is B<experimental> and
+will trigger C<experimental::postderef>-category warnings when used, unless
+they are suppressed.
+
+For more information, consult L<the Postfix Dereference Syntax section of
+perlref|perlref/Postfix Dereference Syntax>.
+
+=head2 Unicode 6.3 now supported
+
+Perl now supports and is shipped with Unicode 6.3 (though Perl may be
+recompiled with any previous Unicode release as well). A detailed list of
+Unicode 6.3 changes is at L<http://www.unicode.org/versions/Unicode6.3.0/>.
+
+=head2 New C<\p{Unicode}> regular expression pattern property
+
+This is a synonym for C<\p{Any}> and matches the set of Unicode-defined
+code points 0 - 0x10FFFF.
+
+=head2 Better 64-bit support
+
+On 64-bit platforms, the internal array functions now use 64-bit offsets,
+allowing Perl arrays to hold more than 2**31 elements, if you have the memory
+available.
+
+The regular expression engine now supports strings longer than 2**31
+characters. [perl #112790, #116907]
+
+The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and
+PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and
+parameters.
+
+=head2 C<S<use locale>> now works on UTF-8 locales
+
+Until this release, only single-byte locales, such as the ISO 8859
+series were supported. Now, the increasingly common multi-byte UTF-8
+locales are also supported. A UTF-8 locale is one in which the
+character set is Unicode and the encoding is UTF-8. The POSIX
+C<LC_CTYPE> category operations (case changing (like C<lc()>, C<"\U">),
+and character classification (C<\w>, C<\D>, C<qr/[[:punct:]]/>)) under
+such a locale work just as if not under locale, but instead as if under
+C<S<use feature 'unicode_strings'>>, except taint rules are followed.
+Sorting remains by code point order in this release. [perl #56820].
+
+=head2 C<S<use locale>> now compiles on systems without locale ability
+
+Previously doing this caused the program to not compile. Within its
+scope the program behaves as if in the "C" locale. Thus programs
+written for platforms that support locales can run on locale-less
+platforms without change. Attempts to change the locale away from the
+"C" locale will, of course, fail.
+
+=head2 More locale initialization fallback options
+
+If there was an error with locales during Perl start-up, it immediately
+gave up and tried to use the C<"C"> locale. Now it first tries using
+other locales given by the environment variables, as detailed in
+L<perllocale/ENVIRONMENT>. For example, if C<LC_ALL> and C<LANG> are
+both set, and using the C<LC_ALL> locale fails, Perl will now try the
+C<LANG> locale, and only if that fails, will it fall back to C<"C">. On
+Windows machines, Perl will try, ahead of using C<"C">, the system
+default locale if all the locales given by environment variables fail.
+
+=head2 C<-DL> runtime option now added for tracing locale setting
+
+This is designed for Perl core developers to aid in field debugging bugs
+regarding locales.
+
+=head2 B<-F> now implies B<-a> and B<-a> implies B<-n>
+
+Previously B<-F> without B<-a> was a no-op, and B<-a> without B<-n> or B<-p>
+was a no-op, with this change, if you supply B<-F> then both B<-a> and B<-n>
+are implied and if you supply B<-a> then B<-n> is implied.
+
+You can still use B<-p> for its extra behaviour. [perl #116190]
+
+=head2 $a and $b warnings exemption
+
+The special variables $a and $b, used in C<sort>, are now exempt from "used
+once" warnings, even where C<sort> is not used. This makes it easier for
+CPAN modules to provide functions using $a and $b for similar purposes.
+[perl #120462]
+
+=head1 Security
+
+=head2 Avoid possible read of free()d memory during parsing
+
+It was possible that free()d memory could be read during parsing in the unusual
+circumstance of the Perl program ending with a heredoc and the last line of the
+file on disk having no terminating newline character. This has now been fixed.
+
+=head1 Incompatible Changes
+
+=head2 C<do> can no longer be used to call subroutines
+
+The C<do SUBROUTINE(LIST)> form has resulted in a deprecation warning
+since Perl v5.0.0, and is now a syntax error.
+
+=head2 Quote-like escape changes
+
+The character after C<\c> in a double-quoted string ("..." or qq(...))
+or regular expression must now be a printable character and may not be
+C<{>.
+
+A literal C<{> after C<\B> or C<\b> is now fatal.
+
+These were deprecated in perl v5.14.0.
+
+=head2 Tainting happens under more circumstances; now conforms to documentation
+
+This affects regular expression matching and changing the case of a
+string (C<lc>, C<"\U">, I<etc>.) within the scope of C<use locale>.
+The result is now tainted based on the operation, no matter what the
+contents of the string were, as the documentation (L<perlsec>,
+L<perllocale/SECURITY>) indicates it should. Previously, for the case
+change operation, if the string contained no characters whose case
+change could be affected by the locale, the result would not be tainted.
+For example, the result of C<uc()> on an empty string or one containing
+only above-Latin1 code points is now tainted, and wasn't before. This
+leads to more consistent tainting results. Regular expression patterns
+taint their non-binary results (like C<$&>, C<$2>) if and only if the
+pattern contains elements whose matching depends on the current
+(potentially tainted) locale. Like the case changing functions, the
+actual contents of the string being matched now do not matter, whereas
+formerly it did. For example, if the pattern contains a C<\w>, the
+results will be tainted even if the match did not have to use that
+portion of the pattern to succeed or fail, because what a C<\w> matches
+depends on locale. However, for example, a C<.> in a pattern will not
+enable tainting, because the dot matches any single character, and what
+the current locale is doesn't change in any way what matches and what
+doesn't.
+
+=head2 C<\p{}>, C<\P{}> matching has changed for non-Unicode code
+points.
+
+C<\p{}> and C<\P{}> are defined by Unicode only on Unicode-defined code
+points (C<U+0000> through C<U+10FFFF>). Their behavior on matching
+these legal Unicode code points is unchanged, but there are changes for
+code points C<0x110000> and above. Previously, Perl treated the result
+of matching C<\p{}> and C<\P{}> against these as C<undef>, which
+translates into "false". For C<\P{}>, this was then complemented into
+"true". A warning was supposed to be raised when this happened.
+However, various optimizations could prevent the warning, and the
+results were often counter-intuitive, with both a match and its seeming
+complement being false. Now all non-Unicode code points are treated as
+typical unassigned Unicode code points. This generally is more
+Do-What-I-Mean. A warning is raised only if the results are arguably
+different from a strict Unicode approach, and from what Perl used to do.
+Code that needs to be strictly Unicode compliant can make this warning
+fatal, and then Perl always raises the warning.
+
+Details are in L<perlunicode/Beyond Unicode code points>.
+
+=head2 C<\p{All}> has been expanded to match all possible code points
+
+The Perl-defined regular expression pattern element C<\p{All}>, unused
+on CPAN, used to match just the Unicode code points; now it matches all
+possible code points; that is, it is equivalent to C<qr/./s>. Thus
+C<\p{All}> is no longer synonymous with C<\p{Any}>, which continues to
+match just the Unicode code points, as Unicode says it should.
+
+=head2 Data::Dumper's output may change
+
+Depending on the data structures dumped and the settings set for
+Data::Dumper, the dumped output may have changed from previous
+versions.
+
+If you have tests that depend on the exact output of Data::Dumper,
+they may fail.
+
+To avoid this problem in your code, test against the data structure
+from evaluating the dumped structure, instead of the dump itself.
+
+=head2 Locale decimal point character no longer leaks outside of S<C<use locale>> scope
+
+This is actually a bug fix, but some code has come to rely on the bug
+being present, so this change is listed here. The current locale that
+the program is running under is not supposed to be visible to Perl code
+except within the scope of a S<C<use locale>>. However, until now under
+certain circumstances, the character used for a decimal point (often a
+comma) leaked outside the scope. If your code is affected by this
+change, simply add a S<C<use locale>>.
+
+=head2 Assignments of Windows sockets error codes to $! now prefer F<errno.h> values over WSAGetLastError() values
+
+In previous versions of Perl, Windows sockets error codes as returned by
+WSAGetLastError() were assigned to $!, and some constants such as ECONNABORTED,
+not in F<errno.h> in VC++ (or the various Windows ports of gcc) were defined to
+corresponding WSAE* values to allow $! to be tested against the E* constants
+exported by L<Errno> and L<POSIX>.
+
+This worked well until VC++ 2010 and later, which introduced new E* constants
+with values E<gt> 100 into F<errno.h>, including some being (re)defined by perl
+to WSAE* values. That caused problems when linking XS code against other
+libraries which used the original definitions of F<errno.h> constants.
+
+To avoid this incompatibility, perl now maps WSAE* error codes to E* values
+where possible, and assigns those values to $!. The E* constants exported by
+L<Errno> and L<POSIX> are updated to match so that testing $! against them,
+wherever previously possible, will continue to work as expected, and all E*
+constants found in F<errno.h> are now exported from those modules with their
+original F<errno.h> values.
+
+In order to avoid breakage in existing Perl code which assigns WSAE* values to
+$!, perl now intercepts the assignment and performs the same mapping to E*
+values as it uses internally when assigning to $! itself.
+
+However, one backwards-incompatibility remains: existing Perl code which
+compares $! against the numeric values of the WSAE* error codes that were
+previously assigned to $! will now be broken in those cases where a
+corresponding E* value has been assigned instead. This is only an issue for
+those E* values E<lt> 100, which were always exported from L<Errno> and
+L<POSIX> with their original F<errno.h> values, and therefore could not be used
+for WSAE* error code tests (e.g. WSAEINVAL is 10022, but the corresponding
+EINVAL is 22). (E* values E<gt> 100, if present, were redefined to WSAE*
+values anyway, so compatibility can be achieved by using the E* constants,
+which will work both before and after this change, albeit using different
+numeric values under the hood.)
+
+=head2 Functions C<PerlIO_vsprintf> and C<PerlIO_sprintf> have been removed
+
+These two functions, undocumented, unused in CPAN, and problematic, have been
+removed.
+
+=head1 Deprecations
+
+=head2 The C</\C/> character class
+
+The C</\C/> regular expression character class is deprecated. From perl
+5.22 onwards it will generate a warning, and from perl 5.24 onwards it
+will be a regular expression compiler error. If you need to examine the
+individual bytes that make up a UTF8-encoded character, then use
+C<utf8::encode()> on the string (or a copy) first.
+
+=head2 Literal control characters in variable names
+
+This deprecation affects things like $\cT, where \cT is a literal control (such
+as a C<NAK> or C<NEGATIVE ACKNOWLEDGE> character) in
+the source code. Surprisingly, it appears that originally this was intended as
+the canonical way of accessing variables like $^T, with the caret form only
+being added as an alternative.
+
+The literal control form is being deprecated for two main reasons. It has what
+are likely unfixable bugs, such as $\cI not working as an alias for $^I, and
+their usage not being portable to non-ASCII platforms: While $^T will work
+everywhere, \cT is whitespace in EBCDIC. [perl #119123]
+
+=head2 References to non-integers and non-positive integers in C<$/>
+
+Setting C<$/> to a reference to zero or a reference to a negative integer is
+now deprecated, and will behave B<exactly> as though it was set to C<undef>.
+If you want slurp behavior set C<$/> to C<undef> explicitly.
+
+Setting C<$/> to a reference to a non integer is now forbidden and will
+throw an error. Perl has never documented what would happen in this
+context and while it used to behave the same as setting C<$/> to
+the address of the references in future it may behave differently, so we
+have forbidden this usage.
+
+=head2 Character matching routines in POSIX
+
+Use of any of these functions in the C<POSIX> module is now deprecated:
+C<isalnum>, C<isalpha>, C<iscntrl>, C<isdigit>, C<isgraph>, C<islower>,
+C<isprint>, C<ispunct>, C<isspace>, C<isupper>, and C<isxdigit>. The
+functions are buggy and don't work on UTF-8 encoded strings. See their
+entries in L<POSIX> for more information.
+
+A warning is raised on the first call to any of them from each place in
+the code that they are called. (Hence a repeated statement in a loop
+will raise just the one warning.)
+
+=head2 Interpreter-based threads are now I<discouraged>
+
+The "interpreter-based threads" provided by Perl are not the fast, lightweight
+system for multitasking that one might expect or hope for. Threads are
+implemented in a way that make them easy to misuse. Few people know how to
+use them correctly or will be able to provide help.
+
+The use of interpreter-based threads in perl is officially
+L<discouraged|perlpolicy/discouraged>.
+
+=head2 Module removals
+
+The following modules will be removed from the core distribution in a
+future release, and will at that time need to be installed from CPAN.
+Distributions on CPAN which require these modules will need to list them as
+prerequisites.
+
+The core versions of these modules will now issue C<"deprecated">-category
+warnings to alert you to this fact. To silence these deprecation warnings,
+install the modules in question from CPAN.
+
+Note that the planned removal of these modules from core does not reflect a
+judgement about the quality of the code and should not be taken as a suggestion
+that their use be halted. Their disinclusion from core primarily hinges on
+their necessity to bootstrapping a fully functional, CPAN-capable Perl
+installation, not on concerns over their design.
+
+=over
+
+=item L<CGI> and its associated CGI:: packages
+
+=item L<inc::latest>
+
+=item L<Package::Constants>
+
+=item L<Module::Build> and its associated Module::Build:: packages
+
+=back
+
+=head2 Utility removals
+
+The following utilities will be removed from the core distribution in a
+future release, and will at that time need to be installed from CPAN.
+
+=over 4
+
+=item L<find2perl>
+
+=item L<s2p>
+
+=item L<a2p>
+
+=back
+
+=head1 Performance Enhancements
+
+=over 4
+
+=item *
+
+Perl has a new copy-on-write mechanism that avoids the need to copy the
+internal string buffer when assigning from one scalar to another. This
+makes copying large strings appear much faster. Modifying one of the two
+(or more) strings after an assignment will force a copy internally. This
+makes it unnecessary to pass strings by reference for efficiency.
+
+This feature was already available in 5.18.0, but wasn't enabled by
+default. It is the default now, and so you no longer need build perl with
+the F<Configure> argument:
+
+ -Accflags=-DPERL_NEW_COPY_ON_WRITE
+
+It can be disabled (for now) in a perl build with:
+
+ -Accflags=-DPERL_NO_COW
+
+On some operating systems Perl can be compiled in such a way that any
+attempt to modify string buffers shared by multiple SVs will crash. This
+way XS authors can test that their modules handle copy-on-write scalars
+correctly. See L<perlguts/"Copy on Write"> for detail.
+
+=item *
+
+Perl has an optimizer for regular expression patterns. It analyzes the pattern
+to find things such as the minimum length a string has to be to match, etc. It
+now better handles code points that are above the Latin1 range.
+
+=item *
+
+Executing a regex that contains the C<^> anchor (or its variant under the
+C</m> flag) has been made much faster in several situations.
+
+=item *
+
+Precomputed hash values are now used in more places during method lookup.
+
+=item *
+
+Constant hash key lookups (C<$hash{key}> as opposed to C<$hash{$key}>) have
+long had the internal hash value computed at compile time, to speed up
+lookup. This optimisation has only now been applied to hash slices as
+well.
+
+=item *
+
+Combined C<and> and C<or> operators in void context, like those
+generated for C<< unless ($a && $b) >> and C<< if ($a || b) >> now
+short circuit directly to the end of the statement. [perl #120128]
+
+=item *
+
+In certain situations, when C<return> is the last statement in a subroutine's
+main scope, it will be optimized out. This means code like:
+
+ sub baz { return $cat; }
+
+will now behave like:
+
+ sub baz { $cat; }
+
+which is notably faster.
+
+[perl #120765]
+
+=item *
+
+Code like:
+
+ my $x; # or @x, %x
+ my $y;
+
+is now optimized to:
+
+ my ($x, $y);
+
+In combination with the L<padrange optimization introduced in
+v5.18.0|perl5180delta/Internal Changes>, this means longer uninitialized my
+variable statements are also optimized, so:
+
+ my $x; my @y; my %z;
+
+becomes:
+
+ my ($x, @y, %z);
+
+[perl #121077]
+
+=item *
+
+The creation of certain sorts of lists, including array and hash slices, is now
+faster.
+
+=item *
+
+The optimisation for arrays indexed with a small constant integer is now
+applied for integers in the range -128..127, rather than 0..255. This should
+speed up Perl code using expressions like C<$x[-1]>, at the expense of
+(presumably much rarer) code using expressions like C<$x[200]>.
+
+=item *
+
+The first iteration over a large hash (using C<keys> or C<each>) is now
+faster. This is achieved by preallocating the hash's internal iterator
+state, rather than lazily creating it when the hash is first iterated. (For
+small hashes, the iterator is still created only when first needed. The
+assumption is that small hashes are more likely to be used as objects, and
+therefore never allocated. For large hashes, that's less likely to be true,
+and the cost of allocating the iterator is swamped by the cost of allocating
+space for the hash itself.)
+
+=item *
+
+When doing a global regex match on a string that came from the C<readline>
+or C<E<lt>E<gt>> operator, the data is no longer copied unnecessarily.
+[perl #121259]
+
+=item *
+
+Dereferencing (as in C<$obj-E<gt>[0]> or C<$obj-E<gt>{k}>) is now faster
+when C<$obj> is an instance of a class that has overloaded methods, but
+doesn't overload any of the dereferencing methods C<@{}>, C<%{}>, and so on.
+
+=item *
+
+Perl's optimiser no longer skips optimising code that follows certain
+C<eval {}> expressions (including those with an apparent infinite loop).
+
+=item *
+
+The implementation now does a better job of avoiding meaningless work at
+runtime. Internal effect-free "null" operations (created as a side-effect of
+parsing Perl programs) are normally deleted during compilation. That
+deletion is now applied in some situations that weren't previously handled.
+
+=item *
+
+Perl now does less disk I/O when dealing with Unicode properties that cover
+up to three ranges of consecutive code points.
+
+=back
+
+=head1 Modules and Pragmata
+
+=head2 New Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<experimental> 0.007 has been added to the Perl core.
+
+=item *
+
+L<IO::Socket::IP> 0.29 has been added to the Perl core.
+
+=back
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Archive::Tar> has been upgraded from version 1.90 to 1.96.
+
+=item *
+
+L<arybase> has been upgraded from version 0.06 to 0.07.
+
+=item *
+
+L<Attribute::Handlers> has been upgraded from version 0.94 to 0.96.
+
+=item *
+
+L<attributes> has been upgraded from version 0.21 to 0.22.
+
+=item *
+
+L<autodie> has been upgraded from version 2.13 to 2.23.
+
+=item *
+
+L<AutoLoader> has been upgraded from version 5.73 to 5.74.
+
+=item *
+
+L<autouse> has been upgraded from version 1.07 to 1.08.
+
+=item *
+
+L<B> has been upgraded from version 1.42 to 1.48.
+
+=item *
+
+L<B::Concise> has been upgraded from version 0.95 to 0.992.
+
+=item *
+
+L<B::Debug> has been upgraded from version 1.18 to 1.19.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.20 to 1.26.
+
+=item *
+
+L<base> has been upgraded from version 2.18 to 2.22.
+
+=item *
+
+L<Benchmark> has been upgraded from version 1.15 to 1.18.
+
+=item *
+
+L<bignum> has been upgraded from version 0.33 to 0.37.
+
+=item *
+
+L<Carp> has been upgraded from version 1.29 to 1.3301.
+
+=item *
+
+L<CGI> has been upgraded from version 3.63 to 3.65.
+NOTE: L<CGI> is deprecated and may be removed from a future version of Perl.
+
+=item *
+
+L<charnames> has been upgraded from version 1.36 to 1.40.
+
+=item *
+
+L<Class::Struct> has been upgraded from version 0.64 to 0.65.
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from version 2.060 to 2.064.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from version 2.060 to 2.065.
+
+=item *
+
+L<Config::Perl::V> has been upgraded from version 0.17 to 0.20.
+
+=item *
+
+L<constant> has been upgraded from version 1.27 to 1.31.
+
+=item *
+
+L<CPAN> has been upgraded from version 2.00 to 2.05.
+
+=item *
+
+L<CPAN::Meta> has been upgraded from version 2.120921 to 2.140640.
+
+=item *
+
+L<CPAN::Meta::Requirements> has been upgraded from version 2.122 to 2.125.
+
+=item *
+
+L<CPAN::Meta::YAML> has been upgraded from version 0.008 to 0.012.
+
+=item *
+
+L<Data::Dumper> has been upgraded from version 2.145 to 2.151.
+
+=item *
+
+L<DB> has been upgraded from version 1.04 to 1.07.
+
+=item *
+
+L<DB_File> has been upgraded from version 1.827 to 1.831.
+
+=item *
+
+L<DBM_Filter> has been upgraded from version 0.05 to 0.06.
+
+=item *
+
+L<deprecate> has been upgraded from version 0.02 to 0.03.
+
+=item *
+
+L<Devel::Peek> has been upgraded from version 1.11 to 1.16.
+
+=item *
+
+L<Devel::PPPort> has been upgraded from version 3.20 to 3.21.
+
+=item *
+
+L<diagnostics> has been upgraded from version 1.31 to 1.34.
+
+=item *
+
+L<Digest::MD5> has been upgraded from version 2.52 to 2.53.
+
+=item *
+
+L<Digest::SHA> has been upgraded from version 5.84 to 5.88.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.18 to 1.25.
+
+=item *
+
+L<Encode> has been upgraded from version 2.49 to 2.60.
+
+=item *
+
+L<encoding> has been upgraded from version 2.6_01 to 2.12.
+
+=item *
+
+L<English> has been upgraded from version 1.06 to 1.09.
+
+=item *
+
+L<Errno> has been upgraded from version 1.18 to 1.20_03.
+
+=item *
+
+L<Exporter> has been upgraded from version 5.68 to 5.70.
+
+=item *
+
+L<ExtUtils::CBuilder> has been upgraded from version 0.280210 to 0.280216.
+
+=item *
+
+L<ExtUtils::Command> has been upgraded from version 1.17 to 1.18.
+
+=item *
+
+L<ExtUtils::Embed> has been upgraded from version 1.30 to 1.32.
+
+=item *
+
+L<ExtUtils::Install> has been upgraded from version 1.59 to 1.67.
+
+=item *
+
+L<ExtUtils::MakeMaker> has been upgraded from version 6.66 to 6.98.
+
+=item *
+
+L<ExtUtils::Miniperl> has been upgraded from version to 1.01.
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded from version 3.18 to 3.24.
+
+=item *
+
+L<ExtUtils::Typemaps> has been upgraded from version 3.19 to 3.24.
+
+=item *
+
+L<ExtUtils::XSSymSet> has been upgraded from version 1.2 to 1.3.
+
+=item *
+
+L<feature> has been upgraded from version 1.32 to 1.36.
+
+=item *
+
+L<fields> has been upgraded from version 2.16 to 2.17.
+
+=item *
+
+L<File::Basename> has been upgraded from version 2.84 to 2.85.
+
+=item *
+
+L<File::Copy> has been upgraded from version 2.26 to 2.29.
+
+=item *
+
+L<File::DosGlob> has been upgraded from version 1.10 to 1.12.
+
+=item *
+
+L<File::Fetch> has been upgraded from version 0.38 to 0.48.
+
+=item *
+
+L<File::Find> has been upgraded from version 1.23 to 1.27.
+
+=item *
+
+L<File::Glob> has been upgraded from version 1.20 to 1.23.
+
+=item *
+
+L<File::Spec> has been upgraded from version 3.40 to 3.47.
+
+=item *
+
+L<File::Temp> has been upgraded from version 0.23 to 0.2304.
+
+=item *
+
+L<FileCache> has been upgraded from version 1.08 to 1.09.
+
+=item *
+
+L<Filter::Simple> has been upgraded from version 0.89 to 0.91.
+
+=item *
+
+L<Filter::Util::Call> has been upgraded from version 1.45 to 1.49.
+
+=item *
+
+L<Getopt::Long> has been upgraded from version 2.39 to 2.42.
+
+=item *
+
+L<Getopt::Std> has been upgraded from version 1.07 to 1.10.
+
+=item *
+
+L<Hash::Util::FieldHash> has been upgraded from version 1.10 to 1.15.
+
+=item *
+
+L<HTTP::Tiny> has been upgraded from version 0.025 to 0.043.
+
+=item *
+
+L<I18N::Langinfo> has been upgraded from version 0.10 to 0.11.
+
+=item *
+
+L<I18N::LangTags> has been upgraded from version 0.39 to 0.40.
+
+=item *
+
+L<if> has been upgraded from version 0.0602 to 0.0603.
+
+=item *
+
+L<inc::latest> has been upgraded from version 0.4003 to 0.4205.
+NOTE: L<inc::latest> is deprecated and may be removed from a future version of Perl.
+
+=item *
+
+L<integer> has been upgraded from version 1.00 to 1.01.
+
+=item *
+
+L<IO> has been upgraded from version 1.28 to 1.31.
+
+=item *
+
+L<IO::Compress::Gzip> and friends have been upgraded from version 2.060 to
+2.064.
+
+=item *
+
+L<IPC::Cmd> has been upgraded from version 0.80 to 0.92.
+
+=item *
+
+L<IPC::Open3> has been upgraded from version 1.13 to 1.16.
+
+=item *
+
+L<IPC::SysV> has been upgraded from version 2.03 to 2.04.
+
+=item *
+
+L<JSON::PP> has been upgraded from version 2.27202 to 2.27203.
+
+=item *
+
+L<List::Util> has been upgraded from version 1.27 to 1.38.
+
+=item *
+
+L<locale> has been upgraded from version 1.02 to 1.03.
+
+=item *
+
+L<Locale::Codes> has been upgraded from version 3.25 to 3.30.
+
+=item *
+
+L<Locale::Maketext> has been upgraded from version 1.23 to 1.25.
+
+=item *
+
+L<Math::BigInt> has been upgraded from version 1.9991 to 1.9993.
+
+=item *
+
+L<Math::BigInt::FastCalc> has been upgraded from version 0.30 to 0.31.
+
+=item *
+
+L<Math::BigRat> has been upgraded from version 0.2604 to 0.2606.
+
+=item *
+
+L<MIME::Base64> has been upgraded from version 3.13 to 3.14.
+
+=item *
+
+L<Module::Build> has been upgraded from version 0.4003 to 0.4205.
+NOTE: L<Module::Build> is deprecated and may be removed from a future version of Perl.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 2.89 to 3.10.
+
+=item *
+
+L<Module::Load> has been upgraded from version 0.24 to 0.32.
+
+=item *
+
+L<Module::Load::Conditional> has been upgraded from version 0.54 to 0.62.
+
+=item *
+
+L<Module::Metadata> has been upgraded from version 1.000011 to 1.000019.
+
+=item *
+
+L<mro> has been upgraded from version 1.11 to 1.16.
+
+=item *
+
+L<Net::Ping> has been upgraded from version 2.41 to 2.43.
+
+=item *
+
+L<Opcode> has been upgraded from version 1.25 to 1.27.
+
+=item *
+
+L<Package::Constants> has been upgraded from version 0.02 to 0.04.
+NOTE: L<Package::Constants> is deprecated and may be removed from a future version of Perl.
+
+=item *
+
+L<Params::Check> has been upgraded from version 0.36 to 0.38.
+
+=item *
+
+L<parent> has been upgraded from version 0.225 to 0.228.
+
+=item *
+
+L<Parse::CPAN::Meta> has been upgraded from version 1.4404 to 1.4414.
+
+=item *
+
+L<Perl::OSType> has been upgraded from version 1.003 to 1.007.
+
+=item *
+
+L<perlfaq> has been upgraded from version 5.0150042 to 5.0150044.
+
+=item *
+
+L<PerlIO> has been upgraded from version 1.07 to 1.09.
+
+=item *
+
+L<PerlIO::encoding> has been upgraded from version 0.16 to 0.18.
+
+=item *
+
+L<PerlIO::scalar> has been upgraded from version 0.16 to 0.18.
+
+=item *
+
+L<PerlIO::via> has been upgraded from version 0.12 to 0.14.
+
+=item *
+
+L<Pod::Escapes> has been upgraded from version 1.04 to 1.06.
+
+=item *
+
+L<Pod::Functions> has been upgraded from version 1.06 to 1.08.
+
+=item *
+
+L<Pod::Html> has been upgraded from version 1.18 to 1.21.
+
+=item *
+
+L<Pod::Parser> has been upgraded from version 1.60 to 1.62.
+
+=item *
+
+L<Pod::Perldoc> has been upgraded from version 3.19 to 3.23.
+
+=item *
+
+L<Pod::Usage> has been upgraded from version 1.61 to 1.63.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.32 to 1.38_03.
+
+=item *
+
+L<re> has been upgraded from version 0.23 to 0.26.
+
+=item *
+
+L<Safe> has been upgraded from version 2.35 to 2.37.
+
+=item *
+
+L<Scalar::Util> has been upgraded from version 1.27 to 1.38.
+
+=item *
+
+L<SDBM_File> has been upgraded from version 1.09 to 1.11.
+
+=item *
+
+L<Socket> has been upgraded from version 2.009 to 2.013.
+
+=item *
+
+L<Storable> has been upgraded from version 2.41 to 2.49.
+
+=item *
+
+L<strict> has been upgraded from version 1.07 to 1.08.
+
+=item *
+
+L<subs> has been upgraded from version 1.01 to 1.02.
+
+=item *
+
+L<Sys::Hostname> has been upgraded from version 1.17 to 1.18.
+
+=item *
+
+L<Sys::Syslog> has been upgraded from version 0.32 to 0.33.
+
+=item *
+
+L<Term::Cap> has been upgraded from version 1.13 to 1.15.
+
+=item *
+
+L<Term::ReadLine> has been upgraded from version 1.12 to 1.14.
+
+=item *
+
+L<Test::Harness> has been upgraded from version 3.26 to 3.30.
+
+=item *
+
+L<Test::Simple> has been upgraded from version 0.98 to 1.001002.
+
+=item *
+
+L<Text::ParseWords> has been upgraded from version 3.28 to 3.29.
+
+=item *
+
+L<Text::Tabs> has been upgraded from version 2012.0818 to 2013.0523.
+
+=item *
+
+L<Text::Wrap> has been upgraded from version 2012.0818 to 2013.0523.
+
+=item *
+
+L<Thread> has been upgraded from version 3.02 to 3.04.
+
+=item *
+
+L<Thread::Queue> has been upgraded from version 3.02 to 3.05.
+
+=item *
+
+L<threads> has been upgraded from version 1.86 to 1.93.
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.43 to 1.46.
+
+=item *
+
+L<Tie::Array> has been upgraded from version 1.05 to 1.06.
+
+=item *
+
+L<Tie::File> has been upgraded from version 0.99 to 1.00.
+
+=item *
+
+L<Tie::Hash> has been upgraded from version 1.04 to 1.05.
+
+=item *
+
+L<Tie::Scalar> has been upgraded from version 1.02 to 1.03.
+
+=item *
+
+L<Tie::StdHandle> has been upgraded from version 4.3 to 4.4.
+
+=item *
+
+L<Time::HiRes> has been upgraded from version 1.9725 to 1.9726.
+
+=item *
+
+L<Time::Piece> has been upgraded from version 1.20_01 to 1.27.
+
+=item *
+
+L<Unicode::Collate> has been upgraded from version 0.97 to 1.04.
+
+=item *
+
+L<Unicode::Normalize> has been upgraded from version 1.16 to 1.17.
+
+=item *
+
+L<Unicode::UCD> has been upgraded from version 0.51 to 0.57.
+
+=item *
+
+L<utf8> has been upgraded from version 1.10 to 1.13.
+
+=item *
+
+L<version> has been upgraded from version 0.9902 to 0.9908.
+
+=item *
+
+L<vmsish> has been upgraded from version 1.03 to 1.04.
+
+=item *
+
+L<warnings> has been upgraded from version 1.18 to 1.23.
+
+=item *
+
+L<Win32> has been upgraded from version 0.47 to 0.49.
+
+=item *
+
+L<XS::Typemap> has been upgraded from version 0.10 to 0.13.
+
+=item *
+
+L<XSLoader> has been upgraded from version 0.16 to 0.17.
+
+=back
+
+=head1 Documentation
+
+=head2 New Documentation
+
+=head3 L<perlrepository>
+
+This document was removed (actually, renamed L<perlgit> and given a major
+overhaul) in Perl v5.14, causing Perl documentation websites to show the now
+out of date version in Perl v5.12 as the latest version. It has now been
+restored in stub form, directing readers to current information.
+
+=head2 Changes to Existing Documentation
+
+=head3 L<perldata>
+
+=over 4
+
+=item *
+
+New sections have been added to document the new index/value array slice and
+key/value hash slice syntax.
+
+=back
+
+=head3 L<perldebguts>
+
+=over 4
+
+=item *
+
+The C<DB::goto> and C<DB::lsub> debugger subroutines are now documented. [perl
+#77680]
+
+=back
+
+=head3 L<perlexperiment>
+
+=over
+
+=item *
+
+C<\s> matching C<\cK> is marked experimental.
+
+=item *
+
+ithreads were accepted in v5.8.0 (but are discouraged as of v5.20.0).
+
+=item *
+
+Long doubles are not considered experimental.
+
+=item *
+
+Code in regular expressions, regular expression backtracking verbs,
+and lvalue subroutines are no longer listed as experimental. (This
+also affects L<perlre> and L<perlsub>.)
+
+=back
+
+=head3 L<perlfunc>
+
+=over
+
+=item *
+
+C<chop> and C<chomp> now note that they can reset the hash iterator.
+
+=item *
+
+C<exec>'s handling of arguments is now more clearly documented.
+
+=item *
+
+C<eval EXPR> now has caveats about expanding floating point numbers in some
+locales.
+
+=item *
+
+C<goto EXPR> is now documented to handle an expression that evalutes to a
+code reference as if it was C<goto &$coderef>. This behavior is at least ten
+years old.
+
+=item *
+
+Since Perl v5.10, it has been possible for subroutines in C<@INC> to return
+a reference to a scalar holding initial source code to prepend to the file.
+This is now documented.
+
+=item *
+
+The documentation of C<ref> has been updated to recommend the use of
+C<blessed>, C<isa> and C<reftype> when dealing with references to blessed
+objects.
+
+=back
+
+=head3 L<perlguts>
+
+=over 4
+
+=item *
+
+Numerous minor changes have been made to reflect changes made to the perl
+internals in this release.
+
+=item *
+
+New sections on L<Read-Only Values|perlguts/"Read-Only Values"> and
+L<Copy on Write|perlguts/"Copy on Write"> have been added.
+
+=back
+
+=head3 L<perlhack>
+
+=over 4
+
+=item *
+
+The L<Super Quick Patch Guide|perlhack/SUPER QUICK PATCH GUIDE> section has
+been updated.
+
+=back
+
+=head3 L<perlhacktips>
+
+=over 4
+
+=item *
+
+The documentation has been updated to include some more examples of C<gdb>
+usage.
+
+=back
+
+=head3 L<perllexwarn>
+
+=over 4
+
+=item *
+
+The L<perllexwarn> documentation used to describe the hierarchy of warning
+categories understood by the L<warnings> pragma. That description has now
+been moved to the L<warnings> documentation itself, leaving L<perllexwarn>
+as a stub that points to it. This change consolidates all documentation for
+lexical warnings in a single place.
+
+=back
+
+=head3 L<perllocale>
+
+=over
+
+=item *
+
+The documentation now mentions F<fc()> and C<\F>, and includes many
+clarifications and corrections in general.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+The language design of Perl has always called for monomorphic operators.
+This is now mentioned explicitly.
+
+=back
+
+=head3 L<perlopentut>
+
+=over 4
+
+=item *
+
+The C<open> tutorial has been completely rewritten by Tom Christiansen, and now
+focuses on covering only the basics, rather than providing a comprehensive
+reference to all things openable. This rewrite came as the result of a
+vigorous discussion on perl5-porters kicked off by a set of improvements
+written by Alexander Hartmaier to the existing L<perlopentut>. A "more than
+you ever wanted to know about C<open>" document may follow in subsequent
+versions of perl.
+
+=back
+
+=head3 L<perlre>
+
+=over 4
+
+=item *
+
+The fact that the regexp engine makes no effort to call (?{}) and (??{})
+constructs any specified number of times (although it will basically DWIM
+in case of a successful match) has been documented.
+
+=item *
+
+The C</r> modifier (for non-destructive substitution) is now documented. [perl
+#119151]
+
+=item *
+
+The documentation for C</x> and C<(?# comment)> has been expanded and clarified.
+
+=back
+
+=head3 L<perlreguts>
+
+=over 4
+
+=item *
+
+The documentation has been updated in the light of recent changes to
+F<regcomp.c>.
+
+=back
+
+=head3 L<perlsub>
+
+=over 4
+
+=item *
+
+The need to predeclare recursive functions with prototypes in order for the
+prototype to be honoured in the recursive call is now documented. [perl #2726]
+
+=item *
+
+A list of subroutine names used by the perl implementation is now included.
+[perl #77680]
+
+=back
+
+=head3 L<perltrap>
+
+=over 4
+
+=item *
+
+There is now a L<JavaScript|perltrap/JavaScript Traps> section.
+
+=back
+
+=head3 L<perlunicode>
+
+=over 4
+
+=item *
+
+The documentation has been updated to reflect C<Bidi_Class> changes in
+Unicode 6.3.
+
+=back
+
+=head3 L<perlvar>
+
+=over 4
+
+=item *
+
+A new section explaining the performance issues of $`, $& and $', including
+workarounds and changes in different versions of Perl, has been added.
+
+=item *
+
+Three L<English> variable names which have long been documented but do not
+actually exist have been removed from the documentation. These were
+C<$OLD_PERL_VERSION>, C<$OFMT>, and C<$ARRAY_BASE>.
+
+=back
+
+=head3 L<perlxs>
+
+=over 4
+
+=item *
+
+Several problems in the C<MY_CXT> example have been fixed.
+
+=back
+
+=head1 Diagnostics
+
+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 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<delete argument is indexE<sol>value array slice, use array slice|perldiag/"delete argument is index/value array slice, use array slice">
+
+(F) You used index/value array slice syntax (C<%array[...]>) as the argument to
+C<delete>. You probably meant C<@array[...]> with an @ symbol instead.
+
+=item *
+
+L<delete argument is keyE<sol>value hash slice, use hash slice|perldiag/"delete argument is key/value hash slice, use hash slice">
+
+(F) You used key/value hash slice syntax (C<%hash{...}>) as the argument to
+C<delete>. You probably meant C<@hash{...}> with an @ symbol instead.
+
+=item *
+
+L<Magical list constants are not supported|perldiag/"Magical list constants are
+not supported">
+
+(F) You assigned a magical array to a stash element, and then tried to use the
+subroutine from the same slot. You are asking Perl to do something it cannot
+do, details subject to change between Perl versions.
+
+=item *
+
+Added L<Setting $E<sol> to a %s reference is forbidden|perldiag/"Setting $E<sol> to %s reference is forbidden">
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+L<%s on reference is experimental|perldiag/"push on reference is experimental">:
+
+The "auto-deref" feature is experimental.
+
+Starting in v5.14.0, it was possible to use push, pop, keys, and other
+built-in functions not only on aggregate types, but on references to
+them. The feature was not deployed to its original intended
+specification, and now may become redundant to postfix dereferencing.
+It has always been categorized as an experimental feature, and in
+v5.20.0 is carries a warning as such.
+
+Warnings will now be issued at compile time when these operations are
+detected.
+
+ no if $] >= 5.01908, warnings => "experimental::autoderef";
+
+Consider, though, replacing the use of these features, as they may
+change behavior again before becoming stable.
+
+=item *
+
+L<A sequence of multiple spaces in a charnames alias definition is deprecated|perldiag/"A sequence of multiple spaces in a charnames alias definition is deprecated">
+
+L<Trailing white-space in a charnames alias definition is deprecated|perldiag/"Trailing white-space in a charnames alias definition is deprecated">
+
+These two deprecation warnings involving C<\N{...}> were incorrectly
+implemented. They did not warn by default (now they do) and could not be
+made fatal via C<< use warnings FATAL => 'deprecated' >> (now they can).
+
+=item *
+
+L<Attribute prototype(%s) discards earlier prototype attribute in same sub|perldiag/"Attribute prototype(%s) discards earlier prototype attribute in same sub">
+
+(W misc) A sub was declared as C<sub foo : prototype(A) : prototype(B) {}>, for
+example. Since each sub can only have one prototype, the earlier
+declaration(s) are discarded while the last one is applied.
+
+=item *
+
+L<Invalid \0 character in %s for %s: %s\0%s|perldiag/"Invalid \0 character in %s for %s: %s\0%s">
+
+(W syscalls) Embedded \0 characters in pathnames or other system call arguments
+produce a warning as of 5.20. The parts after the \0 were formerly ignored by
+system calls.
+
+=item *
+
+L<Matched non-Unicode code point 0x%X against Unicode property; may not be portable|perldiag/"Matched non-Unicode code point 0x%X against Unicode property; may not be portable">.
+
+This replaces the message "Code point 0x%X is not Unicode, all \p{} matches
+fail; all \P{} matches succeed".
+
+=item *
+
+L<Missing ']' in prototype for %s : %s|perldiag/"Missing ']' in prototype for %s : %s">
+
+(W illegalproto) A grouping was started with C<[> but never closed with C<]>.
+
+=item *
+
+L<Possible precedence issue with control flow operator|perldiag/"Possible precedence issue with control flow operator">
+
+(W syntax) There is a possible problem with the mixing of a control flow
+operator (e.g. C<return>) and a low-precedence operator like C<or>. Consider:
+
+ sub { return $a or $b; }
+
+This is parsed as:
+
+ sub { (return $a) or $b; }
+
+Which is effectively just:
+
+ sub { return $a; }
+
+Either use parentheses or the high-precedence variant of the operator.
+
+Note this may be also triggered for constructs like:
+
+ sub { 1 if die; }
+
+=item *
+
+L<Postfix dereference is experimental|perldiag/"Postfix dereference is experimental">
+
+(S experimental::postderef) This warning is emitted if you use the experimental
+postfix dereference syntax. Simply suppress the warning if you want to use the
+feature, but know that in doing so you are taking the risk of using an
+experimental feature which may change or be removed in a future Perl version:
+
+ no warnings "experimental::postderef";
+ use feature "postderef", "postderef_qq";
+ $ref->$*;
+ $aref->@*;
+ $aref->@[@indices];
+ ... etc ...
+
+=item *
+
+L<Prototype '%s' overridden by attribute 'prototype(%s)' in %s|perldiag/"Prototype '%s' overridden by attribute 'prototype(%s)' in %s">
+
+(W prototype) A prototype was declared in both the parentheses after the sub
+name and via the prototype attribute. The prototype in parentheses is useless,
+since it will be replaced by the prototype from the attribute before it's ever
+used.
+
+=item *
+
+L<Scalar value @%s[%s] better written as $%s[%s]|perldiag/"Scalar value @%s[%s] better written as $%s[%s]">
+
+(W syntax) In scalar context, you've used an array index/value slice (indicated
+by %) to select a single element of an array. Generally it's better to ask for
+a scalar value (indicated by $). The difference is that C<$foo[&bar]> always
+behaves like a scalar, both in the value it returns and when evaluating its
+argument, while C<%foo[&bar]> provides a list context to its subscript, which
+can do weird things if you're expecting only one subscript. When called in
+list context, it also returns the index (what C<&bar> returns) in addition to
+the value.
+
+=item *
+
+L<Scalar value @%s{%s} better written as $%s{%s}|perldiag/"Scalar value @%s{%s} better written as $%s{%s}">
+
+(W syntax) In scalar context, you've used a hash key/value slice (indicated by
+%) to select a single element of a hash. Generally it's better to ask for a
+scalar value (indicated by $). The difference is that C<$foo{&bar}> always
+behaves like a scalar, both in the value it returns and when evaluating its
+argument, while C<@foo{&bar}> and provides a list context to its subscript,
+which can do weird things if you're expecting only one subscript. When called
+in list context, it also returns the key in addition to the value.
+
+=item *
+
+L<Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef|perldiag/"Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef">
+
+=item *
+
+L<Unexpected exit %u|perldiag/"Unexpected exit %u">
+
+(S) exit() was called or the script otherwise finished gracefully when
+C<PERL_EXIT_WARN> was set in C<PL_exit_flags>.
+
+=item *
+
+L<Unexpected exit failure %d|perldiag/"Unexpected exit failure %d">
+
+(S) An uncaught die() was called when C<PERL_EXIT_WARN> was set in
+C<PL_exit_flags>.
+
+=item *
+
+L<Use of literal control characters in variable names is deprecated|perldiag/"Use of literal control characters in variable names is deprecated">
+
+(D deprecated) Using literal control characters in the source to refer to the
+^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated. This only
+affects code like $\cT, where \cT is a control (like a C<SOH>) in the
+source code: ${"\cT"} and $^T remain valid.
+
+=item *
+
+L<Useless use of greediness modifier|perldiag/"Useless use of greediness modifier '%c' in regex; marked by <-- HERE in m/%s/">
+
+This fixes [Perl #42957].
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+Warnings and errors from the regexp engine are now UTF-8 clean.
+
+=item *
+
+The "Unknown switch condition" error message has some slight changes. This
+error triggers when there is an unknown condition in a C<(?(foo))> conditional.
+The error message used to read:
+
+ Unknown switch condition (?(%s in regex;
+
+But what %s could be was mostly up to luck. For C<(?(foobar))>, you might have
+seen "fo" or "f". For Unicode characters, you would generally get a corrupted
+string. The message has been changed to read:
+
+ Unknown switch condition (?(...)) in regex;
+
+Additionally, the C<'E<lt>-- HERE'> marker in the error will now point to the
+correct spot in the regex.
+
+=item *
+
+The "%s "\x%X" does not map to Unicode" warning is now correctly listed as a
+severe warning rather than as a fatal error.
+
+=item *
+
+Under rare circumstances, one could get a "Can't coerce readonly REF to
+string" instead of the customary "Modification of a read-only value". This
+alternate error message has been removed.
+
+=item *
+
+"Ambiguous use of * resolved as operator *": This and similar warnings
+about "%" and "&" used to occur in some circumstances where there was no
+operator of the type cited, so the warning was completely wrong. This has
+been fixed [perl #117535, #76910].
+
+=item *
+
+Warnings about malformed subroutine prototypes are now more consistent in
+how the prototypes are rendered. Some of these warnings would truncate
+prototypes containing nulls. In other cases one warning would suppress
+another. The warning about illegal characters in prototypes no longer says
+"after '_'" if the bad character came before the underscore.
+
+=item *
+
+L<Perl folding rules are not up-to-date for 0x%X; please use the perlbug
+utility to report; in regex; marked by <-- HERE in
+mE<sol>%sE<sol>|perldiag/"Perl folding rules are not up-to-date for 0x%X;
+please use the perlbug utility to report; in regex; marked by <-- HERE in
+m/%s/">
+
+This message is now only in the regexp category, and not in the deprecated
+category. It is still a default (i.e., severe) warning [perl #89648].
+
+=item *
+
+L<%%s[%s] in scalar context better written as $%s[%s]|perldiag/"%%s[%s] in scalar context better written as $%s[%s]">
+
+This warning now occurs for any C<%array[$index]> or C<%hash{key}> known to
+be in scalar context at compile time. Previously it was worded "Scalar
+value %%s[%s] better written as $%s[%s]".
+
+=item *
+
+L<Switch condition not recognized in regex; marked by <-- HERE in mE<sol>%sE<sol>|perldiag/"Switch condition not recognized in regex; marked by <-- HERE in m/%s/">:
+
+The description for this diagnostic has been extended to cover all cases where the warning may occur.
+Issues with the positioning of the arrow indicator have also been resolved.
+
+=item *
+
+The error messages for C<my($a?$b$c)> and C<my(do{})> now mention "conditional
+expression" and "do block", respectively, instead of reading 'Can't declare
+null operation in "my"'.
+
+=item *
+
+When C<use re "debug"> executes a regex containing a backreference, the
+debugging output now shows what string is being matched.
+
+=item *
+
+The now fatal error message C<Character following "\c" must be ASCII> has been
+reworded as C<Character following "\c" must be printable ASCII> to emphasize
+that in C<\cI<X>>, I<X> must be a I<printable (non-control)> ASCII character.
+
+=back
+
+=head1 Utility Changes
+
+=head3 L<a2p>
+
+=over 4
+
+=item *
+
+A possible crash from an off-by-one error when trying to access before the
+beginning of a buffer has been fixed. [perl #120244]
+
+=back
+
+=head3 F<bisect.pl>
+
+The git bisection tool F<Porting/bisect.pl> has had many enhancements.
+
+It is provided as part of the source distribution but not installed because
+it is not self-contained as it relies on being run from within a git
+checkout. Note also that it makes no attempt to fix tests, correct runtime
+bugs or make something useful to install - its purpose is to make minimal
+changes to get any historical revision of interest to build and run as close
+as possible to "as-was", and thereby make C<git bisect> easy to use.
+
+=over 4
+
+=item *
+
+Can optionally run the test case with a timeout.
+
+=item *
+
+Can now run in-place in a clean git checkout.
+
+=item *
+
+Can run the test case under C<valgrind>.
+
+=item *
+
+Can apply user supplied patches and fixes to the source checkout before
+building.
+
+=item *
+
+Now has fixups to enable building several more historical ranges of bleadperl,
+which can be useful for pinpointing the origins of bugs or behaviour changes.
+
+=back
+
+=head3 L<find2perl>
+
+=over 4
+
+=item *
+
+L<find2perl> now handles C<?> wildcards correctly. [perl #113054]
+
+=back
+
+=head3 L<perlbug>
+
+=over 4
+
+=item *
+
+F<perlbug> now has a C<-p> option for attaching patches with a bug report.
+
+=item *
+
+L<perlbug> has been modified to supply the report template with CRLF line
+endings on Windows.
+[L<perl #121277|https://rt.perl.org/Public/Bug/Display.html?id=121277>]
+
+=item *
+
+L<perlbug> now makes as few assumptions as possible about the encoding of the
+report. This will likely change in the future to assume UTF-8 by default but
+allow a user override.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+The F<Makefile.PL> for L<SDBM_File> now generates a better F<Makefile>, which
+avoids a race condition during parallel makes, which could cause the build to
+fail. This is the last known parallel make problem (on *nix platforms), and
+therefore we believe that a parallel make should now always be error free.
+
+=item *
+
+F<installperl> and F<installman>'s option handling has been refactored to use
+L<Getopt::Long>. Both are used by the F<Makefile> C<install> targets, and
+are not installed, so these changes are only likely to affect custom
+installation scripts.
+
+=over 4
+
+=item *
+
+Single letter options now also have long names.
+
+=item *
+
+Invalid options are now rejected.
+
+=item *
+
+Command line arguments that are not options are now rejected.
+
+=item *
+
+Each now has a C<--help> option to display the usage message.
+
+=back
+
+The behaviour for all valid documented invocations is unchanged.
+
+=item *
+
+Where possible, the build now avoids recursive invocations of F<make> when
+building pure-Perl extensions, without removing any parallelism from the
+build. Currently around 80 extensions can be processed directly by the
+F<make_ext.pl> tool, meaning that 80 invocations of F<make> and 160
+invocations of F<miniperl> are no longer made.
+
+=item *
+
+The build system now works correctly when compiling under GCC or Clang with
+link-time optimization enabled (the C<-flto> option). [perl #113022]
+
+=item *
+
+Distinct library basenames with C<d_libname_unique>.
+
+When compiling perl with this option, the library files for XS modules are
+named something "unique" -- for example, Hash/Util/Util.so becomes
+Hash/Util/PL_Hash__Util.so. This behavior is similar to what currently
+happens on VMS, and serves as groundwork for the Android port.
+
+=item *
+
+C<sysroot> option to indicate the logical root directory under gcc and clang.
+
+When building with this option set, both Configure and the compilers search
+for all headers and libraries under this new sysroot, instead of /.
+
+This is a huge time saver if cross-compiling, but can also help
+on native builds if your toolchain's files have non-standard locations.
+
+=item *
+
+The cross-compilation model has been renovated.
+There's several new options, and some backwards-incompatible changes:
+
+We now build binaries for miniperl and generate_uudmap to be used on the host,
+rather than running every miniperl call on the target; this means that, short
+of 'make test', we no longer need access to the target system once Configure is
+done. You can provide already-built binaries through the C<hostperl> and
+C<hostgenerate> options to Configure.
+
+Additionally, if targeting an EBCDIC platform from an ASCII host,
+or viceversa, you'll need to run Configure with C<-Uhostgenerate>, to
+indicate that generate_uudmap should be run on the target.
+
+Finally, there's also a way of having Configure end early, right after
+building the host binaries, by cross-compiling without specifying a
+C<targethost>.
+
+The incompatible changes include no longer using xconfig.h, xlib, or
+Cross.pm, so canned config files and Makefiles will have to be updated.
+
+=item *
+
+Related to the above, there is now a way of specifying the location of sh
+(or equivalent) on the target system: C<targetsh>.
+
+For example, Android has its sh in /system/bin/sh, so if cross-compiling
+from a more normal Unixy system with sh in /bin/sh, "targetsh" would end
+up as /system/bin/sh, and "sh" as /bin/sh.
+
+=item *
+
+By default, B<gcc> 4.9 does some optimizations that break perl. The B<-fwrapv>
+option disables those optimizations (and probably others), so for B<gcc> 4.3
+and later (since the there might be similar problems lurking on older versions
+too, but B<-fwrapv> was broken before 4.3, and the optimizations probably won't
+go away), F<Configure> now adds B<-fwrapv> unless the user requests
+B<-fno-wrapv>, which disables B<-fwrapv>, or B<-fsanitize=undefined>, which
+turns the overflows B<-fwrapv> ignores into runtime errors.
+[L<perl #121505|https://rt.perl.org/Public/Bug/Display.html?id=121505>]
+
+=back
+
+=head1 Testing
+
+=over 4
+
+=item *
+
+The C<test.valgrind> make target now allows tests to be run in parallel.
+This target allows Perl's test suite to be run under Valgrind, which detects
+certain sorts of C programming errors, though at significant cost in running
+time. On suitable hardware, allowing parallel execution claws back a lot of
+that additional cost. [perl #121431]
+
+=item *
+
+Various tests in F<t/porting/> are no longer skipped when the perl
+F<.git> directory is outside the perl tree and pointed to by
+C<$GIT_DIR>. [perl #120505]
+
+=item *
+
+The test suite no longer fails when the user's interactive shell maintains a
+C<$PWD> environment variable, but the F</bin/sh> used for running tests
+doesn't.
+
+=back
+
+=head1 Platform Support
+
+=head2 New Platforms
+
+=over 4
+
+=item Android
+
+Perl can now be built for Android, either natively or through
+cross-compilation, for all three currently available architectures (ARM,
+MIPS, and x86), on a wide range of versions.
+
+=item Bitrig
+
+Compile support has been added for Bitrig, a fork of OpenBSD.
+
+=item FreeMiNT
+
+Support has been added for FreeMiNT, a free open-source OS for the Atari ST
+system and its successors, based on the original MiNT that was officially
+adopted by Atari.
+
+=item Synology
+
+Synology ships its NAS boxes with a lean Linux distribution (DSM) on relative
+cheap CPU's (like the Marvell Kirkwood mv6282 - ARMv5tel or Freescale QorIQ
+P1022 ppc - e500v2) not meant for workstations or development. These boxes
+should build now. The basic problems are the non-standard location for tools.
+
+=back
+
+=head2 Discontinued Platforms
+
+=over 4
+
+=item C<sfio>
+
+Code related to supporting the C<sfio> I/O system has been removed.
+
+Perl 5.004 added support to use the native API of C<sfio>, AT&T's Safe/Fast
+I/O library. This code still built with v5.8.0, albeit with many regression
+tests failing, but was inadvertently broken before the v5.8.1 release,
+meaning that it has not worked on any version of Perl released since then.
+In over a decade we have received no bug reports about this, hence it is clear
+that no-one is using this functionality on any version of Perl that is still
+supported to any degree.
+
+=item AT&T 3b1
+
+Configure support for the 3b1, also known as the AT&T Unix PC (and the similar
+AT&T 7300), has been removed.
+
+=item DG/UX
+
+DG/UX was a Unix sold by Data General. The last release was in April 2001.
+It only runs on Data General's own hardware.
+
+=item EBCDIC
+
+In the absence of a regular source of smoke reports, code intended to support
+native EBCDIC platforms will be removed from perl before 5.22.0.
+
+=back
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item Cygwin
+
+=over 4
+
+=item *
+
+recv() on a connected handle would populate the returned sender
+address with whatever happened to be in the working buffer. recv()
+now uses a workaround similar to the Win32 recv() wrapper and returns
+an empty string when recvfrom(2) doesn't modify the supplied address
+length. [perl #118843]
+
+=item *
+
+Fixed a build error in cygwin.c on Cygwin 1.7.28.
+
+Tests now handle the errors that occur when C<cygserver> isn't
+running.
+
+=back
+
+=item GNU/Hurd
+
+The BSD compatibility library C<libbsd> is no longer required for builds.
+
+=item Linux
+
+The hints file now looks for C<libgdbm_compat> only if C<libgdbm> itself is
+also wanted. The former is never useful without the latter, and in some
+circumstances, including it could actually prevent building.
+
+=item Mac OS
+
+The build system now honors an C<ld> setting supplied by the user running
+F<Configure>.
+
+=item MidnightBSD
+
+C<objformat> was removed from version 0.4-RELEASE of MidnightBSD and had been
+deprecated on earlier versions. This caused the build environment to be
+erroneously configured for C<a.out> rather than C<elf>. This has been now
+been corrected.
+
+=item Mixed-endian platforms
+
+The code supporting C<pack> and C<unpack> operations on mixed endian
+platforms has been removed. We believe that Perl has long been unable to
+build on mixed endian architectures (such as PDP-11s), so we don't think
+that this change will affect any platforms which were able to build v5.18.0.
+
+=item VMS
+
+=over 4
+
+=item *
+
+The C<PERL_ENV_TABLES> feature to control the population of %ENV at perl
+start-up was broken in Perl 5.16.0 but has now been fixed.
+
+=item *
+
+Skip access checks on remotes in opendir(). [perl #121002]
+
+=item *
+
+A check for glob metacharacters in a path returned by the
+L<C<glob()>|perlfunc/glob> operator has been replaced with a check for VMS
+wildcard characters. This saves a significant number of unnecessary
+L<C<lstat()>|perlfunc/lstat> calls such that some simple glob operations become
+60-80% faster.
+
+=back
+
+=item Win32
+
+=over 4
+
+=item *
+
+C<rename> and C<link> on Win32 now set $! to ENOSPC and EDQUOT when
+appropriate. [perl #119857]
+
+=item *
+
+The BUILD_STATIC and ALL_STATIC makefile options for linking some or (nearly)
+all extensions statically (into perl520.dll, and into a separate
+perl-static.exe too) were broken for MinGW builds. This has now been fixed.
+
+The ALL_STATIC option has also been improved to include the Encode and Win32
+extensions (for both VC++ and MinGW builds).
+
+=item *
+
+Support for building with Visual C++ 2013 has been added. There are currently
+two possible test failures (see L<perlwin32/"Testing Perl on Windows">) which
+will hopefully be resolved soon.
+
+=item *
+
+Experimental support for building with Intel C++ Compiler has been added. The
+nmake makefile (win32/Makefile) and the dmake makefile (win32/makefile.mk) can
+be used. A "nmake test" will not pass at this time due to F<cpan/CGI/t/url.t>.
+
+=item *
+
+Killing a process tree with L<perlfunc/kill> and a negative signal, was broken
+starting in 5.18.0. In this bug, C<kill> always returned 0 for a negative
+signal even for valid PIDs, and no processes were terminated. This has been
+fixed [perl #121230].
+
+=item *
+
+The time taken to build perl on Windows has been reduced quite significantly
+(time savings in the region of 30-40% are typically seen) by reducing the
+number of, usually failing, I/O calls for each L<C<require()>|perlfunc/require>
+(for B<miniperl.exe> only).
+[L<perl #121119|https://rt.perl.org/Public/Bug/Display.html?id=121119>]
+
+=item *
+
+About 15 minutes of idle sleeping was removed from running C<make test> due to
+a bug in which the timeout monitor used for tests could not be cancelled once
+the test completes, and the full timeout period elapsed before running the next
+test file.
+[L<perl #121395|https://rt.perl.org/Public/Bug/Display.html?id=121395>]
+
+=item *
+
+On a perl built without pseudo-fork (pseudo-fork builds were not affected by
+this bug), killing a process tree with L<C<kill()>|perlfunc/kill> and a negative
+signal resulted in C<kill()> inverting the returned value. For example, if
+C<kill()> killed 1 process tree PID then it returned 0 instead of 1, and if
+C<kill()> was passed 2 invalid PIDs then it returned 2 instead of 0. This has
+probably been the case since the process tree kill feature was implemented on
+Win32. It has now been corrected to follow the documented behaviour.
+[L<perl #121230|https://rt.perl.org/Public/Bug/Display.html?id=121230>]
+
+=item *
+
+When building a 64-bit perl, an uninitialized memory read in B<miniperl.exe>,
+used during the build process, could lead to a 4GB B<wperl.exe> being created.
+This has now been fixed. (Note that B<perl.exe> itself was unaffected, but
+obviously B<wperl.exe> would have been completely broken.)
+[L<perl #121471|https://rt.perl.org/Public/Bug/Display.html?id=121471>]
+
+=item *
+
+Perl can now be built with B<gcc> version 4.8.1 from L<http://www.mingw.org>.
+This was previously broken due to an incorrect definition of DllMain() in one
+of perl's source files. Earlier B<gcc> versions were also affected when using
+version 4 of the w32api package. Versions of B<gcc> available from
+L<http://mingw-w64.sourceforge.net/> were not affected.
+[L<perl #121643|https://rt.perl.org/Public/Bug/Display.html?id=121643>]
+
+=item *
+
+The test harness now has no failures when perl is built on a FAT drive with the
+Windows OS on an NTFS drive.
+[L<perl #21442|https://rt.perl.org/Public/Bug/Display.html?id=21442>]
+
+=item *
+
+When cloning the context stack in fork() emulation, Perl_cx_dup()
+would crash accessing parameter information for context stack entries
+that included no parameters, as with C<&foo;>.
+[L<perl #121721|https://rt.perl.org/Public/Bug/Display.html?id=121721>]
+
+=item *
+
+Introduced by
+L<perl #113536|https://rt.perl.org/Public/Bug/Display.html?id=113536>, a memory
+leak on every call to C<system> and backticks (C< `` >), on most Win32 Perls
+starting from 5.18.0 has been fixed. The memory leak only occurred if you
+enabled psuedo-fork in your build of Win32 Perl, and were running that build on
+Server 2003 R2 or newer OS. The leak does not appear on WinXP SP3.
+[L<perl #121676|https://rt.perl.org/Public/Bug/Display.html?id=121676>]
+
+=back
+
+=item WinCE
+
+=over 4
+
+=item *
+
+The building of XS modules has largely been restored. Several still cannot
+(yet) be built but it is now possible to build Perl on WinCE with only a couple
+of further patches (to L<Socket> and L<ExtUtils::MakeMaker>), hopefully to be
+incorporated soon.
+
+=item *
+
+Perl can now be built in one shot with no user intervention on WinCE by running
+C<nmake -f Makefile.ce all>.
+
+Support for building with EVC (Embedded Visual C++) 4 has been restored. Perl
+can also be built using Smart Devices for Visual C++ 2005 or 2008.
+
+=back
+
+=back
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+The internal representation has changed for the match variables $1, $2 etc.,
+$`, $&, $', ${^PREMATCH}, ${^MATCH} and ${^POSTMATCH}. It uses slightly less
+memory, avoids string comparisons and numeric conversions during lookup, and
+uses 23 fewer lines of C. This change should not affect any external code.
+
+=item *
+
+Arrays now use NULL internally to represent unused slots, instead of
+&PL_sv_undef. &PL_sv_undef is no longer treated as a special value, so
+av_store(av, 0, &PL_sv_undef) will cause element 0 of that array to hold a
+read-only undefined scalar. C<$array[0] = anything> will croak and
+C<\$array[0]> will compare equal to C<\undef>.
+
+=item *
+
+The SV returned by HeSVKEY_force() now correctly reflects the UTF8ness of the
+underlying hash key when that key is not stored as a SV. [perl #79074]
+
+=item *
+
+Certain rarely used functions and macros available to XS code are now
+deprecated. These are:
+C<utf8_to_uvuni_buf> (use C<utf8_to_uvchr_buf> instead),
+C<valid_utf8_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
+C<NATIVE_TO_NEED> (this did not work properly anyway),
+and C<ASCII_TO_NEED> (this did not work properly anyway).
+
+Starting in this release, almost never does application code need to
+distinguish between the platform's character set and Latin1, on which the
+lowest 256 characters of Unicode are based. New code should not use
+C<utf8n_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
+nor
+C<uvuni_to_utf8> (use C<uvchr_to_utf8> instead),
+
+=item *
+
+The Makefile shortcut targets for many rarely (or never) used testing and
+profiling targets have been removed, or merged into the only other Makefile
+target that uses them. Specifically, these targets are gone, along with
+documentation that referenced them or explained how to use them:
+
+ check.third check.utf16 check.utf8 coretest minitest.prep
+ minitest.utf16 perl.config.dashg perl.config.dashpg
+ perl.config.gcov perl.gcov perl.gprof perl.gprof.config
+ perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
+ perl.third perl.third.config perl.valgrind.config purecovperl
+ pureperl quantperl test.deparse test.taintwarn test.third
+ test.torture test.utf16 test.utf8 test_notty.deparse
+ test_notty.third test_notty.valgrind test_prep.third
+ test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
+ ucheck.valgrind utest utest.third utest.utf16 utest.valgrind
+
+It's still possible to run the relevant commands by "hand" - no underlying
+functionality has been removed.
+
+=item *
+
+It is now possible to keep Perl from initializing locale handling.
+For the most part, Perl doesn't pay attention to locale. (See
+L<perllocale>.) Nonetheless, until now, on startup, it has always
+initialized locale handling to the system default, just in case the
+program being executed ends up using locales. (This is one of the first
+things a locale-aware program should do, long before Perl knows if it
+will actually be needed or not.) This works well except when Perl is
+embedded in another application which wants a locale that isn't the
+system default. Now, if the environment variable
+C<PERL_SKIP_LOCALE_INIT> is set at the time Perl is started, this
+initialization step is skipped. Prior to this, on Windows platforms,
+the only workaround for this deficiency was to use a hacked-up copy of
+internal Perl code. Applications that need to use older Perls can
+discover if the embedded Perl they are using needs the workaround by
+testing that the C preprocessor symbol C<HAS_SKIP_LOCALE_INIT> is not
+defined. [RT #38193]
+
+=item *
+
+C<BmRARE> and C<BmPREVIOUS> have been removed. They were not used anywhere
+and are not part of the API. For XS modules, they are now #defined as 0.
+
+=item *
+
+C<sv_force_normal>, which usually croaks on read-only values, used to allow
+read-only values to be modified at compile time. This has been changed to
+croak on read-only values regardless. This change uncovered several core
+bugs.
+
+=item *
+
+Perl's new copy-on-write mechanism (which is now enabled by default),
+allows any C<SvPOK> scalar to be automatically upgraded to a copy-on-write
+scalar when copied. A reference count on the string buffer is stored in
+the string buffer itself.
+
+For example:
+
+ $ perl -MDevel::Peek -e'$a="abc"; $b = $a; Dump $a; Dump $b'
+ SV = PV(0x260cd80) at 0x2620ad8
+ REFCNT = 1
+ FLAGS = (POK,IsCOW,pPOK)
+ PV = 0x2619bc0 "abc"\0
+ CUR = 3
+ LEN = 16
+ COW_REFCNT = 1
+ SV = PV(0x260ce30) at 0x2620b20
+ REFCNT = 1
+ FLAGS = (POK,IsCOW,pPOK)
+ PV = 0x2619bc0 "abc"\0
+ CUR = 3
+ LEN = 16
+ COW_REFCNT = 1
+
+Note that both scalars share the same PV buffer and have a COW_REFCNT
+greater than zero.
+
+This means that XS code which wishes to modify the C<SvPVX()> buffer of an
+SV should call C<SvPV_force()> or similar first, to ensure a valid (and
+unshared) buffer, and to call C<SvSETMAGIC()> afterwards. This in fact has
+always been the case (for example hash keys were already copy-on-write);
+this change just spreads the COW behaviour to a wider variety of SVs.
+
+One important difference is that before 5.18.0, shared hash-key scalars
+used to have the C<SvREADONLY> flag set; this is no longer the case.
+
+This new behaviour can still be disabled by running F<Configure> with
+B<-Accflags=-DPERL_NO_COW>. This option will probably be removed in Perl
+5.22.
+
+=item *
+
+C<PL_sawampersand> is now a constant. The switch this variable provided
+(to enable/disable the pre-match copy depending on whether C<$&> had been
+seen) has been removed and replaced with copy-on-write, eliminating a few
+bugs.
+
+The previous behaviour can still be enabled by running F<Configure> with
+B<-Accflags=-DPERL_SAWAMPERSAND>.
+
+=item *
+
+The functions C<my_swap>, C<my_htonl> and C<my_ntohl> have been removed.
+It is unclear why these functions were ever marked as I<A>, part of the
+API. XS code can't call them directly, as it can't rely on them being
+compiled. Unsurprisingly, no code on CPAN references them.
+
+=item *
+
+The signature of the C<Perl_re_intuit_start()> regex function has changed;
+the function pointer C<intuit> in the regex engine plugin structure
+has also changed accordingly. A new parameter, C<strbeg> has been added;
+this has the same meaning as the same-named parameter in
+C<Perl_regexec_flags>. Previously intuit would try to guess the start of
+the string from the passed SV (if any), and would sometimes get it wrong
+(e.g. with an overloaded SV).
+
+=item *
+
+The signature of the C<Perl_regexec_flags()> regex function has
+changed; the function pointer C<exec> in the regex engine plugin
+structure has also changed to match. The C<minend> parameter now has
+type C<SSize_t> to better support 64-bit systems.
+
+=item *
+
+XS code may use various macros to change the case of a character or code
+point (for example C<toLOWER_utf8()>). Only a couple of these were
+documented until now;
+and now they should be used in preference to calling the underlying
+functions. See L<perlapi/Character case changing>.
+
+=item *
+
+The code dealt rather inconsistently with uids and gids. Some
+places assumed that they could be safely stored in UVs, others
+in IVs, others in ints. Four new macros are introduced:
+SvUID(), sv_setuid(), SvGID(), and sv_setgid()
+
+=item *
+
+C<sv_pos_b2u_flags> has been added to the API. It is similar to C<sv_pos_b2u>,
+but supports long strings on 64-bit platforms.
+
+=item *
+
+C<PL_exit_flags> can now be used by perl embedders or other XS code to have
+perl C<warn> or C<abort> on an attempted exit. [perl #52000]
+
+=item *
+
+Compiling with C<-Accflags=-PERL_BOOL_AS_CHAR> now allows C99 and C++
+compilers to emulate the aliasing of C<bool> to C<char> that perl does for
+C89 compilers. [perl #120314]
+
+=item *
+
+The C<sv> argument in L<perlapi/sv_2pv_flags>, L<perlapi/sv_2iv_flags>,
+L<perlapi/sv_2uv_flags>, and L<perlapi/sv_2nv_flags> and their older wrappers
+sv_2pv, sv_2iv, sv_2uv, sv_2nv, is now non-NULL. Passing NULL now will crash.
+When the non-NULL marker was introduced en masse in 5.9.3 the functions
+were marked non-NULL, but since the creation of the SV API in 5.0 alpha 2, if
+NULL was passed, the functions returned 0 or false-type values. The code that
+supports C<sv> argument being non-NULL dates to 5.0 alpha 2 directly, and
+indirectly to Perl 1.0 (pre 5.0 api). The lack of documentation that the
+functions accepted a NULL C<sv> was corrected in 5.11.0 and between 5.11.0
+and 5.19.5 the functions were marked NULLOK. As an optimization the NULLOK code
+has now been removed, and the functions became non-NULL marked again, because
+core getter-type macros never pass NULL to these functions and would crash
+before ever passing NULL.
+
+The only way a NULL C<sv> can be passed to sv_2*v* functions is if XS code
+directly calls sv_2*v*. This is unlikely as XS code uses Sv*V* macros to get
+the underlying value out of the SV. One possible situation which leads to
+a NULL C<sv> being passed to sv_2*v* functions, is if XS code defines its own
+getter type Sv*V* macros, which check for NULL B<before> dereferencing and
+checking the SV's flags through public API Sv*OK* macros or directly using
+private API C<SvFLAGS>, and if C<sv> is NULL, then calling the sv_2*v functions
+with a NULL litteral or passing the C<sv> containing a NULL value.
+
+=item *
+
+newATTRSUB is now a macro
+
+The public API newATTRSUB was previously a macro to the private
+function Perl_newATTRSUB. Function Perl_newATTRSUB has been removed. newATTRSUB
+is now macro to a different internal function.
+
+=item *
+
+Changes in warnings raised by C<utf8n_to_uvchr()>
+
+This bottom level function decodes the first character of a UTF-8 string
+into a code point. It is accessible to C<XS> level code, but it's
+discouraged from using it directly. There are higher level functions
+that call this that should be used instead, such as
+L<perlapi/utf8_to_uvchr_buf>. For completeness though, this documents
+some changes to it. Now, tests for malformations are done before any
+tests for other potential issues. One of those issues involves code
+points so large that they have never appeared in any official standard
+(the current standard has scaled back the highest acceptable code point
+from earlier versions). It is possible (though not done in CPAN) to
+warn and/or forbid these code points, while accepting smaller code
+points that are still above the legal Unicode maximum. The warning
+message for this now includes the code point if representable on the
+machine. Previously it always displayed raw bytes, which is what it
+still does for non-representable code points.
+
+=item *
+
+Regexp engine changes that affect the pluggable regex engine interface
+
+Many flags that used to be exposed via regexp.h and used to populate the
+extflags member of struct regexp have been removed. These fields were
+technically private to Perl's own regexp engine and should not have been
+exposed there in the first place.
+
+The affected flags are:
+
+ RXf_NOSCAN
+ RXf_CANY_SEEN
+ RXf_GPOS_SEEN
+ RXf_GPOS_FLOAT
+ RXf_ANCH_BOL
+ RXf_ANCH_MBOL
+ RXf_ANCH_SBOL
+ RXf_ANCH_GPOS
+
+As well as the follow flag masks:
+
+ RXf_ANCH_SINGLE
+ RXf_ANCH
+
+All have been renamed to PREGf_ equivalents and moved to regcomp.h.
+
+The behavior previously achieved by setting one or more of the RXf_ANCH_
+flags (via the RXf_ANCH mask) have now been replaced by a *single* flag bit
+in extflags:
+
+ RXf_IS_ANCHORED
+
+pluggable regex engines which previously used to set these flags should
+now set this flag ALONE.
+
+=item *
+
+The Perl core now consistently uses C<av_tindex()> ("the top index of an
+array") as a more clearly-named synonym for C<av_len()>.
+
+=item *
+
+The obscure interpreter variable C<PL_timesbuf> is expected to be removed
+early in the 5.21.x development series, so that Perl 5.22.0 will not provide
+it to XS authors. While the variable still exists in 5.20.0, we hope that
+this advance warning of the deprecation will help anyone who is using that
+variable.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=head2 Regular Expressions
+
+=over 4
+
+=item *
+
+Fixed a small number of regexp constructions that could either fail to
+match or crash perl when the string being matched against was
+allocated above the 2GB line on 32-bit systems. [RT #118175]
+
+=item *
+
+Various memory leaks involving the parsing of the C<(?[...])> regular
+expression construct have been fixed.
+
+=item *
+
+C<(?[...])> now allows interpolation of precompiled patterns consisting of
+C<(?[...])> with bracketed character classes inside (C<$pat =
+S<qr/(?[ [a] ])/;> S</(?[ $pat ])/>>). Formerly, the brackets would
+confuse the regular expression parser.
+
+=item *
+
+The "Quantifier unexpected on zero-length expression" warning message could
+appear twice starting in Perl v5.10 for a regular expression also
+containing alternations (e.g., "a|b") triggering the trie optimisation.
+
+=item *
+
+Perl v5.18 inadvertently introduced a bug whereby interpolating mixed up-
+and down-graded UTF-8 strings in a regex could result in malformed UTF-8
+in the pattern: specifically if a downgraded character in the range
+C<\x80..\xff> followed a UTF-8 string, e.g.
+
+ utf8::upgrade( my $u = "\x{e5}");
+ utf8::downgrade(my $d = "\x{e5}");
+ /$u$d/
+
+[RT #118297]
+
+=item *
+
+In regular expressions containing multiple code blocks, the values of
+C<$1>, C<$2>, etc., set by nested regular expression calls would leak from
+one block to the next. Now these variables always refer to the outer
+regular expression at the start of an embedded block [perl #117917].
+
+=item *
+
+C</$qr/p> was broken in Perl 5.18.0; the C</p> flag was ignored. This has been
+fixed. [perl #118213]
+
+=item *
+
+Starting in Perl 5.18.0, a construct like C</[#](?{})/x> would have its C<#>
+incorrectly interpreted as a comment. The code block would be skipped,
+unparsed. This has been corrected.
+
+=item *
+
+Starting in Perl 5.001, a regular expression like C</[#$a]/x> or C</[#]$a/x>
+would have its C<#> incorrectly interpreted as a comment, so the variable would
+not interpolate. This has been corrected. [perl #45667]
+
+=item *
+
+Perl 5.18.0 inadvertently made dereferenced regular expressions
+S<(C<${ qr// }>)> false as booleans. This has been fixed.
+
+=item *
+
+The use of C<\G> in regular expressions, where it's not at the start of the
+pattern, is now slightly less buggy (although it is still somewhat
+problematic).
+
+=item *
+
+Where a regular expression included code blocks (C</(?{...})/>), and where the
+use of constant overloading triggered a re-compilation of the code block, the
+second compilation didn't see its outer lexical scope. This was a regression
+in Perl 5.18.0.
+
+=item *
+
+The string position set by C<pos> could shift if the string changed
+representation internally to or from utf8. This could happen, e.g., with
+references to objects with string overloading.
+
+=item *
+
+Taking references to the return values of two C<pos> calls with the same
+argument, and then assigning a reference to one and C<undef> to the other,
+could result in assertion failures or memory leaks.
+
+=item *
+
+Elements of @- and @+ now update correctly when they refer to non-existent
+captures. Previously, a referenced element (C<$ref = \$-[1]>) could refer to
+the wrong match after subsequent matches.
+
+=item *
+
+The code that parses regex backrefs (or ambiguous backref/octals) such as \123
+did a simple atoi(), which could wrap round to negative values on long digit
+strings and cause segmentation faults. This has now been fixed. [perl
+#119505]
+
+=item *
+
+Assigning another typeglob to C<*^R> no longer makes the regular expression
+engine crash.
+
+=item *
+
+The C<\N> regular expression escape, when used without the curly braces (to
+mean C<[^\n]>), was ignoring a following C<*> if followed by whitespace
+under /x. It had been this way since C<\N> to mean C<[^\n]> was introduced
+in 5.12.0.
+
+=item *
+
+C<s///>, C<tr///> and C<y///> now work when a wide character is used as the
+delimiter. [perl #120463]
+
+=item *
+
+Some cases of unterminated (?...) sequences in regular expressions (e.g.,
+C</(?</>) have been fixed to produce the proper error message instead of
+"panic: memory wrap". Other cases (e.g., C</(?(/>) have yet to be fixed.
+
+=item *
+
+When a reference to a reference to an overloaded object was returned from
+a regular expression C<(??{...})> code block, an incorrect implicit
+dereference could take place if the inner reference had been returned by
+a code block previously.
+
+=item *
+
+A tied variable returned from C<(??{...})> sees the inner values of match
+variables (i.e., the $1 etc. from any matches inside the block) in its
+FETCH method. This was not the case if a reference to an overloaded object
+was the last thing assigned to the tied variable. Instead, the match
+variables referred to the outer pattern during the FETCH call.
+
+=item *
+
+Fix unexpected tainting via regexp using locale. Previously, under certain
+conditions, the use of character classes could cause tainting when it
+shouldn't. Some character classes are locale-dependent, but before this
+patch, sometimes tainting was happening even for character classes that
+don't depend on the locale. [perl #120675]
+
+=item *
+
+Under certain conditions, Perl would throw an error if in an lookbehind
+assertion in a regexp, the assertion referred to a named subpattern,
+complaining the lookbehind was variable when it wasn't. This has been
+fixed. [perl #120600], [perl #120618]. The current fix may be improved
+on in the future.
+
+=item *
+
+C<$^R> wasn't available outside of the regular expression that
+initialized it. [perl #121070]
+
+=item *
+
+A large set of fixes and refactoring for re_intuit_start() was merged,
+the highlights are:
+
+=over
+
+=item *
+
+Fixed a panic when compiling the regular expression
+C</\x{100}[xy]\x{100}{2}/>.
+
+=item *
+
+Fixed a performance regression when performing a global pattern match
+against a UTF-8 string. [perl #120692]
+
+=item *
+
+Fixed another performance issue where matching a regular expression
+like C</ab.{1,2}x/> against a long UTF-8 string would unnecessarily
+calculate byte offsets for a large portion of the string. [perl
+#120692]
+
+=back
+
+=item *
+
+Fixed an alignment error when compiling regular expressions when built
+with GCC on HP-UX 64-bit.
+
+=item *
+
+On 64-bit platforms C<pos> can now be set to a value higher than 2**31-1.
+[perl #72766]
+
+=back
+
+=head2 Perl 5 Debugger and -d
+
+=over 4
+
+=item *
+
+The debugger's C<man> command been fixed. It was broken in the v5.18.0
+release. The C<man> command is aliased to the names C<doc> and C<perldoc> -
+all now work again.
+
+=item *
+
+C<@_> is now correctly visible in the debugger, fixing a regression
+introduced in v5.18.0's debugger. [RT #118169]
+
+=item *
+
+Under copy-on-write builds (the default as of 5.20.0) C<< ${'_<-e'}[0] >>
+no longer gets mangled. This is the first line of input saved for the
+debugger's use for one-liners [perl #118627].
+
+=item *
+
+On non-threaded builds, setting C<${"_E<lt>filename"}> to a reference or
+typeglob no longer causes C<__FILE__> and some error messages to produce a
+corrupt string, and no longer prevents C<#line> directives in string evals from
+providing the source lines to the debugger. Threaded builds were unaffected.
+
+=item *
+
+Starting with Perl 5.12, line numbers were off by one if the B<-d> switch was
+used on the #! line. Now they are correct.
+
+=item *
+
+C<*DB::DB = sub {} if 0> no longer stops Perl's debugging mode from finding
+C<DB::DB> subs declared thereafter.
+
+=item *
+
+C<%{'_<...'}> hashes now set breakpoints on the corresponding C<@{'_<...'}>
+rather than whichever array C<@DB::dbline> is aliased to. [perl #119799]
+
+=item *
+
+Call set-magic when setting $DB::sub. [perl #121255]
+
+=item *
+
+The debugger's "n" command now respects lvalue subroutines and steps over
+them [perl #118839].
+
+=back
+
+=head2 Lexical Subroutines
+
+=over 4
+
+=item *
+
+Lexical constants (C<my sub a() { 42 }>) no longer crash when inlined.
+
+=item *
+
+Parameter prototypes attached to lexical subroutines are now respected when
+compiling sub calls without parentheses. Previously, the prototypes were
+honoured only for calls I<with> parentheses. [RT #116735]
+
+=item *
+
+Syntax errors in lexical subroutines in combination with calls to the same
+subroutines no longer cause crashes at compile time.
+
+=item *
+
+Deep recursion warnings no longer crash lexical subroutines. [RT #118521]
+
+=item *
+
+The dtrace sub-entry probe now works with lexical subs, instead of
+crashing [perl #118305].
+
+=item *
+
+Undefining an inlinable lexical subroutine (C<my sub foo() { 42 } undef
+&foo>) would result in a crash if warnings were turned on.
+
+=item *
+
+An undefined lexical sub used as an inherited method no longer crashes.
+
+=item *
+
+The presence of a lexical sub named "CORE" no longer stops the CORE::
+prefix from working.
+
+=back
+
+=head2 Everything Else
+
+=over 4
+
+=item *
+
+The OP allocation code now returns correctly aligned memory in all cases
+for C<struct pmop>. Previously it could return memory only aligned to a
+4-byte boundary, which is not correct for an ithreads build with 64 bit IVs
+on some 32 bit platforms. Notably, this caused the build to fail completely
+on sparc GNU/Linux. [RT #118055]
+
+=item *
+
+Evaluating large hashes in scalar context is now much faster, as the number
+of used chains in the hash is now cached for larger hashes. Smaller hashes
+continue not to store it and calculate it when needed, as this saves one IV.
+That would be 1 IV overhead for every object built from a hash. [RT #114576]
+
+=item *
+
+Perl v5.16 inadvertently introduced a bug whereby calls to XSUBs that were
+not visible at compile time were treated as lvalues and could be assigned
+to, even when the subroutine was not an lvalue sub. This has been fixed.
+[RT #117947]
+
+=item *
+
+In Perl v5.18.0 dualvars that had an empty string for the string part but a
+non-zero number for the number part starting being treated as true. In
+previous versions they were treated as false, the string representation
+taking precedeence. The old behaviour has been restored. [RT #118159]
+
+=item *
+
+Since Perl v5.12, inlining of constants that override built-in keywords of
+the same name had countermanded C<use subs>, causing subsequent mentions of
+the constant to use the built-in keyword instead. This has been fixed.
+
+=item *
+
+The warning produced by C<-l $handle> now applies to IO refs and globs, not
+just to glob refs. That warning is also now UTF8-clean. [RT #117595]
+
+=item *
+
+C<delete local $ENV{nonexistent_env_var}> no longer leaks memory.
+
+=item *
+
+C<sort> and C<require> followed by a keyword prefixed with C<CORE::> now
+treat it as a keyword, and not as a subroutine or module name. [RT #24482]
+
+=item *
+
+Through certain conundrums, it is possible to cause the current package to
+be freed. Certain operators (C<bless>, C<reset>, C<open>, C<eval>) could
+not cope and would crash. They have been made more resilient. [RT #117941]
+
+=item *
+
+Aliasing filehandles through glob-to-glob assignment would not update
+internal method caches properly if a package of the same name as the
+filehandle existed, resulting in filehandle method calls going to the
+package instead. This has been fixed.
+
+=item *
+
+C<./Configure -de -Dusevendorprefix> didn't default. [RT #64126]
+
+=item *
+
+The C<Statement unlikely to be reached> warning was listed in
+L<perldiag> as an C<exec>-category warning, but was enabled and disabled
+by the C<syntax> category. On the other hand, the C<exec> category
+controlled its fatal-ness. It is now entirely handled by the C<exec>
+category.
+
+=item *
+
+The "Replacement list is longer that search list" warning for C<tr///> and
+C<y///> no longer occurs in the presence of the C</c> flag. [RT #118047]
+
+=item *
+
+Stringification of NVs are not cached so that the lexical locale controls
+stringification of the decimal point. [perl #108378] [perl #115800]
+
+=item *
+
+There have been several fixes related to Perl's handling of locales. perl
+#38193 was described above in L</Internal Changes>.
+Also fixed is
+#118197, where the radix (decimal point) character had to be an ASCII
+character (which doesn't work for some non-Western languages);
+and #115808, in which C<POSIX::setlocale()> on failure returned an
+C<undef> which didn't warn about not being defined even if those
+warnings were enabled.
+
+=item *
+
+Compiling a C<split> operator whose third argument is a named constant
+evaulating to 0 no longer causes the constant's value to change.
+
+=item *
+
+A named constant used as the second argument to C<index> no longer gets
+coerced to a string if it is a reference, regular expression, dualvar, etc.
+
+=item *
+
+A named constant evaluating to the undefined value used as the second
+argument to C<index> no longer produces "uninitialized" warnings at compile
+time. It will still produce them at run time.
+
+=item *
+
+When a scalar was returned from a subroutine in @INC, the referenced scalar
+was magically converted into an IO thingy, possibly resulting in "Bizarre
+copy" errors if that scalar continued to be used elsewhere. Now Perl uses
+an internal copy of the scalar instead.
+
+=item *
+
+Certain uses of the C<sort> operator are optimised to modify an array in
+place, such as C<@a = sort @a>. During the sorting, the array is made
+read-only. If a sort block should happen to die, then the array remained
+read-only even outside the C<sort>. This has been fixed.
+
+=item *
+
+C<$a> and C<$b> inside a sort block are aliased to the actual arguments to
+C<sort>, so they can be modified through those two variables. This did not
+always work, e.g., for lvalue subs and C<$#ary>, and probably many other
+operators. It works now.
+
+=item *
+
+The arguments to C<sort> are now all in list context. If the C<sort>
+itself were called in void or scalar context, then I<some>, but not all, of
+the arguments used to be in void or scalar context.
+
+=item *
+
+Subroutine prototypes with Unicode characters above U+00FF were getting
+mangled during closure cloning. This would happen with subroutines closing
+over lexical variables declared outside, and with lexical subs.
+
+=item *
+
+C<UNIVERSAL::can> now treats its first argument the same way that method
+calls do: Typeglobs and glob references with non-empty IO slots are treated
+as handles, and strings are treated as filehandles, rather than packages,
+if a handle with that name exists [perl #113932].
+
+=item *
+
+Method calls on typeglobs (e.g., C<< *ARGV->getline >>) used to stringify
+the typeglob and then look it up again. Combined with changes in Perl
+5.18.0, this allowed C<< *foo->bar >> to call methods on the "foo" package
+(like C<< foo->bar >>). In some cases it could cause the method to be
+called on the wrong handle. Now a typeglob argument is treated as a
+handle (just like C<< (\*foo)->bar >>), or, if its IO slot is empty, an
+error is raised.
+
+=item *
+
+Assigning a vstring to a tied variable or to a subroutine argument aliased
+to a nonexistent hash or array element now works, without flattening the
+vstring into a regular string.
+
+=item *
+
+C<pos>, C<tie>, C<tied> and C<untie> did not work
+properly on subroutine arguments aliased to nonexistent
+hash and array elements [perl #77814, #27010].
+
+=item *
+
+The C<< => >> fat arrow operator can now quote built-in keywords even if it
+occurs on the next line, making it consistent with how it treats other
+barewords.
+
+=item *
+
+Autovivifying a subroutine stub via C<\&$glob> started causing crashes in Perl
+5.18.0 if the $glob was merely a copy of a real glob, i.e., a scalar that had
+had a glob assigned to it. This has been fixed. [perl #119051]
+
+=item *
+
+Perl used to leak an implementation detail when it came to referencing the
+return values of certain operators. C<for ($a+$b) { warn \$_; warn \$_ }> used
+to display two different memory addresses, because the C<\> operator was
+copying the variable. Under threaded builds, it would also happen for
+constants (C<for(1) { ... }>). This has been fixed. [perl #21979, #78194,
+#89188, #109746, #114838, #115388]
+
+=item *
+
+The range operator C<..> was returning the same modifiable scalars with each
+call, unless it was the only thing in a C<foreach> loop header. This meant
+that changes to values within the list returned would be visible the next time
+the operator was executed. [perl #3105]
+
+=item *
+
+Constant folding and subroutine inlining no longer cause operations that would
+normally return new modifiable scalars to return read-only values instead.
+
+=item *
+
+Closures of the form C<sub () { $some_variable }> are no longer inlined,
+causing changes to the variable to be ignored by callers of the subroutine.
+[perl #79908]
+
+=item *
+
+Return values of certain operators such as C<ref> would sometimes be shared
+between recursive calls to the same subroutine, causing the inner call to
+modify the value returned by C<ref> in the outer call. This has been fixed.
+
+=item *
+
+C<__PACKAGE__> and constants returning a package name or hash key are now
+consistently read-only. In various previous Perl releases, they have become
+mutable under certain circumstances.
+
+=item *
+
+Enabling "used once" warnings no longer causes crashes on stash circularities
+created at compile time (C<*Foo::Bar::Foo:: = *Foo::>).
+
+=item *
+
+Undef constants used in hash keys (C<use constant u =E<gt> undef; $h{+u}>) no
+longer produce "uninitialized" warnings at compile time.
+
+=item *
+
+Modifying a substitution target inside the substitution replacement no longer
+causes crashes.
+
+=item *
+
+The first statement inside a string eval used to use the wrong pragma setting
+sometimes during constant folding. C<eval 'uc chr 0xe0'> would randomly choose
+between Unicode, byte, and locale semantics. This has been fixed.
+
+=item *
+
+The handling of return values of @INC filters (subroutines returned by
+subroutines in @INC) has been fixed in various ways. Previously tied variables
+were mishandled, and setting $_ to a reference or typeglob could result in
+crashes.
+
+=item *
+
+The C<SvPVbyte> XS function has been fixed to work with tied scalars returning
+something other than a string. It used to return utf8 in those cases where
+C<SvPV> would.
+
+=item *
+
+Perl 5.18.0 inadvertently made C<--> and C<++> crash on dereferenced regular
+expressions, and stopped C<++> from flattening vstrings.
+
+=item *
+
+C<bless> no longer dies with "Can't bless non-reference value" if its first
+argument is a tied reference.
+
+=item *
+
+C<reset> with an argument no longer skips copy-on-write scalars, regular
+expressions, typeglob copies, and vstrings. Also, when encountering those or
+read-only values, it no longer skips any array or hash with the same name.
+
+=item *
+
+C<reset> with an argument now skips scalars aliased to typeglobs
+(C<for $z (*foo) { reset "z" }>). Previously it would corrupt memory or crash.
+
+=item *
+
+C<ucfirst> and C<lcfirst> were not respecting the bytes pragma. This was a
+regression from Perl 5.12. [perl #117355]
+
+=item *
+
+Changes to C<UNIVERSAL::DESTROY> now update DESTROY caches in all classes,
+instead of causing classes that have already had objects destroyed to continue
+using the old sub. This was a regression in Perl 5.18. [perl #114864]
+
+=item *
+
+All known false-positive occurrences of the deprecation warning "Useless use of
+'\'; doesn't escape metacharacter '%c'", added in Perl 5.18.0, have been
+removed. [perl #119101]
+
+=item *
+
+The value of $^E is now saved across signal handlers on Windows. [perl #85104]
+
+=item *
+
+A lexical filehandle (as in C<open my $fh...>) is usually given a name based on
+the current package and the name of the variable, e.g. "main::$fh". Under
+recursion, the filehandle was losing the "$fh" part of the name. This has been
+fixed.
+
+=item *
+
+Uninitialized values returned by XSUBs are no longer exempt from uninitialized
+warnings. [perl #118693]
+
+=item *
+
+C<elsif ("")> no longer erroneously produces a warning about void context.
+[perl #118753]
+
+=item *
+
+Passing C<undef> to a subroutine now causes @_ to contain the same read-only
+undefined scalar that C<undef> returns. Furthermore, C<exists $_[0]> will now
+return true if C<undef> was the first argument. [perl #7508, #109726]
+
+=item *
+
+Passing a non-existent array element to a subroutine does not usually
+autovivify it unless the subroutine modifies its argument. This did not work
+correctly with negative indices and with non-existent elements within the
+array. The element would be vivified immediately. The delayed vivification
+has been extended to work with those. [perl #118691]
+
+=item *
+
+Assigning references or globs to the scalar returned by $#foo after the @foo
+array has been freed no longer causes assertion failures on debugging builds
+and memory leaks on regular builds.
+
+=item *
+
+On 64-bit platforms, large ranges like 1..1000000000000 no longer crash, but
+eat up all your memory instead. [perl #119161]
+
+=item *
+
+C<__DATA__> now puts the C<DATA> handle in the right package, even if the
+current package has been renamed through glob assignment.
+
+=item *
+
+When C<die>, C<last>, C<next>, C<redo>, C<goto> and C<exit> unwind the scope,
+it is possible for C<DESTROY> recursively to call a subroutine or format that
+is currently being exited. It that case, sometimes the lexical variables
+inside the sub would start out having values from the outer call, instead of
+being undefined as they should. This has been fixed. [perl #119311]
+
+=item *
+
+${^MPEN} is no longer treated as a synonym for ${^MATCH}.
+
+=item *
+
+Perl now tries a little harder to return the correct line number in
+C<(caller)[2]>. [perl #115768]
+
+=item *
+
+Line numbers inside multiline quote-like operators are now reported correctly.
+[perl #3643]
+
+=item *
+
+C<#line> directives inside code embedded in quote-like operators are now
+respected.
+
+=item *
+
+Line numbers are now correct inside the second here-doc when two here-doc
+markers occur on the same line.
+
+=item *
+
+An optimization in Perl 5.18 made incorrect assumptions causing a bad
+interaction with the L<Devel::CallParser> CPAN module. If the module was
+loaded then lexical variables declared in separate statements following a
+C<my(...)> list might fail to be cleared on scope exit.
+
+=item *
+
+C<&xsub> and C<goto &xsub> calls now allow the called subroutine to autovivify
+elements of @_.
+
+=item *
+
+C<&xsub> and C<goto &xsub> no longer crash if *_ has been undefined and has no
+ARRAY entry (i.e. @_ does not exist).
+
+=item *
+
+C<&xsub> and C<goto &xsub> now work with tied @_.
+
+=item *
+
+Overlong identifiers no longer cause a buffer overflow (and a crash). They
+started doing so in Perl 5.18.
+
+=item *
+
+The warning "Scalar value @hash{foo} better written as $hash{foo}" now produces
+far fewer false positives. In particular, C<@hash{+function_returning_a_list}>
+and C<@hash{ qw "foo bar baz" }> no longer warn. The same applies to array
+slices. [perl #28380, #114024]
+
+=item *
+
+C<$! = EINVAL; waitpid(0, WNOHANG);> no longer goes into an internal infinite
+loop. [perl #85228]
+
+=item *
+
+A possible segmentation fault in filehandle duplication has been fixed.
+
+=item *
+
+A subroutine in @INC can return a reference to a scalar containing the initial
+contents of the file. However, that scalar was freed prematurely if not
+referenced elsewhere, giving random results.
+
+=item *
+
+C<last> no longer returns values that the same statement has accumulated so
+far, fixing amongst other things the long-standing bug that C<push @a, last>
+would try to return the @a, copying it like a scalar in the process and
+resulting in the error, "Bizarre copy of ARRAY in last." [perl #3112]
+
+=item *
+
+In some cases, closing file handles opened to pipe to or from a process, which
+had been duplicated into a standard handle, would call perl's internal waitpid
+wrapper with a pid of zero. With the fix for [perl #85228] this zero pid was
+passed to C<waitpid>, possibly blocking the process. This wait for process
+zero no longer occurs. [perl #119893]
+
+=item *
+
+C<select> used to ignore magic on the fourth (timeout) argument, leading to
+effects such as C<select> blocking indefinitely rather than the expected sleep
+time. This has now been fixed. [perl #120102]
+
+=item *
+
+The class name in C<for my class $foo> is now parsed correctly. In the case of
+the second character of the class name being followed by a digit (e.g. 'a1b')
+this used to give the error "Missing $ on loop variable". [perl #120112]
+
+=item *
+
+Perl 5.18.0 accidentally disallowed C<-bareword> under C<use strict> and
+C<use integer>. This has been fixed. [perl #120288]
+
+=item *
+
+C<-a> at the start of a line (or a hyphen with any single letter that is
+not a filetest operator) no longer produces an erroneous 'Use of "-a"
+without parentheses is ambiguous' warning. [perl #120288]
+
+=item *
+
+Lvalue context is now properly propagated into bare blocks and C<if> and
+C<else> blocks in lvalue subroutines. Previously, arrays and hashes would
+sometimes incorrectly be flattened when returned in lvalue list context, or
+"Bizarre copy" errors could occur. [perl #119797]
+
+=item *
+
+Lvalue context is now propagated to the branches of C<||> and C<&&> (and
+their alphabetic equivalents, C<or> and C<and>). This means
+C<foreach (pos $x || pos $y) {...}> now allows C<pos> to be modified
+through $_.
+
+=item *
+
+C<stat> and C<readline> remember the last handle used; the former
+for the special C<_> filehandle, the latter for C<${^LAST_FH}>.
+C<eval "*foo if 0"> where *foo was the last handle passed to C<stat>
+or C<readline> could cause that handle to be forgotten if the
+handle were not opened yet. This has been fixed.
+
+=item *
+
+Various cases of C<delete $::{a}>, C<delete $::{ENV}> etc. causing a crash
+have been fixed. [perl #54044]
+
+=item *
+
+Setting C<$!> to EACCESS before calling C<require> could affect
+C<require>'s behaviour. This has been fixed.
+
+=item *
+
+The "Can't use \1 to mean $1 in expression" warning message now only occurs
+on the right-hand (replacement) part of a substitution. Formerly it could
+happen in code embedded in the left-hand side, or in any other quote-like
+operator.
+
+=item *
+
+Blessing into a reference (C<bless $thisref, $thatref>) has long been
+disallowed, but magical scalars for the second like C<$/> and those tied
+were exempt. They no longer are. [perl #119809]
+
+=item *
+
+Blessing into a reference was accidentally allowed in 5.18 if the class
+argument were a blessed reference with stale method caches (i.e., whose
+class had had subs defined since the last method call). They are
+disallowed once more, as in 5.16.
+
+=item *
+
+C<< $x->{key} >> where $x was declared as C<my Class $x> no longer crashes
+if a Class::FIELDS subroutine stub has been declared.
+
+=item *
+
+C<@$obj{'key'}> and C<${$obj}{key}> used to be exempt from compile-time
+field checking ("No such class field"; see L<fields>) but no longer are.
+
+=item *
+
+A nonexistent array element with a large index passed to a subroutine that
+ties the array and then tries to access the element no longer results in a
+crash.
+
+=item *
+
+Declaring a subroutine stub named NEGATIVE_INDICES no longer makes negative
+array indices crash when the current package is a tied array class.
+
+=item *
+
+Declaring a C<require>, C<glob>, or C<do> subroutine stub in the
+CORE::GLOBAL:: package no longer makes compilation of calls to the
+corresponding functions crash.
+
+=item *
+
+Aliasing CORE::GLOBAL:: functions to constants stopped working in Perl 5.10
+but has now been fixed.
+
+=item *
+
+When C<`...`> or C<qx/.../> calls a C<readpipe> override, double-quotish
+interpolation now happens, as is the case when there is no override.
+Previously, the presence of an override would make these quote-like
+operators act like C<q{}>, suppressing interpolation. [perl #115330]
+
+=item *
+
+C<<<<`...`> here-docs (with backticks as the delimiters) now call
+C<readpipe> overrides. [perl #119827]
+
+=item *
+
+C<&CORE::exit()> and C<&CORE::die()> now respect L<vmsish> hints.
+
+=item *
+
+Undefining a glob that triggers a DESTROY method that undefines the same
+glob is now safe. It used to produce "Attempt to free unreferenced glob
+pointer" warnings and leak memory.
+
+=item *
+
+If subroutine redefinition (C<eval 'sub foo{}'> or C<newXS> for XS code)
+triggers a DESTROY method on the sub that is being redefined, and that
+method assigns a subroutine to the same slot (C<*foo = sub {}>), C<$_[0]>
+is no longer left pointing to a freed scalar. Now DESTROY is delayed until
+the new subroutine has been installed.
+
+=item *
+
+On Windows, perl no longer calls CloseHandle() on a socket handle. This makes
+debugging easier on Windows by removing certain irrelevant bad handle
+exceptions. It also fixes a race condition that made socket functions randomly
+fail in a Perl process with multiple OS threads, and possible test failures in
+F<dist/IO/t/cachepropagate-tcp.t>. [perl #120091/118059]
+
+=item *
+
+Formats involving UTF-8 encoded strings, or strange vars like ties,
+overloads, or stringified refs (and in recent
+perls, pure NOK vars) would generally do the wrong thing in formats
+when the var is treated as a string and repeatedly chopped, as in
+C<< ^<<<~~ >> and similar. This has now been resolved.
+[perl #33832/45325/113868/119847/119849/119851]
+
+=item *
+
+C<< semctl(..., SETVAL, ...) >> would set the semaphore to the top
+32-bits of the supplied integer instead of the bottom 32-bits on
+64-bit big-endian systems. [perl #120635]
+
+=item *
+
+C<< readdir() >> now only sets C<$!> on error. C<$!> is no longer set
+to C<EBADF> when then terminating C<undef> is read from the directory
+unless the system call sets C<$!>. [perl #118651]
+
+=item *
+
+C<&CORE::glob> no longer causes an intermittent crash due to perl's stack
+getting corrupted. [perl #119993]
+
+=item *
+
+C<open> with layers that load modules (e.g., "<:encoding(utf8)") no longer
+runs the risk of crashing due to stack corruption.
+
+=item *
+
+Perl 5.18 broke autoloading via C<< ->SUPER::foo >> method calls by looking
+up AUTOLOAD from the current package rather than the current package's
+superclass. This has been fixed. [perl #120694]
+
+=item *
+
+A longstanding bug causing C<do {} until CONSTANT>, where the constant
+holds a true value, to read unallocated memory has been resolved. This
+would usually happen after a syntax error. In past versions of Perl it has
+crashed intermittently. [perl #72406]
+
+=item *
+
+Fix HP-UX C<$!> failure. HP-UX strerror() returns an empty string for an
+unknown error code. This caused an assertion to fail under DEBUGGING
+builds. Now instead, the returned string for C<"$!"> contains text
+indicating the code is for an unknown error.
+
+=item *
+
+Individually-tied elements of @INC (as in C<tie $INC[0]...>) are now
+handled correctly. Formerly, whether a sub returned by such a tied element
+would be treated as a sub depended on whether a FETCH had occurred
+previously.
+
+=item *
+
+C<getc> on a byte-sized handle after the same C<getc> operator had been
+used on a utf8 handle used to treat the bytes as utf8, resulting in erratic
+behavior (e.g., malformed UTF-8 warnings).
+
+=item *
+
+An initial C<{> at the beginning of a format argument line was always
+interpreted as the beginning of a block prior to v5.18. In Perl v5.18, it
+started being treated as an ambiguous token. The parser would guess
+whether it was supposed to be an anonymous hash constructor or a block
+based on the contents. Now the previous behavious has been restored.
+[perl #119973]
+
+=item *
+
+In Perl v5.18 C<undef *_; goto &sub> and C<local *_; goto &sub> started
+crashing. This has been fixed. [perl #119949]
+
+=item *
+
+Backticks (C< `` > or C< qx// >) combined with multiple threads on
+Win32 could result in output sent to stdout on one thread being
+captured by backticks of an external command in another thread.
+
+This could occur for pseudo-forked processes too, as Win32's
+pseudo-fork is implemented in terms of threads. [perl #77672]
+
+=item *
+
+C<< open $fh, ">+", undef >> no longer leaks memory when TMPDIR is set
+but points to a directory a temporary file cannot be created in. [perl
+#120951]
+
+=item *
+
+C< for ( $h{k} || '' ) > no longer auto-vivifies C<$h{k}>. [perl
+#120374]
+
+=item *
+
+On Windows machines, Perl now emulates the POSIX use of the environment
+for locale initialization. Previously, the environment was ignored.
+See L<perllocale/ENVIRONMENT>.
+
+=item *
+
+Fixed a crash when destroying a self-referencing GLOB. [perl #121242]
+
+=back
+
+=head1 Known Problems
+
+=over 4
+
+=item *
+
+L<IO::Socket> is known to fail tests on AIX 5.3. There is
+L<a patch|https://rt.perl.org/Ticket/Display.html?id=120835> in the request
+tracker, #120835, which may be applied to future releases.
+
+=item *
+
+The following modules are known to have test failures with this version of
+Perl. Patches have been submitted, so there will hopefully be new releases
+soon:
+
+=over
+
+=item *
+
+L<Data::Structure::Util> version 0.15
+
+=item *
+
+L<HTML::StripScripts> version 1.05
+
+=item *
+
+L<List::Gather> version 0.08.
+
+=back
+
+=back
+
+=head1 Obituary
+
+Diana Rosa, 27, of Rio de Janeiro, went to her long rest on May 10,
+2014, along with the plush camel she kept hanging on her computer screen
+all the time. She was a passionate Perl hacker who loved the language and its
+community, and who never missed a Rio.pm event. She was a true artist, an
+enthusiast about writing code, singing arias and graffiting walls. We'll never
+forget you.
+
+Greg McCarroll died on August 28, 2013.
+
+Greg was well known for many good reasons. He was one of the organisers of
+the first YAPC::Europe, which concluded with an unscheduled auction where he
+frantically tried to raise extra money to avoid the conference making a
+loss. It was Greg who mistakenly arrived for a london.pm meeting a week
+late; some years later he was the one who sold the choice of official
+meeting date at a YAPC::Europe auction, and eventually as glorious leader of
+london.pm he got to inherit the irreverent confusion that he had created.
+
+Always helpful, friendly and cheerfully optimistic, you will be missed, but
+never forgotten.
+
+=head1 Acknowledgements
+
+Perl 5.20.0 represents approximately 12 months of development since Perl 5.18.0
+and contains approximately 470,000 lines of changes across 2,900 files from 124
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 280,000 lines of changes to 1,800 .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.0:
+
+Aaron Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai Alavi, Alan
+Hourihane, Alexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno Siegel,
+Aristotle Pagaltzis, Arthur Axel 'fREW' Schmidt, Brad Gilbert, Brendan Byrd,
+Brian Childs, Brian Fraser, Brian Gottreu, Chris 'BinGOs' Williams, Christian
+Millour, Colin Kuskie, Craig A. Berry, Dabrien 'Dabe' Murphy, Dagfinn Ilmari
+Mannsåker, Daniel Dragan, Darin McBride, David Golden, David Leadbeater, David
+Mitchell, David Nicol, David Steinbrunner, Dennis Kaarsemaker, Dominic
+Hargreaves, Ed Avis, Eric Brine, Evan Zacks, Father Chrysostomos, Florian
+Ragwitz, François Perrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas,
+Graham Knop, H.Merijn Brand, Hauke D, Heiko Eissfeldt, Hiroo Hayashi, Hojung
+Youn, James E Keenan, Jarkko Hietaniemi, Jerry D. Hedden, Jess Robinson, Jesse
+Luehrs, Johan Vromans, John Gardiner Myers, John Goodyear, John P. Linderman,
+John Peacock, kafka, Kang-min Liu, Karen Etheridge, Karl Williamson, Keedi Kim,
+Kent Fredric, kevin dawson, Kevin Falcone, Kevin Ryde, Leon Timmermans, Lukas
+Mai, Marc Simpson, Marcel Grünauer, Marco Peereboom, Marcus Holland-Moritz,
+Mark Jason Dominus, Martin McGrath, Matthew Horsfall, Max Maischein, Mike
+Doherty, Moritz Lenz, Nathan Glenn, Nathan Trapuzzano, Neil Bowers, Neil
+Williams, Nicholas Clark, Niels Thykier, Niko Tyni, Olivier Mengué, Owain G.
+Ainsworth, Paul Green, Paul Johnson, Peter John Acklam, Peter Martini, Peter
+Rabbitson, Petr PÃsaÅ™, Philip Boulain, Philip Guenther, Piotr Roszatycki,
+Rafael Garcia-Suarez, Reini Urban, Reuben Thomas, Ricardo Signes, Ruslan
+Zakirov, Sergey Alekseev, Shirakata Kentaro, Shlomi Fish, Slaven Rezic,
+Smylers, Steffen Müller, Steve Hay, Sullivan Beck, Thomas Sibley, Tobias
+Leich, Toby Inkster, Tokuhiro Matsuno, Tom Christiansen, Tom Hukins, Tony Cook,
+Victor Efimov, Viktor Turskyi, Vladimir Timofeev, YAMASHINA Hio, Yves Orton,
+Zefram, Zsbán Ambrus, Æ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
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the articles recently
+posted to the comp.lang.perl.misc newsgroup and the perl bug database at
+http://rt.perl.org/perlbug/ . There may also be information at
+http://www.perl.org/ , the Perl Home Page.
+
+If you believe you have an unreported bug, please run the L<perlbug> program
+included with your release. Be sure to trim your bug down to a tiny but
+sufficient test case. Your bug report, along with the output of C<perl -V>,
+will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
+
+If the bug you are reporting has security implications, which make it
+inappropriate to send to a publicly archived mailing list, then please send it
+to perl5-security-report@perl.org. This points to a closed subscription
+unarchived mailing list, which includes all the core committers, who will be
+able to help assess the impact of issues, figure out a resolution, and help
+co-ordinate the release of patches to mitigate or fix the problem across all
+platforms on which Perl is supported. Please only use this address for
+security issues in the Perl core, not for modules independently distributed on
+CPAN.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
=head1 NAME
-perldelta - what is new for perl v5.20.0
+perldelta - what is new for perl v5.20.1
=head1 DESCRIPTION
-This document describes differences between the 5.18.0 release and the
-5.20.0 release.
+This document describes differences between the 5.20.0 release and the 5.20.1
+release.
-If you are upgrading from an earlier release such as 5.16.0, first read
-L<perl5180delta>, which describes differences between 5.16.0 and 5.18.0.
-
-=head1 Core Enhancements
-
-=head2 Experimental Subroutine signatures
-
-Declarative syntax to unwrap argument list into lexical variables.
-C<sub foo ($a,$b) {...}> checks the number of arguments and puts the
-arguments into lexical variables. Signatures are not equivalent to
-the existing idiom of C<sub foo { my($a,$b) = @_; ... }>. Signatures
-are only available by enabling a non-default feature, and generate
-warnings about being experimental. The syntactic clash with
-prototypes is managed by disabling the short prototype syntax when
-signatures are enabled.
-
-See L<perlsub/Signatures> for details.
-
-=head2 C<sub>s now take a C<prototype> attribute
-
-When declaring or defining a C<sub>, the prototype can now be specified inside
-of a C<prototype> attribute instead of in parens following the name.
-
-For example, C<sub foo($$){}> could be rewritten as
-C<sub foo : prototype($$){}>.
-
-=head2 More consistent prototype parsing
-
-Multiple semicolons in subroutine prototypes have long been tolerated and
-treated as a single semicolon. There was one case where this did not
-happen. A subroutine whose prototype begins with "*" or ";*" can affect
-whether a bareword is considered a method name or sub call. This now
-applies also to ";;;*".
-
-Whitespace has long been allowed inside subroutine prototypes, so
-C<sub( $ $ )> is equivalent to C<sub($$)>, but until now it was stripped
-when the subroutine was parsed. Hence, whitespace was I<not> allowed in
-prototypes set by C<Scalar::Util::set_prototype>. Now it is permitted,
-and the parser no longer strips whitespace. This means
-C<prototype &mysub> returns the original prototype, whitespace and all.
-
-=head2 C<rand> now uses a consistent random number generator
-
-Previously perl would use a platform specific random number generator, varying
-between the libc rand(), random() or drand48().
-
-This meant that the quality of perl's random numbers would vary from platform
-to platform, from the 15 bits of rand() on Windows to 48-bits on POSIX
-platforms such as Linux with drand48().
-
-Perl now uses its own internal drand48() implementation on all platforms. This
-does not make perl's C<rand> cryptographically secure. [perl #115928]
-
-=head2 New slice syntax
-
-The new C<%hash{...}> and C<%array[...]> syntax returns a list of key/value (or
-index/value) pairs. See L<perldata/"Key/Value Hash Slices">.
-
-=head2 Experimental Postfix Dereferencing
-
-When the C<postderef> feature is in effect, the following syntactical
-equivalencies are set up:
-
- $sref->$*; # same as ${ $sref } # interpolates
- $aref->@*; # same as @{ $aref } # interpolates
- $href->%*; # same as %{ $href }
- $cref->&*; # same as &{ $cref }
- $gref->**; # same as *{ $gref }
-
- $aref->$#*; # same as $#{ $aref }
-
- $gref->*{ $slot }; # same as *{ $gref }{ $slot }
-
- $aref->@[ ... ]; # same as @$aref[ ... ] # interpolates
- $href->@{ ... }; # same as @$href{ ... } # interpolates
- $aref->%[ ... ]; # same as %$aref[ ... ]
- $href->%{ ... }; # same as %$href{ ... }
-
-Those marked as interpolating only interpolate if the associated
-C<postderef_qq> feature is also enabled. This feature is B<experimental> and
-will trigger C<experimental::postderef>-category warnings when used, unless
-they are suppressed.
-
-For more information, consult L<the Postfix Dereference Syntax section of
-perlref|perlref/Postfix Dereference Syntax>.
-
-=head2 Unicode 6.3 now supported
-
-Perl now supports and is shipped with Unicode 6.3 (though Perl may be
-recompiled with any previous Unicode release as well). A detailed list of
-Unicode 6.3 changes is at L<http://www.unicode.org/versions/Unicode6.3.0/>.
-
-=head2 New C<\p{Unicode}> regular expression pattern property
-
-This is a synonym for C<\p{Any}> and matches the set of Unicode-defined
-code points 0 - 0x10FFFF.
-
-=head2 Better 64-bit support
-
-On 64-bit platforms, the internal array functions now use 64-bit offsets,
-allowing Perl arrays to hold more than 2**31 elements, if you have the memory
-available.
-
-The regular expression engine now supports strings longer than 2**31
-characters. [perl #112790, #116907]
-
-The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and
-PerlIO_set_ptrcnt now have SSize_t, rather than int, return values and
-parameters.
-
-=head2 C<S<use locale>> now works on UTF-8 locales
-
-Until this release, only single-byte locales, such as the ISO 8859
-series were supported. Now, the increasingly common multi-byte UTF-8
-locales are also supported. A UTF-8 locale is one in which the
-character set is Unicode and the encoding is UTF-8. The POSIX
-C<LC_CTYPE> category operations (case changing (like C<lc()>, C<"\U">),
-and character classification (C<\w>, C<\D>, C<qr/[[:punct:]]/>)) under
-such a locale work just as if not under locale, but instead as if under
-C<S<use feature 'unicode_strings'>>, except taint rules are followed.
-Sorting remains by code point order in this release. [perl #56820].
-
-=head2 C<S<use locale>> now compiles on systems without locale ability
-
-Previously doing this caused the program to not compile. Within its
-scope the program behaves as if in the "C" locale. Thus programs
-written for platforms that support locales can run on locale-less
-platforms without change. Attempts to change the locale away from the
-"C" locale will, of course, fail.
-
-=head2 More locale initialization fallback options
-
-If there was an error with locales during Perl start-up, it immediately
-gave up and tried to use the C<"C"> locale. Now it first tries using
-other locales given by the environment variables, as detailed in
-L<perllocale/ENVIRONMENT>. For example, if C<LC_ALL> and C<LANG> are
-both set, and using the C<LC_ALL> locale fails, Perl will now try the
-C<LANG> locale, and only if that fails, will it fall back to C<"C">. On
-Windows machines, Perl will try, ahead of using C<"C">, the system
-default locale if all the locales given by environment variables fail.
-
-=head2 C<-DL> runtime option now added for tracing locale setting
-
-This is designed for Perl core developers to aid in field debugging bugs
-regarding locales.
-
-=head2 B<-F> now implies B<-a> and B<-a> implies B<-n>
-
-Previously B<-F> without B<-a> was a no-op, and B<-a> without B<-n> or B<-p>
-was a no-op, with this change, if you supply B<-F> then both B<-a> and B<-n>
-are implied and if you supply B<-a> then B<-n> is implied.
-
-You can still use B<-p> for its extra behaviour. [perl #116190]
-
-=head2 $a and $b warnings exemption
-
-The special variables $a and $b, used in C<sort>, are now exempt from "used
-once" warnings, even where C<sort> is not used. This makes it easier for
-CPAN modules to provide functions using $a and $b for similar purposes.
-[perl #120462]
-
-=head1 Security
-
-=head2 Avoid possible read of free()d memory during parsing
-
-It was possible that free()d memory could be read during parsing in the unusual
-circumstance of the Perl program ending with a heredoc and the last line of the
-file on disk having no terminating newline character. This has now been fixed.
+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.
=head1 Incompatible Changes
-=head2 C<do> can no longer be used to call subroutines
-
-The C<do SUBROUTINE(LIST)> form has resulted in a deprecation warning
-since Perl v5.0.0, and is now a syntax error.
-
-=head2 Quote-like escape changes
-
-The character after C<\c> in a double-quoted string ("..." or qq(...))
-or regular expression must now be a printable character and may not be
-C<{>.
-
-A literal C<{> after C<\B> or C<\b> is now fatal.
-
-These were deprecated in perl v5.14.0.
-
-=head2 Tainting happens under more circumstances; now conforms to documentation
-
-This affects regular expression matching and changing the case of a
-string (C<lc>, C<"\U">, I<etc>.) within the scope of C<use locale>.
-The result is now tainted based on the operation, no matter what the
-contents of the string were, as the documentation (L<perlsec>,
-L<perllocale/SECURITY>) indicates it should. Previously, for the case
-change operation, if the string contained no characters whose case
-change could be affected by the locale, the result would not be tainted.
-For example, the result of C<uc()> on an empty string or one containing
-only above-Latin1 code points is now tainted, and wasn't before. This
-leads to more consistent tainting results. Regular expression patterns
-taint their non-binary results (like C<$&>, C<$2>) if and only if the
-pattern contains elements whose matching depends on the current
-(potentially tainted) locale. Like the case changing functions, the
-actual contents of the string being matched now do not matter, whereas
-formerly it did. For example, if the pattern contains a C<\w>, the
-results will be tainted even if the match did not have to use that
-portion of the pattern to succeed or fail, because what a C<\w> matches
-depends on locale. However, for example, a C<.> in a pattern will not
-enable tainting, because the dot matches any single character, and what
-the current locale is doesn't change in any way what matches and what
-doesn't.
-
-=head2 C<\p{}>, C<\P{}> matching has changed for non-Unicode code
-points.
-
-C<\p{}> and C<\P{}> are defined by Unicode only on Unicode-defined code
-points (C<U+0000> through C<U+10FFFF>). Their behavior on matching
-these legal Unicode code points is unchanged, but there are changes for
-code points C<0x110000> and above. Previously, Perl treated the result
-of matching C<\p{}> and C<\P{}> against these as C<undef>, which
-translates into "false". For C<\P{}>, this was then complemented into
-"true". A warning was supposed to be raised when this happened.
-However, various optimizations could prevent the warning, and the
-results were often counter-intuitive, with both a match and its seeming
-complement being false. Now all non-Unicode code points are treated as
-typical unassigned Unicode code points. This generally is more
-Do-What-I-Mean. A warning is raised only if the results are arguably
-different from a strict Unicode approach, and from what Perl used to do.
-Code that needs to be strictly Unicode compliant can make this warning
-fatal, and then Perl always raises the warning.
-
-Details are in L<perlunicode/Beyond Unicode code points>.
-
-=head2 C<\p{All}> has been expanded to match all possible code points
-
-The Perl-defined regular expression pattern element C<\p{All}>, unused
-on CPAN, used to match just the Unicode code points; now it matches all
-possible code points; that is, it is equivalent to C<qr/./s>. Thus
-C<\p{All}> is no longer synonymous with C<\p{Any}>, which continues to
-match just the Unicode code points, as Unicode says it should.
-
-=head2 Data::Dumper's output may change
-
-Depending on the data structures dumped and the settings set for
-Data::Dumper, the dumped output may have changed from previous
-versions.
-
-If you have tests that depend on the exact output of Data::Dumper,
-they may fail.
-
-To avoid this problem in your code, test against the data structure
-from evaluating the dumped structure, instead of the dump itself.
-
-=head2 Locale decimal point character no longer leaks outside of S<C<use locale>> scope
-
-This is actually a bug fix, but some code has come to rely on the bug
-being present, so this change is listed here. The current locale that
-the program is running under is not supposed to be visible to Perl code
-except within the scope of a S<C<use locale>>. However, until now under
-certain circumstances, the character used for a decimal point (often a
-comma) leaked outside the scope. If your code is affected by this
-change, simply add a S<C<use locale>>.
-
-=head2 Assignments of Windows sockets error codes to $! now prefer F<errno.h> values over WSAGetLastError() values
-
-In previous versions of Perl, Windows sockets error codes as returned by
-WSAGetLastError() were assigned to $!, and some constants such as ECONNABORTED,
-not in F<errno.h> in VC++ (or the various Windows ports of gcc) were defined to
-corresponding WSAE* values to allow $! to be tested against the E* constants
-exported by L<Errno> and L<POSIX>.
-
-This worked well until VC++ 2010 and later, which introduced new E* constants
-with values E<gt> 100 into F<errno.h>, including some being (re)defined by perl
-to WSAE* values. That caused problems when linking XS code against other
-libraries which used the original definitions of F<errno.h> constants.
-
-To avoid this incompatibility, perl now maps WSAE* error codes to E* values
-where possible, and assigns those values to $!. The E* constants exported by
-L<Errno> and L<POSIX> are updated to match so that testing $! against them,
-wherever previously possible, will continue to work as expected, and all E*
-constants found in F<errno.h> are now exported from those modules with their
-original F<errno.h> values.
-
-In order to avoid breakage in existing Perl code which assigns WSAE* values to
-$!, perl now intercepts the assignment and performs the same mapping to E*
-values as it uses internally when assigning to $! itself.
-
-However, one backwards-incompatibility remains: existing Perl code which
-compares $! against the numeric values of the WSAE* error codes that were
-previously assigned to $! will now be broken in those cases where a
-corresponding E* value has been assigned instead. This is only an issue for
-those E* values E<lt> 100, which were always exported from L<Errno> and
-L<POSIX> with their original F<errno.h> values, and therefore could not be used
-for WSAE* error code tests (e.g. WSAEINVAL is 10022, but the corresponding
-EINVAL is 22). (E* values E<gt> 100, if present, were redefined to WSAE*
-values anyway, so compatibility can be achieved by using the E* constants,
-which will work both before and after this change, albeit using different
-numeric values under the hood.)
-
-=head2 Functions C<PerlIO_vsprintf> and C<PerlIO_sprintf> have been removed
-
-These two functions, undocumented, unused in CPAN, and problematic, have been
-removed.
-
-=head1 Deprecations
-
-=head2 The C</\C/> character class
-
-The C</\C/> regular expression character class is deprecated. From perl
-5.22 onwards it will generate a warning, and from perl 5.24 onwards it
-will be a regular expression compiler error. If you need to examine the
-individual bytes that make up a UTF8-encoded character, then use
-C<utf8::encode()> on the string (or a copy) first.
-
-=head2 Literal control characters in variable names
-
-This deprecation affects things like $\cT, where \cT is a literal control (such
-as a C<NAK> or C<NEGATIVE ACKNOWLEDGE> character) in
-the source code. Surprisingly, it appears that originally this was intended as
-the canonical way of accessing variables like $^T, with the caret form only
-being added as an alternative.
-
-The literal control form is being deprecated for two main reasons. It has what
-are likely unfixable bugs, such as $\cI not working as an alias for $^I, and
-their usage not being portable to non-ASCII platforms: While $^T will work
-everywhere, \cT is whitespace in EBCDIC. [perl #119123]
-
-=head2 References to non-integers and non-positive integers in C<$/>
-
-Setting C<$/> to a reference to zero or a reference to a negative integer is
-now deprecated, and will behave B<exactly> as though it was set to C<undef>.
-If you want slurp behavior set C<$/> to C<undef> explicitly.
-
-Setting C<$/> to a reference to a non integer is now forbidden and will
-throw an error. Perl has never documented what would happen in this
-context and while it used to behave the same as setting C<$/> to
-the address of the references in future it may behave differently, so we
-have forbidden this usage.
-
-=head2 Character matching routines in POSIX
-
-Use of any of these functions in the C<POSIX> module is now deprecated:
-C<isalnum>, C<isalpha>, C<iscntrl>, C<isdigit>, C<isgraph>, C<islower>,
-C<isprint>, C<ispunct>, C<isspace>, C<isupper>, and C<isxdigit>. The
-functions are buggy and don't work on UTF-8 encoded strings. See their
-entries in L<POSIX> for more information.
-
-A warning is raised on the first call to any of them from each place in
-the code that they are called. (Hence a repeated statement in a loop
-will raise just the one warning.)
-
-=head2 Interpreter-based threads are now I<discouraged>
-
-The "interpreter-based threads" provided by Perl are not the fast, lightweight
-system for multitasking that one might expect or hope for. Threads are
-implemented in a way that make them easy to misuse. Few people know how to
-use them correctly or will be able to provide help.
-
-The use of interpreter-based threads in perl is officially
-L<discouraged|perlpolicy/discouraged>.
-
-=head2 Module removals
-
-The following modules will be removed from the core distribution in a
-future release, and will at that time need to be installed from CPAN.
-Distributions on CPAN which require these modules will need to list them as
-prerequisites.
-
-The core versions of these modules will now issue C<"deprecated">-category
-warnings to alert you to this fact. To silence these deprecation warnings,
-install the modules in question from CPAN.
-
-Note that the planned removal of these modules from core does not reflect a
-judgement about the quality of the code and should not be taken as a suggestion
-that their use be halted. Their disinclusion from core primarily hinges on
-their necessity to bootstrapping a fully functional, CPAN-capable Perl
-installation, not on concerns over their design.
-
-=over
-
-=item L<CGI> and its associated CGI:: packages
-
-=item L<inc::latest>
-
-=item L<Package::Constants>
-
-=item L<Module::Build> and its associated Module::Build:: packages
-
-=back
-
-=head2 Utility removals
-
-The following utilities will be removed from the core distribution in a
-future release, and will at that time need to be installed from CPAN.
-
-=over 4
-
-=item L<find2perl>
-
-=item L<s2p>
-
-=item L<a2p>
-
-=back
+There are no changes intentionally incompatible with 5.20.0. If any exist,
+they are bugs, and we request that you submit a report. See L</Reporting Bugs>
+below.
=head1 Performance Enhancements
=item *
-Perl has a new copy-on-write mechanism that avoids the need to copy the
-internal string buffer when assigning from one scalar to another. This
-makes copying large strings appear much faster. Modifying one of the two
-(or more) strings after an assignment will force a copy internally. This
-makes it unnecessary to pass strings by reference for efficiency.
-
-This feature was already available in 5.18.0, but wasn't enabled by
-default. It is the default now, and so you no longer need build perl with
-the F<Configure> argument:
-
- -Accflags=-DPERL_NEW_COPY_ON_WRITE
-
-It can be disabled (for now) in a perl build with:
-
- -Accflags=-DPERL_NO_COW
-
-On some operating systems Perl can be compiled in such a way that any
-attempt to modify string buffers shared by multiple SVs will crash. This
-way XS authors can test that their modules handle copy-on-write scalars
-correctly. See L<perlguts/"Copy on Write"> for detail.
-
-=item *
-
-Perl has an optimizer for regular expression patterns. It analyzes the pattern
-to find things such as the minimum length a string has to be to match, etc. It
-now better handles code points that are above the Latin1 range.
-
-=item *
-
-Executing a regex that contains the C<^> anchor (or its variant under the
-C</m> flag) has been made much faster in several situations.
-
-=item *
-
-Precomputed hash values are now used in more places during method lookup.
-
-=item *
-
-Constant hash key lookups (C<$hash{key}> as opposed to C<$hash{$key}>) have
-long had the internal hash value computed at compile time, to speed up
-lookup. This optimisation has only now been applied to hash slices as
-well.
-
-=item *
-
-Combined C<and> and C<or> operators in void context, like those
-generated for C<< unless ($a && $b) >> and C<< if ($a || b) >> now
-short circuit directly to the end of the statement. [perl #120128]
-
-=item *
-
-In certain situations, when C<return> is the last statement in a subroutine's
-main scope, it will be optimized out. This means code like:
-
- sub baz { return $cat; }
-
-will now behave like:
-
- sub baz { $cat; }
-
-which is notably faster.
-
-[perl #120765]
-
-=item *
-
-Code like:
-
- my $x; # or @x, %x
- my $y;
-
-is now optimized to:
-
- my ($x, $y);
-
-In combination with the L<padrange optimization introduced in
-v5.18.0|perl5180delta/Internal Changes>, this means longer uninitialized my
-variable statements are also optimized, so:
-
- my $x; my @y; my %z;
-
-becomes:
-
- my ($x, @y, %z);
-
-[perl #121077]
-
-=item *
-
-The creation of certain sorts of lists, including array and hash slices, is now
-faster.
-
-=item *
-
-The optimisation for arrays indexed with a small constant integer is now
-applied for integers in the range -128..127, rather than 0..255. This should
-speed up Perl code using expressions like C<$x[-1]>, at the expense of
-(presumably much rarer) code using expressions like C<$x[200]>.
-
-=item *
-
-The first iteration over a large hash (using C<keys> or C<each>) is now
-faster. This is achieved by preallocating the hash's internal iterator
-state, rather than lazily creating it when the hash is first iterated. (For
-small hashes, the iterator is still created only when first needed. The
-assumption is that small hashes are more likely to be used as objects, and
-therefore never allocated. For large hashes, that's less likely to be true,
-and the cost of allocating the iterator is swamped by the cost of allocating
-space for the hash itself.)
-
-=item *
-
-When doing a global regex match on a string that came from the C<readline>
-or C<E<lt>E<gt>> operator, the data is no longer copied unnecessarily.
-[perl #121259]
-
-=item *
-
-Dereferencing (as in C<$obj-E<gt>[0]> or C<$obj-E<gt>{k}>) is now faster
-when C<$obj> is an instance of a class that has overloaded methods, but
-doesn't overload any of the dereferencing methods C<@{}>, C<%{}>, and so on.
-
-=item *
-
-Perl's optimiser no longer skips optimising code that follows certain
-C<eval {}> expressions (including those with an apparent infinite loop).
+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>
=item *
-The implementation now does a better job of avoiding meaningless work at
-runtime. Internal effect-free "null" operations (created as a side-effect of
-parsing Perl programs) are normally deleted during compilation. That
-deletion is now applied in some situations that weren't previously handled.
-
-=item *
-
-Perl now does less disk I/O when dealing with Unicode properties that cover
-up to three ranges of consecutive code points.
+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>
=back
=head1 Modules and Pragmata
-=head2 New Modules and Pragmata
-
-=over 4
-
-=item *
-
-L<experimental> 0.007 has been added to the Perl core.
-
-=item *
-
-L<IO::Socket::IP> 0.29 has been added to the Perl core.
-
-=back
-
=head2 Updated Modules and Pragmata
=over 4
=item *
-L<Archive::Tar> has been upgraded from version 1.90 to 1.96.
-
-=item *
+L<Config::Perl::V> has been upgraded from version 0.20 to 0.22.
-L<arybase> has been upgraded from version 0.06 to 0.07.
+The list of Perl versions covered has been updated and some flaws in the
+parsing have been fixed.
=item *
-L<Attribute::Handlers> has been upgraded from version 0.94 to 0.96.
+L<Exporter> has been upgraded from version 5.70 to 5.71.
-=item *
-
-L<attributes> has been upgraded from version 0.21 to 0.22.
+Illegal POD syntax in the documentation has been corrected.
=item *
-L<autodie> has been upgraded from version 2.13 to 2.23.
-
-=item *
+L<ExtUtils::CBuilder> has been upgraded from version 0.280216 to 0.280217.
-L<AutoLoader> has been upgraded from version 5.73 to 5.74.
+Android builds now link to both B<-lperl> and C<$Config::Config{perllibs}>.
=item *
-L<autouse> has been upgraded from version 1.07 to 1.08.
+L<File::Copy> has been upgraded from version 2.29 to 2.30.
-=item *
-
-L<B> has been upgraded from version 1.42 to 1.48.
+The documentation now notes that C<copy> will not overwrite read-only files.
=item *
-L<B::Concise> has been upgraded from version 0.95 to 0.992.
-
-=item *
+L<Module::CoreList> has been upgraded from version 3.11 to 5.020001.
-L<B::Debug> has been upgraded from version 1.18 to 1.19.
+The list of Perl versions covered has been updated.
=item *
-L<B::Deparse> has been upgraded from version 1.20 to 1.26.
+The PathTools module collection has been upgraded from version 3.47 to 3.48.
-=item *
-
-L<base> has been upgraded from version 2.18 to 2.22.
+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>
=item *
-L<Benchmark> has been upgraded from version 1.15 to 1.18.
-
-=item *
+L<PerlIO::via> has been upgraded from version 0.14 to 0.15.
-L<bignum> has been upgraded from version 0.33 to 0.37.
+A minor portability improvement has been made to the XS implementation.
=item *
-L<Carp> has been upgraded from version 1.29 to 1.3301.
+L<Unicode::UCD> has been upgraded from version 0.57 to 0.58.
-=item *
-
-L<CGI> has been upgraded from version 3.63 to 3.65.
-NOTE: L<CGI> is deprecated and may be removed from a future version of Perl.
+The documentation includes many clarifications and fixes.
=item *
-L<charnames> has been upgraded from version 1.36 to 1.40.
-
-=item *
+L<utf8> has been upgraded from version 1.13 to 1.13_01.
-L<Class::Struct> has been upgraded from version 0.64 to 0.65.
+The documentation has some minor formatting improvements.
=item *
-L<Compress::Raw::Bzip2> has been upgraded from version 2.060 to 2.064.
+L<version> has been upgraded from version 0.9908 to 0.9909.
-=item *
+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>
-L<Compress::Raw::Zlib> has been upgraded from version 2.060 to 2.065.
+=back
-=item *
+=head1 Documentation
-L<Config::Perl::V> has been upgraded from version 0.17 to 0.20.
+=head2 Changes to Existing Documentation
-=item *
+=head3 L<perlapi>
-L<constant> has been upgraded from version 1.27 to 1.31.
+=over 4
=item *
-L<CPAN> has been upgraded from version 2.00 to 2.05.
+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>
=item *
-L<CPAN::Meta> has been upgraded from version 2.120921 to 2.140640.
+Note that C<SvSetSV> doesn't do set magic.
=item *
-L<CPAN::Meta::Requirements> has been upgraded from version 2.122 to 2.125.
+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>
=item *
-L<CPAN::Meta::YAML> has been upgraded from version 0.008 to 0.012.
-
-=item *
+Clarify where C<NUL> may be embedded or is required to terminate a string.
-L<Data::Dumper> has been upgraded from version 2.145 to 2.151.
+=back
-=item *
+=head3 L<perlfunc>
-L<DB> has been upgraded from version 1.04 to 1.07.
+=over 4
=item *
-L<DB_File> has been upgraded from version 1.827 to 1.831.
+Clarify the meaning of C<-B> and C<-T>.
=item *
-L<DBM_Filter> has been upgraded from version 0.05 to 0.06.
+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>
=item *
-L<deprecate> has been upgraded from version 0.02 to 0.03.
+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>
=item *
-L<Devel::Peek> has been upgraded from version 1.11 to 1.16.
+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>
=item *
-L<Devel::PPPort> has been upgraded from version 3.20 to 3.21.
-
-=item *
+Clarify the meaning of C<our>.
+L<[perl #122132]|https://rt.perl.org/Ticket/Display.html?id=122132>
-L<diagnostics> has been upgraded from version 1.31 to 1.34.
+=back
-=item *
+=head3 L<perlguts>
-L<Digest::MD5> has been upgraded from version 2.52 to 2.53.
+=over 4
=item *
-L<Digest::SHA> has been upgraded from version 5.84 to 5.88.
-
-=item *
+Explain various ways of modifying an existing SV's buffer.
+L<[perl #116925]|https://rt.perl.org/Ticket/Display.html?id=116925>
-L<DynaLoader> has been upgraded from version 1.18 to 1.25.
+=back
-=item *
+=head3 L<perlpolicy>
-L<Encode> has been upgraded from version 2.49 to 2.60.
+=over 4
=item *
-L<encoding> has been upgraded from version 2.6_01 to 2.12.
+We now have a code of conduct for the I<< p5p >> mailing list, as documented in
+L<< perlpolicy/STANDARDS OF CONDUCT >>.
-=item *
-
-L<English> has been upgraded from version 1.06 to 1.09.
+=back
-=item *
+=head3 L<perlre>
-L<Errno> has been upgraded from version 1.18 to 1.20_03.
+=over 4
=item *
-L<Exporter> has been upgraded from version 5.68 to 5.70.
-
-=item *
+The C</x> modifier has been clarified to note that comments cannot be continued
+onto the next line by escaping them.
-L<ExtUtils::CBuilder> has been upgraded from version 0.280210 to 0.280216.
+=back
-=item *
+=head3 L<perlsyn>
-L<ExtUtils::Command> has been upgraded from version 1.17 to 1.18.
+=over 4
=item *
-L<ExtUtils::Embed> has been upgraded from version 1.30 to 1.32.
-
-=item *
+Mention the use of empty conditionals in C<for>/C<while> loops for infinite
+loops.
-L<ExtUtils::Install> has been upgraded from version 1.59 to 1.67.
+=back
-=item *
+=head3 L<perlxs>
-L<ExtUtils::MakeMaker> has been upgraded from version 6.66 to 6.98.
+=over 4
=item *
-L<ExtUtils::Miniperl> has been upgraded from version to 1.01.
-
-=item *
+Added a discussion of locale issues in XS code.
-L<ExtUtils::ParseXS> has been upgraded from version 3.18 to 3.24.
+=back
-=item *
+=head1 Diagnostics
-L<ExtUtils::Typemaps> has been upgraded from version 3.19 to 3.24.
+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>.
-=item *
+=head2 Changes to Existing Diagnostics
-L<ExtUtils::XSSymSet> has been upgraded from version 1.2 to 1.3.
+=over 4
=item *
-L<feature> has been upgraded from version 1.32 to 1.36.
+L<Variable length lookbehind not implemented in regex mE<sol>%sE<sol>|perldiag/"Variable length lookbehind not implemented in regex m/%s/">
-=item *
+Information about Unicode behaviour has been added.
-L<fields> has been upgraded from version 2.16 to 2.17.
+=back
-=item *
+=head1 Configuration and Compilation
-L<File::Basename> has been upgraded from version 2.84 to 2.85.
+=over 4
=item *
-L<File::Copy> has been upgraded from version 2.26 to 2.29.
-
-=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>
-L<File::DosGlob> has been upgraded from version 1.10 to 1.12.
+=back
-=item *
+=head1 Platform Support
-L<File::Fetch> has been upgraded from version 0.38 to 0.48.
+=head2 Platform-Specific Notes
-=item *
+=over 4
-L<File::Find> has been upgraded from version 1.23 to 1.27.
+=item Android
-=item *
+Build support has been improved for cross-compiling in general and for Android
+in particular.
-L<File::Glob> has been upgraded from version 1.20 to 1.23.
+=item OpenBSD
-=item *
+Corrected architectures and version numbers used in configuration hints when
+building Perl.
-L<File::Spec> has been upgraded from version 3.40 to 3.47.
+=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.
-L<File::Temp> has been upgraded from version 0.23 to 0.2304.
+=item VMS
-=item *
+An old bug in feature checking, mainly affecting pre-7.3 systems, has been
+fixed.
-L<FileCache> has been upgraded from version 1.08 to 1.09.
+=item Windows
-=item *
+C<%I64d> is now being used instead of C<%lld> for MinGW.
-L<Filter::Simple> has been upgraded from version 0.89 to 0.91.
+=back
-=item *
+=head1 Internal Changes
-L<Filter::Util::Call> has been upgraded from version 1.45 to 1.49.
+=over 4
=item *
-L<Getopt::Long> has been upgraded from version 2.39 to 2.42.
-
-=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.
-L<Getopt::Std> has been upgraded from version 1.07 to 1.10.
+=back
-=item *
+=head1 Selected Bug Fixes
-L<Hash::Util::FieldHash> has been upgraded from version 1.10 to 1.15.
+=over 4
=item *
-L<HTTP::Tiny> has been upgraded from version 0.025 to 0.043.
+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 *
-L<I18N::Langinfo> has been upgraded from version 0.10 to 0.11.
+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 *
-L<I18N::LangTags> has been upgraded from version 0.39 to 0.40.
-
-=item *
+C<system> and friends should now work properly on more Android builds.
-L<if> has been upgraded from version 0.0602 to 0.0603.
+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 *
-L<inc::latest> has been upgraded from version 0.4003 to 0.4205.
-NOTE: L<inc::latest> is deprecated and may be removed from a future version of Perl.
-
-=item *
-
-L<integer> has been upgraded from version 1.00 to 1.01.
-
-=item *
-
-L<IO> has been upgraded from version 1.28 to 1.31.
-
-=item *
-
-L<IO::Compress::Gzip> and friends have been upgraded from version 2.060 to
-2.064.
-
-=item *
-
-L<IPC::Cmd> has been upgraded from version 0.80 to 0.92.
-
-=item *
-
-L<IPC::Open3> has been upgraded from version 1.13 to 1.16.
-
-=item *
-
-L<IPC::SysV> has been upgraded from version 2.03 to 2.04.
-
-=item *
-
-L<JSON::PP> has been upgraded from version 2.27202 to 2.27203.
-
-=item *
-
-L<List::Util> has been upgraded from version 1.27 to 1.38.
-
-=item *
-
-L<locale> has been upgraded from version 1.02 to 1.03.
-
-=item *
-
-L<Locale::Codes> has been upgraded from version 3.25 to 3.30.
-
-=item *
-
-L<Locale::Maketext> has been upgraded from version 1.23 to 1.25.
-
-=item *
-
-L<Math::BigInt> has been upgraded from version 1.9991 to 1.9993.
-
-=item *
-
-L<Math::BigInt::FastCalc> has been upgraded from version 0.30 to 0.31.
-
-=item *
-
-L<Math::BigRat> has been upgraded from version 0.2604 to 0.2606.
-
-=item *
-
-L<MIME::Base64> has been upgraded from version 3.13 to 3.14.
-
-=item *
-
-L<Module::Build> has been upgraded from version 0.4003 to 0.4205.
-NOTE: L<Module::Build> is deprecated and may be removed from a future version of Perl.
-
-=item *
-
-L<Module::CoreList> has been upgraded from version 2.89 to 3.10.
-
-=item *
-
-L<Module::Load> has been upgraded from version 0.24 to 0.32.
-
-=item *
-
-L<Module::Load::Conditional> has been upgraded from version 0.54 to 0.62.
-
-=item *
-
-L<Module::Metadata> has been upgraded from version 1.000011 to 1.000019.
-
-=item *
-
-L<mro> has been upgraded from version 1.11 to 1.16.
-
-=item *
-
-L<Net::Ping> has been upgraded from version 2.41 to 2.43.
-
-=item *
-
-L<Opcode> has been upgraded from version 1.25 to 1.27.
-
-=item *
-
-L<Package::Constants> has been upgraded from version 0.02 to 0.04.
-NOTE: L<Package::Constants> is deprecated and may be removed from a future version of Perl.
-
-=item *
-
-L<Params::Check> has been upgraded from version 0.36 to 0.38.
-
-=item *
-
-L<parent> has been upgraded from version 0.225 to 0.228.
-
-=item *
-
-L<Parse::CPAN::Meta> has been upgraded from version 1.4404 to 1.4414.
-
-=item *
-
-L<Perl::OSType> has been upgraded from version 1.003 to 1.007.
-
-=item *
-
-L<perlfaq> has been upgraded from version 5.0150042 to 5.0150044.
-
-=item *
-
-L<PerlIO> has been upgraded from version 1.07 to 1.09.
-
-=item *
-
-L<PerlIO::encoding> has been upgraded from version 0.16 to 0.18.
-
-=item *
-
-L<PerlIO::scalar> has been upgraded from version 0.16 to 0.18.
-
-=item *
-
-L<PerlIO::via> has been upgraded from version 0.12 to 0.14.
-
-=item *
-
-L<Pod::Escapes> has been upgraded from version 1.04 to 1.06.
-
-=item *
-
-L<Pod::Functions> has been upgraded from version 1.06 to 1.08.
-
-=item *
-
-L<Pod::Html> has been upgraded from version 1.18 to 1.21.
-
-=item *
-
-L<Pod::Parser> has been upgraded from version 1.60 to 1.62.
-
-=item *
-
-L<Pod::Perldoc> has been upgraded from version 3.19 to 3.23.
-
-=item *
-
-L<Pod::Usage> has been upgraded from version 1.61 to 1.63.
-
-=item *
-
-L<POSIX> has been upgraded from version 1.32 to 1.38_03.
-
-=item *
-
-L<re> has been upgraded from version 0.23 to 0.26.
-
-=item *
-
-L<Safe> has been upgraded from version 2.35 to 2.37.
-
-=item *
-
-L<Scalar::Util> has been upgraded from version 1.27 to 1.38.
-
-=item *
-
-L<SDBM_File> has been upgraded from version 1.09 to 1.11.
-
-=item *
-
-L<Socket> has been upgraded from version 2.009 to 2.013.
-
-=item *
-
-L<Storable> has been upgraded from version 2.41 to 2.49.
-
-=item *
-
-L<strict> has been upgraded from version 1.07 to 1.08.
-
-=item *
-
-L<subs> has been upgraded from version 1.01 to 1.02.
-
-=item *
-
-L<Sys::Hostname> has been upgraded from version 1.17 to 1.18.
-
-=item *
-
-L<Sys::Syslog> has been upgraded from version 0.32 to 0.33.
-
-=item *
-
-L<Term::Cap> has been upgraded from version 1.13 to 1.15.
-
-=item *
-
-L<Term::ReadLine> has been upgraded from version 1.12 to 1.14.
-
-=item *
-
-L<Test::Harness> has been upgraded from version 3.26 to 3.30.
-
-=item *
-
-L<Test::Simple> has been upgraded from version 0.98 to 1.001002.
-
-=item *
-
-L<Text::ParseWords> has been upgraded from version 3.28 to 3.29.
-
-=item *
-
-L<Text::Tabs> has been upgraded from version 2012.0818 to 2013.0523.
-
-=item *
-
-L<Text::Wrap> has been upgraded from version 2012.0818 to 2013.0523.
-
-=item *
-
-L<Thread> has been upgraded from version 3.02 to 3.04.
-
-=item *
-
-L<Thread::Queue> has been upgraded from version 3.02 to 3.05.
-
-=item *
-
-L<threads> has been upgraded from version 1.86 to 1.93.
-
-=item *
-
-L<threads::shared> has been upgraded from version 1.43 to 1.46.
-
-=item *
-
-L<Tie::Array> has been upgraded from version 1.05 to 1.06.
-
-=item *
-
-L<Tie::File> has been upgraded from version 0.99 to 1.00.
-
-=item *
-
-L<Tie::Hash> has been upgraded from version 1.04 to 1.05.
-
-=item *
-
-L<Tie::Scalar> has been upgraded from version 1.02 to 1.03.
-
-=item *
-
-L<Tie::StdHandle> has been upgraded from version 4.3 to 4.4.
-
-=item *
-
-L<Time::HiRes> has been upgraded from version 1.9725 to 1.9726.
-
-=item *
-
-L<Time::Piece> has been upgraded from version 1.20_01 to 1.27.
-
-=item *
-
-L<Unicode::Collate> has been upgraded from version 0.97 to 1.04.
-
-=item *
-
-L<Unicode::Normalize> has been upgraded from version 1.16 to 1.17.
-
-=item *
-
-L<Unicode::UCD> has been upgraded from version 0.51 to 0.57.
-
-=item *
-
-L<utf8> has been upgraded from version 1.10 to 1.13.
-
-=item *
-
-L<version> has been upgraded from version 0.9902 to 0.9908.
-
-=item *
-
-L<vmsish> has been upgraded from version 1.03 to 1.04.
-
-=item *
-
-L<warnings> has been upgraded from version 1.18 to 1.23.
-
-=item *
-
-L<Win32> has been upgraded from version 0.47 to 0.49.
-
-=item *
-
-L<XS::Typemap> has been upgraded from version 0.10 to 0.13.
-
-=item *
-
-L<XSLoader> has been upgraded from version 0.16 to 0.17.
-
-=back
-
-=head1 Documentation
-
-=head2 New Documentation
-
-=head3 L<perlrepository>
-
-This document was removed (actually, renamed L<perlgit> and given a major
-overhaul) in Perl v5.14, causing Perl documentation websites to show the now
-out of date version in Perl v5.12 as the latest version. It has now been
-restored in stub form, directing readers to current information.
-
-=head2 Changes to Existing Documentation
-
-=head3 L<perldata>
-
-=over 4
-
-=item *
-
-New sections have been added to document the new index/value array slice and
-key/value hash slice syntax.
-
-=back
-
-=head3 L<perldebguts>
-
-=over 4
-
-=item *
-
-The C<DB::goto> and C<DB::lsub> debugger subroutines are now documented. [perl
-#77680]
-
-=back
-
-=head3 L<perlexperiment>
-
-=over
-
-=item *
-
-C<\s> matching C<\cK> is marked experimental.
-
-=item *
-
-ithreads were accepted in v5.8.0 (but are discouraged as of v5.20.0).
-
-=item *
-
-Long doubles are not considered experimental.
-
-=item *
-
-Code in regular expressions, regular expression backtracking verbs,
-and lvalue subroutines are no longer listed as experimental. (This
-also affects L<perlre> and L<perlsub>.)
-
-=back
-
-=head3 L<perlfunc>
-
-=over
-
-=item *
-
-C<chop> and C<chomp> now note that they can reset the hash iterator.
-
-=item *
-
-C<exec>'s handling of arguments is now more clearly documented.
-
-=item *
-
-C<eval EXPR> now has caveats about expanding floating point numbers in some
-locales.
-
-=item *
-
-C<goto EXPR> is now documented to handle an expression that evalutes to a
-code reference as if it was C<goto &$coderef>. This behavior is at least ten
-years old.
-
-=item *
-
-Since Perl v5.10, it has been possible for subroutines in C<@INC> to return
-a reference to a scalar holding initial source code to prepend to the file.
-This is now documented.
-
-=item *
-
-The documentation of C<ref> has been updated to recommend the use of
-C<blessed>, C<isa> and C<reftype> when dealing with references to blessed
-objects.
-
-=back
-
-=head3 L<perlguts>
-
-=over 4
-
-=item *
-
-Numerous minor changes have been made to reflect changes made to the perl
-internals in this release.
-
-=item *
-
-New sections on L<Read-Only Values|perlguts/"Read-Only Values"> and
-L<Copy on Write|perlguts/"Copy on Write"> have been added.
-
-=back
-
-=head3 L<perlhack>
-
-=over 4
-
-=item *
-
-The L<Super Quick Patch Guide|perlhack/SUPER QUICK PATCH GUIDE> section has
-been updated.
-
-=back
-
-=head3 L<perlhacktips>
-
-=over 4
-
-=item *
-
-The documentation has been updated to include some more examples of C<gdb>
-usage.
-
-=back
-
-=head2 L<perllexwarn>
-
-=over 4
-
-=item *
-
-The L<perllexwarn> documentation used to describe the hierarchy of warning
-categories understood by the L<warnings> pragma. That description has now
-been moved to the L<warnings> documentation itself, leaving L<perllexwarn>
-as a stub that points to it. This change consolidates all documentation for
-lexical warnings in a single place.
-
-=back
-
-=head3 L<perllocale>
-
-=over
-
-=item *
-
-The documentation now mentions F<fc()> and C<\F>, and includes many
-clarifications and corrections in general.
-
-=back
-
-=head3 L<perlop>
-
-=over 4
-
-=item *
-
-The language design of Perl has always called for monomorphic operators.
-This is now mentioned explicitly.
-
-=back
-
-=head3 L<perlopentut>
-
-=over 4
-
-=item *
-
-The C<open> tutorial has been completely rewritten by Tom Christiansen, and now
-focuses on covering only the basics, rather than providing a comprehensive
-reference to all things openable. This rewrite came as the result of a
-vigorous discussion on perl5-porters kicked off by a set of improvements
-written by Alexander Hartmaier to the existing L<perlopentut>. A "more than
-you ever wanted to know about C<open>" document may follow in subsequent
-versions of perl.
-
-=back
-
-=head3 L<perlre>
-
-=over 4
-
-=item *
-
-The fact that the regexp engine makes no effort to call (?{}) and (??{})
-constructs any specified number of times (although it will basically DWIM
-in case of a successful match) has been documented.
-
-=item *
-
-The C</r> modifier (for non-destructive substitution) is now documented. [perl
-#119151]
-
-=item *
-
-The documentation for C</x> and C<(?# comment)> has been expanded and clarified.
-
-=back
-
-=head3 L<perlreguts>
-
-=over 4
-
-=item *
-
-The documentation has been updated in the light of recent changes to
-F<regcomp.c>.
-
-=back
-
-=head3 L<perlsub>
-
-=over 4
-
-=item *
-
-The need to predeclare recursive functions with prototypes in order for the
-prototype to be honoured in the recursive call is now documented. [perl #2726]
-
-=item *
-
-A list of subroutine names used by the perl implementation is now included.
-[perl #77680]
-
-=back
-
-=head3 L<perltrap>
-
-=over 4
-
-=item *
-
-There is now a L<JavaScript|perltrap/JavaScript Traps> section.
-
-=back
-
-=head3 L<perlunicode>
-
-=over 4
-
-=item *
-
-The documentation has been updated to reflect C<Bidi_Class> changes in
-Unicode 6.3.
-
-=back
-
-=head3 L<perlvar>
-
-=over 4
-
-=item *
-
-A new section explaining the performance issues of $`, $& and $', including
-workarounds and changes in different versions of Perl, has been added.
-
-=item *
-
-Three L<English> variable names which have long been documented but do not
-actually exist have been removed from the documentation. These were
-C<$OLD_PERL_VERSION>, C<$OFMT>, and C<$ARRAY_BASE>.
-
-=back
-
-=head3 L<perlxs>
-
-=over 4
-
-=item *
-
-Several problems in the C<MY_CXT> example have been fixed.
-
-=back
-
-=head1 Diagnostics
-
-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 New Diagnostics
-
-=head3 New Errors
-
-=over 4
-
-=item *
-
-L<delete argument is indexE<sol>value array slice, use array slice|perldiag/"delete argument is index/value array slice, use array slice">
-
-(F) You used index/value array slice syntax (C<%array[...]>) as the argument to
-C<delete>. You probably meant C<@array[...]> with an @ symbol instead.
-
-=item *
-
-L<delete argument is keyE<sol>value hash slice, use hash slice|perldiag/"delete argument is key/value hash slice, use hash slice">
-
-(F) You used key/value hash slice syntax (C<%hash{...}>) as the argument to
-C<delete>. You probably meant C<@hash{...}> with an @ symbol instead.
-
-=item *
-
-L<Magical list constants are not supported|perldiag/"Magical list constants are
-not supported">
-
-(F) You assigned a magical array to a stash element, and then tried to use the
-subroutine from the same slot. You are asking Perl to do something it cannot
-do, details subject to change between Perl versions.
-
-=item *
-
-Added L<Setting $E<sol> to a %s reference is forbidden|perldiag/"Setting $E<sol> to %s reference is forbidden">
-
-=back
-
-=head3 New Warnings
-
-=over 4
-
-=item *
-
-L<%s on reference is experimental|perldiag/"push on reference is experimental">:
-
-The "auto-deref" feature is experimental.
-
-Starting in v5.14.0, it was possible to use push, pop, keys, and other
-built-in functions not only on aggregate types, but on references to
-them. The feature was not deployed to its original intended
-specification, and now may become redundant to postfix dereferencing.
-It has always been categorized as an experimental feature, and in
-v5.20.0 is carries a warning as such.
-
-Warnings will now be issued at compile time when these operations are
-detected.
-
- no if $] >= 5.01908, warnings => "experimental::autoderef";
-
-Consider, though, replacing the use of these features, as they may
-change behavior again before becoming stable.
-
-=item *
-
-L<A sequence of multiple spaces in a charnames alias definition is deprecated|perldiag/"A sequence of multiple spaces in a charnames alias definition is deprecated">
-
-L<Trailing white-space in a charnames alias definition is deprecated|perldiag/"Trailing white-space in a charnames alias definition is deprecated">
-
-These two deprecation warnings involving C<\N{...}> were incorrectly
-implemented. They did not warn by default (now they do) and could not be
-made fatal via C<< use warnings FATAL => 'deprecated' >> (now they can).
-
-=item *
-
-L<Attribute prototype(%s) discards earlier prototype attribute in same sub|perldiag/"Attribute prototype(%s) discards earlier prototype attribute in same sub">
-
-(W misc) A sub was declared as C<sub foo : prototype(A) : prototype(B) {}>, for
-example. Since each sub can only have one prototype, the earlier
-declaration(s) are discarded while the last one is applied.
-
-=item *
-
-L<Invalid \0 character in %s for %s: %s\0%s|perldiag/"Invalid \0 character in %s for %s: %s\0%s">
-
-(W syscalls) Embedded \0 characters in pathnames or other system call arguments
-produce a warning as of 5.20. The parts after the \0 were formerly ignored by
-system calls.
-
-=item *
-
-L<Matched non-Unicode code point 0x%X against Unicode property; may not be portable|perldiag/"Matched non-Unicode code point 0x%X against Unicode property; may not be portable">.
-
-This replaces the message "Code point 0x%X is not Unicode, all \p{} matches
-fail; all \P{} matches succeed".
-
-=item *
-
-L<Missing ']' in prototype for %s : %s|perldiag/"Missing ']' in prototype for %s : %s">
-
-(W illegalproto) A grouping was started with C<[> but never closed with C<]>.
-
-=item *
-
-L<Possible precedence issue with control flow operator|perldiag/"Possible precedence issue with control flow operator">
-
-(W syntax) There is a possible problem with the mixing of a control flow
-operator (e.g. C<return>) and a low-precedence operator like C<or>. Consider:
-
- sub { return $a or $b; }
-
-This is parsed as:
-
- sub { (return $a) or $b; }
-
-Which is effectively just:
-
- sub { return $a; }
-
-Either use parentheses or the high-precedence variant of the operator.
-
-Note this may be also triggered for constructs like:
-
- sub { 1 if die; }
-
-=item *
-
-L<Postfix dereference is experimental|perldiag/"Postfix dereference is experimental">
-
-(S experimental::postderef) This warning is emitted if you use the experimental
-postfix dereference syntax. Simply suppress the warning if you want to use the
-feature, but know that in doing so you are taking the risk of using an
-experimental feature which may change or be removed in a future Perl version:
-
- no warnings "experimental::postderef";
- use feature "postderef", "postderef_qq";
- $ref->$*;
- $aref->@*;
- $aref->@[@indices];
- ... etc ...
-
-=item *
-
-L<Prototype '%s' overridden by attribute 'prototype(%s)' in %s|perldiag/"Prototype '%s' overridden by attribute 'prototype(%s)' in %s">
-
-(W prototype) A prototype was declared in both the parentheses after the sub
-name and via the prototype attribute. The prototype in parentheses is useless,
-since it will be replaced by the prototype from the attribute before it's ever
-used.
-
-=item *
-
-L<Scalar value @%s[%s] better written as $%s[%s]|perldiag/"Scalar value @%s[%s] better written as $%s[%s]">
-
-(W syntax) In scalar context, you've used an array index/value slice (indicated
-by %) to select a single element of an array. Generally it's better to ask for
-a scalar value (indicated by $). The difference is that C<$foo[&bar]> always
-behaves like a scalar, both in the value it returns and when evaluating its
-argument, while C<%foo[&bar]> provides a list context to its subscript, which
-can do weird things if you're expecting only one subscript. When called in
-list context, it also returns the index (what C<&bar> returns) in addition to
-the value.
-
-=item *
-
-L<Scalar value @%s{%s} better written as $%s{%s}|perldiag/"Scalar value @%s{%s} better written as $%s{%s}">
-
-(W syntax) In scalar context, you've used a hash key/value slice (indicated by
-%) to select a single element of a hash. Generally it's better to ask for a
-scalar value (indicated by $). The difference is that C<$foo{&bar}> always
-behaves like a scalar, both in the value it returns and when evaluating its
-argument, while C<@foo{&bar}> and provides a list context to its subscript,
-which can do weird things if you're expecting only one subscript. When called
-in list context, it also returns the key in addition to the value.
-
-=item *
-
-L<Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef|perldiag/"Setting $E<sol> to a reference to %s as a form of slurp is deprecated, treating as undef">
-
-=item *
-
-L<Unexpected exit %u|perldiag/"Unexpected exit %u">
-
-(S) exit() was called or the script otherwise finished gracefully when
-C<PERL_EXIT_WARN> was set in C<PL_exit_flags>.
-
-=item *
-
-L<Unexpected exit failure %d|perldiag/"Unexpected exit failure %d">
-
-(S) An uncaught die() was called when C<PERL_EXIT_WARN> was set in
-C<PL_exit_flags>.
-
-=item *
-
-L<Use of literal control characters in variable names is deprecated|perldiag/"Use of literal control characters in variable names is deprecated">
-
-(D deprecated) Using literal control characters in the source to refer to the
-^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated. This only
-affects code like $\cT, where \cT is a control (like a C<SOH>) in the
-source code: ${"\cT"} and $^T remain valid.
-
-=item *
-
-L<Useless use of greediness modifier|perldiag/"Useless use of greediness modifier '%c' in regex; marked by <-- HERE in m/%s/">
-
-This fixes [Perl #42957].
-
-=back
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-Warnings and errors from the regexp engine are now UTF-8 clean.
-
-=item *
-
-The "Unknown switch condition" error message has some slight changes. This
-error triggers when there is an unknown condition in a C<(?(foo))> conditional.
-The error message used to read:
-
- Unknown switch condition (?(%s in regex;
-
-But what %s could be was mostly up to luck. For C<(?(foobar))>, you might have
-seen "fo" or "f". For Unicode characters, you would generally get a corrupted
-string. The message has been changed to read:
-
- Unknown switch condition (?(...)) in regex;
-
-Additionally, the C<'E<lt>-- HERE'> marker in the error will now point to the
-correct spot in the regex.
-
-=item *
-
-The "%s "\x%X" does not map to Unicode" warning is now correctly listed as a
-severe warning rather than as a fatal error.
-
-=item *
-
-Under rare circumstances, one could get a "Can't coerce readonly REF to
-string" instead of the customary "Modification of a read-only value". This
-alternate error message has been removed.
-
-=item *
-
-"Ambiguous use of * resolved as operator *": This and similar warnings
-about "%" and "&" used to occur in some circumstances where there was no
-operator of the type cited, so the warning was completely wrong. This has
-been fixed [perl #117535, #76910].
-
-=item *
-
-Warnings about malformed subroutine prototypes are now more consistent in
-how the prototypes are rendered. Some of these warnings would truncate
-prototypes containing nulls. In other cases one warning would suppress
-another. The warning about illegal characters in prototypes no longer says
-"after '_'" if the bad character came before the underscore.
-
-=item *
-
-L<Perl folding rules are not up-to-date for 0x%X; please use the perlbug
-utility to report; in regex; marked by <-- HERE in
-mE<sol>%sE<sol>|perldiag/"Perl folding rules are not up-to-date for 0x%X;
-please use the perlbug utility to report; in regex; marked by <-- HERE in
-m/%s/">
-
-This message is now only in the regexp category, and not in the deprecated
-category. It is still a default (i.e., severe) warning [perl #89648].
-
-=item *
-
-L<%%s[%s] in scalar context better written as $%s[%s]|perldiag/"%%s[%s] in scalar context better written as $%s[%s]">
-
-This warning now occurs for any C<%array[$index]> or C<%hash{key}> known to
-be in scalar context at compile time. Previously it was worded "Scalar
-value %%s[%s] better written as $%s[%s]".
-
-=item *
-
-L<Switch condition not recognized in regex; marked by <-- HERE in mE<sol>%sE<sol>|perldiag/"Switch condition not recognized in regex; marked by <-- HERE in m/%s/">:
-
-The description for this diagnostic has been extended to cover all cases where the warning may occur.
-Issues with the positioning of the arrow indicator have also been resolved.
-
-=item *
-
-The error messages for C<my($a?$b$c)> and C<my(do{})> now mention "conditional
-expression" and "do block", respectively, instead of reading 'Can't declare
-null operation in "my"'.
-
-=item *
-
-When C<use re "debug"> executes a regex containing a backreference, the
-debugging output now shows what string is being matched.
-
-=item *
-
-The now fatal error message C<Character following "\c" must be ASCII> has been
-reworded as C<Character following "\c" must be printable ASCII> to emphasize
-that in C<\cI<X>>, I<X> must be a I<printable (non-control)> ASCII character.
-
-=back
-
-=head1 Utility Changes
-
-=head3 L<a2p>
-
-=over 4
-
-=item *
-
-A possible crash from an off-by-one error when trying to access before the
-beginning of a buffer has been fixed. [perl #120244]
-
-=back
-
-=head3 F<bisect.pl>
-
-The git bisection tool F<Porting/bisect.pl> has had many enhancements.
-
-It is provided as part of the source distribution but not installed because
-it is not self-contained as it relies on being run from within a git
-checkout. Note also that it makes no attempt to fix tests, correct runtime
-bugs or make something useful to install - its purpose is to make minimal
-changes to get any historical revision of interest to build and run as close
-as possible to "as-was", and thereby make C<git bisect> easy to use.
-
-=over 4
-
-=item *
-
-Can optionally run the test case with a timeout.
-
-=item *
-
-Can now run in-place in a clean git checkout.
-
-=item *
-
-Can run the test case under C<valgrind>.
-
-=item *
-
-Can apply user supplied patches and fixes to the source checkout before
-building.
-
-=item *
-
-Now has fixups to enable building several more historical ranges of bleadperl,
-which can be useful for pinpointing the origins of bugs or behaviour changes.
-
-=back
-
-=head3 L<find2perl>
-
-=over 4
-
-=item *
-
-L<find2perl> now handles C<?> wildcards correctly. [perl #113054]
-
-=back
-
-=head3 L<perlbug>
-
-=over 4
-
-=item *
-
-F<perlbug> now has a C<-p> option for attaching patches with a bug report.
-
-=item *
-
-L<perlbug> has been modified to supply the report template with CRLF line
-endings on Windows.
-[L<perl #121277|https://rt.perl.org/Public/Bug/Display.html?id=121277>]
-
-=item *
-
-L<perlbug> now makes as few assumptions as possible about the encoding of the
-report. This will likely change in the future to assume UTF-8 by default but
-allow a user override.
-
-=back
-
-=head1 Configuration and Compilation
-
-=over 4
-
-=item *
-
-The F<Makefile.PL> for L<SDBM_File> now generates a better F<Makefile>, which
-avoids a race condition during parallel makes, which could cause the build to
-fail. This is the last known parallel make problem (on *nix platforms), and
-therefore we believe that a parallel make should now always be error free.
-
-=item *
-
-F<installperl> and F<installman>'s option handling has been refactored to use
-L<Getopt::Long>. Both are used by the F<Makefile> C<install> targets, and
-are not installed, so these changes are only likely to affect custom
-installation scripts.
-
-=over 4
-
-=item *
-
-Single letter options now also have long names.
-
-=item *
-
-Invalid options are now rejected.
-
-=item *
-
-Command line arguments that are not options are now rejected.
-
-=item *
-
-Each now has a C<--help> option to display the usage message.
-
-=back
-
-The behaviour for all valid documented invocations is unchanged.
-
-=item *
-
-Where possible, the build now avoids recursive invocations of F<make> when
-building pure-Perl extensions, without removing any parallelism from the
-build. Currently around 80 extensions can be processed directly by the
-F<make_ext.pl> tool, meaning that 80 invocations of F<make> and 160
-invocations of F<miniperl> are no longer made.
-
-=item *
-
-The build system now works correctly when compiling under GCC or Clang with
-link-time optimization enabled (the C<-flto> option). [perl #113022]
-
-=item *
-
-Distinct library basenames with C<d_libname_unique>.
-
-When compiling perl with this option, the library files for XS modules are
-named something "unique" -- for example, Hash/Util/Util.so becomes
-Hash/Util/PL_Hash__Util.so. This behavior is similar to what currently
-happens on VMS, and serves as groundwork for the Android port.
-
-=item *
-
-C<sysroot> option to indicate the logical root directory under gcc and clang.
-
-When building with this option set, both Configure and the compilers search
-for all headers and libraries under this new sysroot, instead of /.
-
-This is a huge time saver if cross-compiling, but can also help
-on native builds if your toolchain's files have non-standard locations.
-
-=item *
-
-The cross-compilation model has been renovated.
-There's several new options, and some backwards-incompatible changes:
-
-We now build binaries for miniperl and generate_uudmap to be used on the host,
-rather than running every miniperl call on the target; this means that, short
-of 'make test', we no longer need access to the target system once Configure is
-done. You can provide already-built binaries through the C<hostperl> and
-C<hostgenerate> options to Configure.
-
-Additionally, if targeting an EBCDIC platform from an ASCII host,
-or viceversa, you'll need to run Configure with C<-Uhostgenerate>, to
-indicate that generate_uudmap should be run on the target.
-
-Finally, there's also a way of having Configure end early, right after
-building the host binaries, by cross-compiling without specifying a
-C<targethost>.
-
-The incompatible changes include no longer using xconfig.h, xlib, or
-Cross.pm, so canned config files and Makefiles will have to be updated.
-
-=item *
-
-Related to the above, there is now a way of specifying the location of sh
-(or equivalent) on the target system: C<targetsh>.
-
-For example, Android has its sh in /system/bin/sh, so if cross-compiling
-from a more normal Unixy system with sh in /bin/sh, "targetsh" would end
-up as /system/bin/sh, and "sh" as /bin/sh.
-
-=item *
-
-By default, B<gcc> 4.9 does some optimizations that break perl. The B<-fwrapv>
-option disables those optimizations (and probably others), so for B<gcc> 4.3
-and later (since the there might be similar problems lurking on older versions
-too, but B<-fwrapv> was broken before 4.3, and the optimizations probably won't
-go away), F<Configure> now adds B<-fwrapv> unless the user requests
-B<-fno-wrapv>, which disables B<-fwrapv>, or B<-fsanitize=undefined>, which
-turns the overflows B<-fwrapv> ignores into runtime errors.
-[L<perl #121505|https://rt.perl.org/Public/Bug/Display.html?id=121505>]
-
-=back
-
-=head1 Testing
-
-=over 4
-
-=item *
-
-The C<test.valgrind> make target now allows tests to be run in parallel.
-This target allows Perl's test suite to be run under Valgrind, which detects
-certain sorts of C programming errors, though at significant cost in running
-time. On suitable hardware, allowing parallel execution claws back a lot of
-that additional cost. [perl #121431]
-
-=item *
-
-Various tests in F<t/porting/> are no longer skipped when the perl
-F<.git> directory is outside the perl tree and pointed to by
-C<$GIT_DIR>. [perl #120505]
-
-=item *
-
-The test suite no longer fails when the user's interactive shell maintains a
-C<$PWD> environment variable, but the F</bin/sh> used for running tests
-doesn't.
-
-=back
-
-=head1 Platform Support
-
-=head2 New Platforms
-
-=over 4
-
-=item Android
-
-Perl can now be built for Android, either natively or through
-cross-compilation, for all three currently available architectures (ARM,
-MIPS, and x86), on a wide range of versions.
-
-=item Bitrig
-
-Compile support has been added for Bitrig, a fork of OpenBSD.
-
-=item FreeMiNT
-
-Support has been added for FreeMiNT, a free open-source OS for the Atari ST
-system and its successors, based on the original MiNT that was officially
-adopted by Atari.
-
-=item Synology
-
-Synology ships its NAS boxes with a lean Linux distribution (DSM) on relative
-cheap CPU's (like the Marvell Kirkwood mv6282 - ARMv5tel or Freescale QorIQ
-P1022 ppc - e500v2) not meant for workstations or development. These boxes
-should build now. The basic problems are the non-standard location for tools.
-
-=back
-
-=head2 Discontinued Platforms
-
-=over 4
-
-=item C<sfio>
-
-Code related to supporting the C<sfio> I/O system has been removed.
-
-Perl 5.004 added support to use the native API of C<sfio>, AT&T's Safe/Fast
-I/O library. This code still built with v5.8.0, albeit with many regression
-tests failing, but was inadvertently broken before the v5.8.1 release,
-meaning that it has not worked on any version of Perl released since then.
-In over a decade we have received no bug reports about this, hence it is clear
-that no-one is using this functionality on any version of Perl that is still
-supported to any degree.
-
-=item AT&T 3b1
-
-Configure support for the 3b1, also known as the AT&T Unix PC (and the similar
-AT&T 7300), has been removed.
-
-=item DG/UX
-
-DG/UX was a Unix sold by Data General. The last release was in April 2001.
-It only runs on Data General's own hardware.
-
-=item EBCDIC
-
-In the absence of a regular source of smoke reports, code intended to support
-native EBCDIC platforms will be removed from perl before 5.22.0.
-
-=back
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item Cygwin
-
-=over 4
-
-=item *
-
-recv() on a connected handle would populate the returned sender
-address with whatever happened to be in the working buffer. recv()
-now uses a workaround similar to the Win32 recv() wrapper and returns
-an empty string when recvfrom(2) doesn't modify the supplied address
-length. [perl #118843]
-
-=item *
-
-Fixed a build error in cygwin.c on Cygwin 1.7.28.
-
-Tests now handle the errors that occur when C<cygserver> isn't
-running.
-
-=back
-
-=item GNU/Hurd
-
-The BSD compatibility library C<libbsd> is no longer required for builds.
-
-=item Linux
-
-The hints file now looks for C<libgdbm_compat> only if C<libgdbm> itself is
-also wanted. The former is never useful without the latter, and in some
-circumstances, including it could actually prevent building.
-
-=item Mac OS
-
-The build system now honors an C<ld> setting supplied by the user running
-F<Configure>.
-
-=item MidnightBSD
-
-C<objformat> was removed from version 0.4-RELEASE of MidnightBSD and had been
-deprecated on earlier versions. This caused the build environment to be
-erroneously configured for C<a.out> rather than C<elf>. This has been now
-been corrected.
-
-=item Mixed-endian platforms
-
-The code supporting C<pack> and C<unpack> operations on mixed endian
-platforms has been removed. We believe that Perl has long been unable to
-build on mixed endian architectures (such as PDP-11s), so we don't think
-that this change will affect any platforms which were able to build v5.18.0.
-
-=item VMS
-
-=over 4
-
-=item *
-
-The C<PERL_ENV_TABLES> feature to control the population of %ENV at perl
-start-up was broken in Perl 5.16.0 but has now been fixed.
-
-=item *
-
-Skip access checks on remotes in opendir(). [perl #121002]
-
-=item *
-
-A check for glob metacharacters in a path returned by the
-L<C<glob()>|perlfunc/glob> operator has been replaced with a check for VMS
-wildcard characters. This saves a significant number of unnecessary
-L<C<lstat()>|perlfunc/lstat> calls such that some simple glob operations become
-60-80% faster.
-
-=back
-
-=item Win32
-
-=over 4
-
-=item *
-
-C<rename> and C<link> on Win32 now set $! to ENOSPC and EDQUOT when
-appropriate. [perl #119857]
-
-=item *
-
-The BUILD_STATIC and ALL_STATIC makefile options for linking some or (nearly)
-all extensions statically (into perl520.dll, and into a separate
-perl-static.exe too) were broken for MinGW builds. This has now been fixed.
-
-The ALL_STATIC option has also been improved to include the Encode and Win32
-extensions (for both VC++ and MinGW builds).
-
-=item *
-
-Support for building with Visual C++ 2013 has been added. There are currently
-two possible test failures (see L<perlwin32/"Testing Perl on Windows">) which
-will hopefully be resolved soon.
-
-=item *
-
-Experimental support for building with Intel C++ Compiler has been added. The
-nmake makefile (win32/Makefile) and the dmake makefile (win32/makefile.mk) can
-be used. A "nmake test" will not pass at this time due to F<cpan/CGI/t/url.t>.
-
-=item *
-
-Killing a process tree with L<perlfunc/kill> and a negative signal, was broken
-starting in 5.18.0. In this bug, C<kill> always returned 0 for a negative
-signal even for valid PIDs, and no processes were terminated. This has been
-fixed [perl #121230].
-
-=item *
-
-The time taken to build perl on Windows has been reduced quite significantly
-(time savings in the region of 30-40% are typically seen) by reducing the
-number of, usually failing, I/O calls for each L<C<require()>|perlfunc/require>
-(for B<miniperl.exe> only).
-[L<perl #121119|https://rt.perl.org/Public/Bug/Display.html?id=121119>]
-
-=item *
-
-About 15 minutes of idle sleeping was removed from running C<make test> due to
-a bug in which the timeout monitor used for tests could not be cancelled once
-the test completes, and the full timeout period elapsed before running the next
-test file.
-[L<perl #121395|https://rt.perl.org/Public/Bug/Display.html?id=121395>]
-
-=item *
-
-On a perl built without pseudo-fork (pseudo-fork builds were not affected by
-this bug), killing a process tree with L<C<kill()>|perlfunc/kill> and a negative
-signal resulted in C<kill()> inverting the returned value. For example, if
-C<kill()> killed 1 process tree PID then it returned 0 instead of 1, and if
-C<kill()> was passed 2 invalid PIDs then it returned 2 instead of 0. This has
-probably been the case since the process tree kill feature was implemented on
-Win32. It has now been corrected to follow the documented behaviour.
-[L<perl #121230|https://rt.perl.org/Public/Bug/Display.html?id=121230>]
-
-=item *
-
-When building a 64-bit perl, an uninitialized memory read in B<miniperl.exe>,
-used during the build process, could lead to a 4GB B<wperl.exe> being created.
-This has now been fixed. (Note that B<perl.exe> itself was unaffected, but
-obviously B<wperl.exe> would have been completely broken.)
-[L<perl #121471|https://rt.perl.org/Public/Bug/Display.html?id=121471>]
-
-=item *
-
-Perl can now be built with B<gcc> version 4.8.1 from L<http://www.mingw.org>.
-This was previously broken due to an incorrect definition of DllMain() in one
-of perl's source files. Earlier B<gcc> versions were also affected when using
-version 4 of the w32api package. Versions of B<gcc> available from
-L<http://mingw-w64.sourceforge.net/> were not affected.
-[L<perl #121643|https://rt.perl.org/Public/Bug/Display.html?id=121643>]
-
-=item *
-
-The test harness now has no failures when perl is built on a FAT drive with the
-Windows OS on an NTFS drive.
-[L<perl #21442|https://rt.perl.org/Public/Bug/Display.html?id=21442>]
-
-=item *
-
-When cloning the context stack in fork() emulation, Perl_cx_dup()
-would crash accessing parameter information for context stack entries
-that included no parameters, as with C<&foo;>.
-[L<perl #121721|https://rt.perl.org/Public/Bug/Display.html?id=121721>]
-
-=item *
-
-Introduced by
-L<perl #113536|https://rt.perl.org/Public/Bug/Display.html?id=113536>, a memory
-leak on every call to C<system> and backticks (C< `` >), on most Win32 Perls
-starting from 5.18.0 has been fixed. The memory leak only occurred if you
-enabled psuedo-fork in your build of Win32 Perl, and were running that build on
-Server 2003 R2 or newer OS. The leak does not appear on WinXP SP3.
-[L<perl #121676|https://rt.perl.org/Public/Bug/Display.html?id=121676>]
-
-=back
-
-=item WinCE
-
-=over 4
-
-=item *
-
-The building of XS modules has largely been restored. Several still cannot
-(yet) be built but it is now possible to build Perl on WinCE with only a couple
-of further patches (to L<Socket> and L<ExtUtils::MakeMaker>), hopefully to be
-incorporated soon.
-
-=item *
-
-Perl can now be built in one shot with no user intervention on WinCE by running
-C<nmake -f Makefile.ce all>.
-
-Support for building with EVC (Embedded Visual C++) 4 has been restored. Perl
-can also be built using Smart Devices for Visual C++ 2005 or 2008.
-
-=back
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-The internal representation has changed for the match variables $1, $2 etc.,
-$`, $&, $', ${^PREMATCH}, ${^MATCH} and ${^POSTMATCH}. It uses slightly less
-memory, avoids string comparisons and numeric conversions during lookup, and
-uses 23 fewer lines of C. This change should not affect any external code.
-
-=item *
-
-Arrays now use NULL internally to represent unused slots, instead of
-&PL_sv_undef. &PL_sv_undef is no longer treated as a special value, so
-av_store(av, 0, &PL_sv_undef) will cause element 0 of that array to hold a
-read-only undefined scalar. C<$array[0] = anything> will croak and
-C<\$array[0]> will compare equal to C<\undef>.
-
-=item *
-
-The SV returned by HeSVKEY_force() now correctly reflects the UTF8ness of the
-underlying hash key when that key is not stored as a SV. [perl #79074]
-
-=item *
-
-Certain rarely used functions and macros available to XS code are now
-deprecated. These are:
-C<utf8_to_uvuni_buf> (use C<utf8_to_uvchr_buf> instead),
-C<valid_utf8_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
-C<NATIVE_TO_NEED> (this did not work properly anyway),
-and C<ASCII_TO_NEED> (this did not work properly anyway).
-
-Starting in this release, almost never does application code need to
-distinguish between the platform's character set and Latin1, on which the
-lowest 256 characters of Unicode are based. New code should not use
-C<utf8n_to_uvuni> (use C<utf8_to_uvchr_buf> instead),
-nor
-C<uvuni_to_utf8> (use C<uvchr_to_utf8> instead),
-
-=item *
-
-The Makefile shortcut targets for many rarely (or never) used testing and
-profiling targets have been removed, or merged into the only other Makefile
-target that uses them. Specifically, these targets are gone, along with
-documentation that referenced them or explained how to use them:
-
- check.third check.utf16 check.utf8 coretest minitest.prep
- minitest.utf16 perl.config.dashg perl.config.dashpg
- perl.config.gcov perl.gcov perl.gprof perl.gprof.config
- perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
- perl.third perl.third.config perl.valgrind.config purecovperl
- pureperl quantperl test.deparse test.taintwarn test.third
- test.torture test.utf16 test.utf8 test_notty.deparse
- test_notty.third test_notty.valgrind test_prep.third
- test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
- ucheck.valgrind utest utest.third utest.utf16 utest.valgrind
-
-It's still possible to run the relevant commands by "hand" - no underlying
-functionality has been removed.
-
-=item *
-
-It is now possible to keep Perl from initializing locale handling.
-For the most part, Perl doesn't pay attention to locale. (See
-L<perllocale>.) Nonetheless, until now, on startup, it has always
-initialized locale handling to the system default, just in case the
-program being executed ends up using locales. (This is one of the first
-things a locale-aware program should do, long before Perl knows if it
-will actually be needed or not.) This works well except when Perl is
-embedded in another application which wants a locale that isn't the
-system default. Now, if the environment variable
-C<PERL_SKIP_LOCALE_INIT> is set at the time Perl is started, this
-initialization step is skipped. Prior to this, on Windows platforms,
-the only workaround for this deficiency was to use a hacked-up copy of
-internal Perl code. Applications that need to use older Perls can
-discover if the embedded Perl they are using needs the workaround by
-testing that the C preprocessor symbol C<HAS_SKIP_LOCALE_INIT> is not
-defined. [RT #38193]
-
-=item *
-
-C<BmRARE> and C<BmPREVIOUS> have been removed. They were not used anywhere
-and are not part of the API. For XS modules, they are now #defined as 0.
-
-=item *
-
-C<sv_force_normal>, which usually croaks on read-only values, used to allow
-read-only values to be modified at compile time. This has been changed to
-croak on read-only values regardless. This change uncovered several core
-bugs.
-
-=item *
-
-Perl's new copy-on-write mechanism (which is now enabled by default),
-allows any C<SvPOK> scalar to be automatically upgraded to a copy-on-write
-scalar when copied. A reference count on the string buffer is stored in
-the string buffer itself.
-
-For example:
-
- $ perl -MDevel::Peek -e'$a="abc"; $b = $a; Dump $a; Dump $b'
- SV = PV(0x260cd80) at 0x2620ad8
- REFCNT = 1
- FLAGS = (POK,IsCOW,pPOK)
- PV = 0x2619bc0 "abc"\0
- CUR = 3
- LEN = 16
- COW_REFCNT = 1
- SV = PV(0x260ce30) at 0x2620b20
- REFCNT = 1
- FLAGS = (POK,IsCOW,pPOK)
- PV = 0x2619bc0 "abc"\0
- CUR = 3
- LEN = 16
- COW_REFCNT = 1
-
-Note that both scalars share the same PV buffer and have a COW_REFCNT
-greater than zero.
-
-This means that XS code which wishes to modify the C<SvPVX()> buffer of an
-SV should call C<SvPV_force()> or similar first, to ensure a valid (and
-unshared) buffer, and to call C<SvSETMAGIC()> afterwards. This in fact has
-always been the case (for example hash keys were already copy-on-write);
-this change just spreads the COW behaviour to a wider variety of SVs.
-
-One important difference is that before 5.18.0, shared hash-key scalars
-used to have the C<SvREADONLY> flag set; this is no longer the case.
-
-This new behaviour can still be disabled by running F<Configure> with
-B<-Accflags=-DPERL_NO_COW>. This option will probably be removed in Perl
-5.22.
-
-=item *
-
-C<PL_sawampersand> is now a constant. The switch this variable provided
-(to enable/disable the pre-match copy depending on whether C<$&> had been
-seen) has been removed and replaced with copy-on-write, eliminating a few
-bugs.
-
-The previous behaviour can still be enabled by running F<Configure> with
-B<-Accflags=-DPERL_SAWAMPERSAND>.
-
-=item *
-
-The functions C<my_swap>, C<my_htonl> and C<my_ntohl> have been removed.
-It is unclear why these functions were ever marked as I<A>, part of the
-API. XS code can't call them directly, as it can't rely on them being
-compiled. Unsurprisingly, no code on CPAN references them.
-
-=item *
-
-The signature of the C<Perl_re_intuit_start()> regex function has changed;
-the function pointer C<intuit> in the regex engine plugin structure
-has also changed accordingly. A new parameter, C<strbeg> has been added;
-this has the same meaning as the same-named parameter in
-C<Perl_regexec_flags>. Previously intuit would try to guess the start of
-the string from the passed SV (if any), and would sometimes get it wrong
-(e.g. with an overloaded SV).
-
-=item *
-
-The signature of the C<Perl_regexec_flags()> regex function has
-changed; the function pointer C<exec> in the regex engine plugin
-structure has also changed to match. The C<minend> parameter now has
-type C<SSize_t> to better support 64-bit systems.
-
-=item *
-
-XS code may use various macros to change the case of a character or code
-point (for example C<toLOWER_utf8()>). Only a couple of these were
-documented until now;
-and now they should be used in preference to calling the underlying
-functions. See L<perlapi/Character case changing>.
-
-=item *
-
-The code dealt rather inconsistently with uids and gids. Some
-places assumed that they could be safely stored in UVs, others
-in IVs, others in ints. Four new macros are introduced:
-SvUID(), sv_setuid(), SvGID(), and sv_setgid()
-
-=item *
-
-C<sv_pos_b2u_flags> has been added to the API. It is similar to C<sv_pos_b2u>,
-but supports long strings on 64-bit platforms.
-
-=item *
-
-C<PL_exit_flags> can now be used by perl embedders or other XS code to have
-perl C<warn> or C<abort> on an attempted exit. [perl #52000]
-
-=item *
-
-Compiling with C<-Accflags=-PERL_BOOL_AS_CHAR> now allows C99 and C++
-compilers to emulate the aliasing of C<bool> to C<char> that perl does for
-C89 compilers. [perl #120314]
-
-=item *
-
-The C<sv> argument in L<perlapi/sv_2pv_flags>, L<perlapi/sv_2iv_flags>,
-L<perlapi/sv_2uv_flags>, and L<perlapi/sv_2nv_flags> and their older wrappers
-sv_2pv, sv_2iv, sv_2uv, sv_2nv, is now non-NULL. Passing NULL now will crash.
-When the non-NULL marker was introduced en masse in 5.9.3 the functions
-were marked non-NULL, but since the creation of the SV API in 5.0 alpha 2, if
-NULL was passed, the functions returned 0 or false-type values. The code that
-supports C<sv> argument being non-NULL dates to 5.0 alpha 2 directly, and
-indirectly to Perl 1.0 (pre 5.0 api). The lack of documentation that the
-functions accepted a NULL C<sv> was corrected in 5.11.0 and between 5.11.0
-and 5.19.5 the functions were marked NULLOK. As an optimization the NULLOK code
-has now been removed, and the functions became non-NULL marked again, because
-core getter-type macros never pass NULL to these functions and would crash
-before ever passing NULL.
-
-The only way a NULL C<sv> can be passed to sv_2*v* functions is if XS code
-directly calls sv_2*v*. This is unlikely as XS code uses Sv*V* macros to get
-the underlying value out of the SV. One possible situation which leads to
-a NULL C<sv> being passed to sv_2*v* functions, is if XS code defines its own
-getter type Sv*V* macros, which check for NULL B<before> dereferencing and
-checking the SV's flags through public API Sv*OK* macros or directly using
-private API C<SvFLAGS>, and if C<sv> is NULL, then calling the sv_2*v functions
-with a NULL litteral or passing the C<sv> containing a NULL value.
-
-=item *
-
-newATTRSUB is now a macro
-
-The public API newATTRSUB was previously a macro to the private
-function Perl_newATTRSUB. Function Perl_newATTRSUB has been removed. newATTRSUB
-is now macro to a different internal function.
-
-=item *
-
-Changes in warnings raised by C<utf8n_to_uvchr()>
-
-This bottom level function decodes the first character of a UTF-8 string
-into a code point. It is accessible to C<XS> level code, but it's
-discouraged from using it directly. There are higher level functions
-that call this that should be used instead, such as
-L<perlapi/utf8_to_uvchr_buf>. For completeness though, this documents
-some changes to it. Now, tests for malformations are done before any
-tests for other potential issues. One of those issues involves code
-points so large that they have never appeared in any official standard
-(the current standard has scaled back the highest acceptable code point
-from earlier versions). It is possible (though not done in CPAN) to
-warn and/or forbid these code points, while accepting smaller code
-points that are still above the legal Unicode maximum. The warning
-message for this now includes the code point if representable on the
-machine. Previously it always displayed raw bytes, which is what it
-still does for non-representable code points.
-
-=item *
-
-Regexp engine changes that affect the pluggable regex engine interface
-
-Many flags that used to be exposed via regexp.h and used to populate the
-extflags member of struct regexp have been removed. These fields were
-technically private to Perl's own regexp engine and should not have been
-exposed there in the first place.
-
-The affected flags are:
-
- RXf_NOSCAN
- RXf_CANY_SEEN
- RXf_GPOS_SEEN
- RXf_GPOS_FLOAT
- RXf_ANCH_BOL
- RXf_ANCH_MBOL
- RXf_ANCH_SBOL
- RXf_ANCH_GPOS
-
-As well as the follow flag masks:
-
- RXf_ANCH_SINGLE
- RXf_ANCH
-
-All have been renamed to PREGf_ equivalents and moved to regcomp.h.
-
-The behavior previously achieved by setting one or more of the RXf_ANCH_
-flags (via the RXf_ANCH mask) have now been replaced by a *single* flag bit
-in extflags:
-
- RXf_IS_ANCHORED
-
-pluggable regex engines which previously used to set these flags should
-now set this flag ALONE.
-
-=item *
-
-The Perl core now consistently uses C<av_tindex()> ("the top index of an
-array") as a more clearly-named synonym for C<av_len()>.
-
-=item *
-
-The obscure interpreter variable C<PL_timesbuf> is expected to be removed
-early in the 5.21.x development series, so that Perl 5.22.0 will not provide
-it to XS authors. While the variable still exists in 5.20.0, we hope that
-this advance warning of the deprecation will help anyone who is using that
-variable.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=head2 Regular Expressions
-
-=over 4
-
-=item *
-
-Fixed a small number of regexp constructions that could either fail to
-match or crash perl when the string being matched against was
-allocated above the 2GB line on 32-bit systems. [RT #118175]
-
-=item *
-
-Various memory leaks involving the parsing of the C<(?[...])> regular
-expression construct have been fixed.
-
-=item *
-
-C<(?[...])> now allows interpolation of precompiled patterns consisting of
-C<(?[...])> with bracketed character classes inside (C<$pat =
-S<qr/(?[ [a] ])/;> S</(?[ $pat ])/>>). Formerly, the brackets would
-confuse the regular expression parser.
-
-=item *
-
-The "Quantifier unexpected on zero-length expression" warning message could
-appear twice starting in Perl v5.10 for a regular expression also
-containing alternations (e.g., "a|b") triggering the trie optimisation.
-
-=item *
-
-Perl v5.18 inadvertently introduced a bug whereby interpolating mixed up-
-and down-graded UTF-8 strings in a regex could result in malformed UTF-8
-in the pattern: specifically if a downgraded character in the range
-C<\x80..\xff> followed a UTF-8 string, e.g.
-
- utf8::upgrade( my $u = "\x{e5}");
- utf8::downgrade(my $d = "\x{e5}");
- /$u$d/
-
-[RT #118297]
-
-=item *
-
-In regular expressions containing multiple code blocks, the values of
-C<$1>, C<$2>, etc., set by nested regular expression calls would leak from
-one block to the next. Now these variables always refer to the outer
-regular expression at the start of an embedded block [perl #117917].
-
-=item *
-
-C</$qr/p> was broken in Perl 5.18.0; the C</p> flag was ignored. This has been
-fixed. [perl #118213]
-
-=item *
-
-Starting in Perl 5.18.0, a construct like C</[#](?{})/x> would have its C<#>
-incorrectly interpreted as a comment. The code block would be skipped,
-unparsed. This has been corrected.
-
-=item *
-
-Starting in Perl 5.001, a regular expression like C</[#$a]/x> or C</[#]$a/x>
-would have its C<#> incorrectly interpreted as a comment, so the variable would
-not interpolate. This has been corrected. [perl #45667]
-
-=item *
-
-Perl 5.18.0 inadvertently made dereferenced regular expressions
-S<(C<${ qr// }>)> false as booleans. This has been fixed.
-
-=item *
-
-The use of C<\G> in regular expressions, where it's not at the start of the
-pattern, is now slightly less buggy (although it is still somewhat
-problematic).
-
-=item *
-
-Where a regular expression included code blocks (C</(?{...})/>), and where the
-use of constant overloading triggered a re-compilation of the code block, the
-second compilation didn't see its outer lexical scope. This was a regression
-in Perl 5.18.0.
-
-=item *
-
-The string position set by C<pos> could shift if the string changed
-representation internally to or from utf8. This could happen, e.g., with
-references to objects with string overloading.
-
-=item *
-
-Taking references to the return values of two C<pos> calls with the same
-argument, and then assigning a reference to one and C<undef> to the other,
-could result in assertion failures or memory leaks.
-
-=item *
-
-Elements of @- and @+ now update correctly when they refer to non-existent
-captures. Previously, a referenced element (C<$ref = \$-[1]>) could refer to
-the wrong match after subsequent matches.
-
-=item *
-
-The code that parses regex backrefs (or ambiguous backref/octals) such as \123
-did a simple atoi(), which could wrap round to negative values on long digit
-strings and cause segmentation faults. This has now been fixed. [perl
-#119505]
-
-=item *
-
-Assigning another typeglob to C<*^R> no longer makes the regular expression
-engine crash.
-
-=item *
-
-The C<\N> regular expression escape, when used without the curly braces (to
-mean C<[^\n]>), was ignoring a following C<*> if followed by whitespace
-under /x. It had been this way since C<\N> to mean C<[^\n]> was introduced
-in 5.12.0.
-
-=item *
-
-C<s///>, C<tr///> and C<y///> now work when a wide character is used as the
-delimiter. [perl #120463]
-
-=item *
-
-Some cases of unterminated (?...) sequences in regular expressions (e.g.,
-C</(?</>) have been fixed to produce the proper error message instead of
-"panic: memory wrap". Other cases (e.g., C</(?(/>) have yet to be fixed.
-
-=item *
-
-When a reference to a reference to an overloaded object was returned from
-a regular expression C<(??{...})> code block, an incorrect implicit
-dereference could take place if the inner reference had been returned by
-a code block previously.
-
-=item *
-
-A tied variable returned from C<(??{...})> sees the inner values of match
-variables (i.e., the $1 etc. from any matches inside the block) in its
-FETCH method. This was not the case if a reference to an overloaded object
-was the last thing assigned to the tied variable. Instead, the match
-variables referred to the outer pattern during the FETCH call.
-
-=item *
-
-Fix unexpected tainting via regexp using locale. Previously, under certain
-conditions, the use of character classes could cause tainting when it
-shouldn't. Some character classes are locale-dependent, but before this
-patch, sometimes tainting was happening even for character classes that
-don't depend on the locale. [perl #120675]
-
-=item *
-
-Under certain conditions, Perl would throw an error if in an lookbehind
-assertion in a regexp, the assertion referred to a named subpattern,
-complaining the lookbehind was variable when it wasn't. This has been
-fixed. [perl #120600], [perl #120618]. The current fix may be improved
-on in the future.
-
-=item *
-
-C<$^R> wasn't available outside of the regular expression that
-initialized it. [perl #121070]
-
-=item *
-
-A large set of fixes and refactoring for re_intuit_start() was merged,
-the highlights are:
-
-=over
-
-=item *
-
-Fixed a panic when compiling the regular expression
-C</\x{100}[xy]\x{100}{2}/>.
-
-=item *
-
-Fixed a performance regression when performing a global pattern match
-against a UTF-8 string. [perl #120692]
-
-=item *
-
-Fixed another performance issue where matching a regular expression
-like C</ab.{1,2}x/> against a long UTF-8 string would unnecessarily
-calculate byte offsets for a large portion of the string. [perl
-#120692]
-
-=back
-
-=item *
-
-Fixed an alignment error when compiling regular expressions when built
-with GCC on HP-UX 64-bit.
-
-=item *
-
-On 64-bit platforms C<pos> can now be set to a value higher than 2**31-1.
-[perl #72766]
-
-=back
-
-=head2 Perl 5 Debugger and -d
-
-=over 4
-
-=item *
-
-The debugger's C<man> command been fixed. It was broken in the v5.18.0
-release. The C<man> command is aliased to the names C<doc> and C<perldoc> -
-all now work again.
-
-=item *
-
-C<@_> is now correctly visible in the debugger, fixing a regression
-introduced in v5.18.0's debugger. [RT #118169]
-
-=item *
-
-Under copy-on-write builds (the default as of 5.20.0) C<< ${'_<-e'}[0] >>
-no longer gets mangled. This is the first line of input saved for the
-debugger's use for one-liners [perl #118627].
-
-=item *
-
-On non-threaded builds, setting C<${"_E<lt>filename"}> to a reference or
-typeglob no longer causes C<__FILE__> and some error messages to produce a
-corrupt string, and no longer prevents C<#line> directives in string evals from
-providing the source lines to the debugger. Threaded builds were unaffected.
-
-=item *
-
-Starting with Perl 5.12, line numbers were off by one if the B<-d> switch was
-used on the #! line. Now they are correct.
-
-=item *
-
-C<*DB::DB = sub {} if 0> no longer stops Perl's debugging mode from finding
-C<DB::DB> subs declared thereafter.
-
-=item *
-
-C<%{'_<...'}> hashes now set breakpoints on the corresponding C<@{'_<...'}>
-rather than whichever array C<@DB::dbline> is aliased to. [perl #119799]
-
-=item *
-
-Call set-magic when setting $DB::sub. [perl #121255]
-
-=item *
-
-The debugger's "n" command now respects lvalue subroutines and steps over
-them [perl #118839].
-
-=back
-
-=head2 Lexical Subroutines
-
-=over 4
-
-=item *
-
-Lexical constants (C<my sub a() { 42 }>) no longer crash when inlined.
-
-=item *
-
-Parameter prototypes attached to lexical subroutines are now respected when
-compiling sub calls without parentheses. Previously, the prototypes were
-honoured only for calls I<with> parentheses. [RT #116735]
-
-=item *
-
-Syntax errors in lexical subroutines in combination with calls to the same
-subroutines no longer cause crashes at compile time.
-
-=item *
-
-Deep recursion warnings no longer crash lexical subroutines. [RT #118521]
-
-=item *
-
-The dtrace sub-entry probe now works with lexical subs, instead of
-crashing [perl #118305].
-
-=item *
-
-Undefining an inlinable lexical subroutine (C<my sub foo() { 42 } undef
-&foo>) would result in a crash if warnings were turned on.
-
-=item *
-
-An undefined lexical sub used as an inherited method no longer crashes.
-
-=item *
-
-The presence of a lexical sub named "CORE" no longer stops the CORE::
-prefix from working.
-
-=back
-
-=head2 Everything Else
-
-=over 4
-
-=item *
-
-The OP allocation code now returns correctly aligned memory in all cases
-for C<struct pmop>. Previously it could return memory only aligned to a
-4-byte boundary, which is not correct for an ithreads build with 64 bit IVs
-on some 32 bit platforms. Notably, this caused the build to fail completely
-on sparc GNU/Linux. [RT #118055]
-
-=item *
-
-Evaluating large hashes in scalar context is now much faster, as the number
-of used chains in the hash is now cached for larger hashes. Smaller hashes
-continue not to store it and calculate it when needed, as this saves one IV.
-That would be 1 IV overhead for every object built from a hash. [RT #114576]
-
-=item *
-
-Perl v5.16 inadvertently introduced a bug whereby calls to XSUBs that were
-not visible at compile time were treated as lvalues and could be assigned
-to, even when the subroutine was not an lvalue sub. This has been fixed.
-[RT #117947]
-
-=item *
-
-In Perl v5.18.0 dualvars that had an empty string for the string part but a
-non-zero number for the number part starting being treated as true. In
-previous versions they were treated as false, the string representation
-taking precedeence. The old behaviour has been restored. [RT #118159]
-
-=item *
-
-Since Perl v5.12, inlining of constants that override built-in keywords of
-the same name had countermanded C<use subs>, causing subsequent mentions of
-the constant to use the built-in keyword instead. This has been fixed.
-
-=item *
-
-The warning produced by C<-l $handle> now applies to IO refs and globs, not
-just to glob refs. That warning is also now UTF8-clean. [RT #117595]
-
-=item *
-
-C<delete local $ENV{nonexistent_env_var}> no longer leaks memory.
-
-=item *
-
-C<sort> and C<require> followed by a keyword prefixed with C<CORE::> now
-treat it as a keyword, and not as a subroutine or module name. [RT #24482]
-
-=item *
-
-Through certain conundrums, it is possible to cause the current package to
-be freed. Certain operators (C<bless>, C<reset>, C<open>, C<eval>) could
-not cope and would crash. They have been made more resilient. [RT #117941]
-
-=item *
-
-Aliasing filehandles through glob-to-glob assignment would not update
-internal method caches properly if a package of the same name as the
-filehandle existed, resulting in filehandle method calls going to the
-package instead. This has been fixed.
-
-=item *
-
-C<./Configure -de -Dusevendorprefix> didn't default. [RT #64126]
-
-=item *
-
-The C<Statement unlikely to be reached> warning was listed in
-L<perldiag> as an C<exec>-category warning, but was enabled and disabled
-by the C<syntax> category. On the other hand, the C<exec> category
-controlled its fatal-ness. It is now entirely handled by the C<exec>
-category.
-
-=item *
-
-The "Replacement list is longer that search list" warning for C<tr///> and
-C<y///> no longer occurs in the presence of the C</c> flag. [RT #118047]
-
-=item *
-
-Stringification of NVs are not cached so that the lexical locale controls
-stringification of the decimal point. [perl #108378] [perl #115800]
-
-=item *
-
-There have been several fixes related to Perl's handling of locales. perl
-#38193 was described above in L</Internal Changes>.
-Also fixed is
-#118197, where the radix (decimal point) character had to be an ASCII
-character (which doesn't work for some non-Western languages);
-and #115808, in which C<POSIX::setlocale()> on failure returned an
-C<undef> which didn't warn about not being defined even if those
-warnings were enabled.
-
-=item *
-
-Compiling a C<split> operator whose third argument is a named constant
-evaulating to 0 no longer causes the constant's value to change.
-
-=item *
-
-A named constant used as the second argument to C<index> no longer gets
-coerced to a string if it is a reference, regular expression, dualvar, etc.
-
-=item *
-
-A named constant evaluating to the undefined value used as the second
-argument to C<index> no longer produces "uninitialized" warnings at compile
-time. It will still produce them at run time.
-
-=item *
-
-When a scalar was returned from a subroutine in @INC, the referenced scalar
-was magically converted into an IO thingy, possibly resulting in "Bizarre
-copy" errors if that scalar continued to be used elsewhere. Now Perl uses
-an internal copy of the scalar instead.
-
-=item *
-
-Certain uses of the C<sort> operator are optimised to modify an array in
-place, such as C<@a = sort @a>. During the sorting, the array is made
-read-only. If a sort block should happen to die, then the array remained
-read-only even outside the C<sort>. This has been fixed.
-
-=item *
-
-C<$a> and C<$b> inside a sort block are aliased to the actual arguments to
-C<sort>, so they can be modified through those two variables. This did not
-always work, e.g., for lvalue subs and C<$#ary>, and probably many other
-operators. It works now.
-
-=item *
-
-The arguments to C<sort> are now all in list context. If the C<sort>
-itself were called in void or scalar context, then I<some>, but not all, of
-the arguments used to be in void or scalar context.
-
-=item *
-
-Subroutine prototypes with Unicode characters above U+00FF were getting
-mangled during closure cloning. This would happen with subroutines closing
-over lexical variables declared outside, and with lexical subs.
-
-=item *
-
-C<UNIVERSAL::can> now treats its first argument the same way that method
-calls do: Typeglobs and glob references with non-empty IO slots are treated
-as handles, and strings are treated as filehandles, rather than packages,
-if a handle with that name exists [perl #113932].
-
-=item *
-
-Method calls on typeglobs (e.g., C<< *ARGV->getline >>) used to stringify
-the typeglob and then look it up again. Combined with changes in Perl
-5.18.0, this allowed C<< *foo->bar >> to call methods on the "foo" package
-(like C<< foo->bar >>). In some cases it could cause the method to be
-called on the wrong handle. Now a typeglob argument is treated as a
-handle (just like C<< (\*foo)->bar >>), or, if its IO slot is empty, an
-error is raised.
-
-=item *
-
-Assigning a vstring to a tied variable or to a subroutine argument aliased
-to a nonexistent hash or array element now works, without flattening the
-vstring into a regular string.
-
-=item *
-
-C<pos>, C<tie>, C<tied> and C<untie> did not work
-properly on subroutine arguments aliased to nonexistent
-hash and array elements [perl #77814, #27010].
-
-=item *
-
-The C<< => >> fat arrow operator can now quote built-in keywords even if it
-occurs on the next line, making it consistent with how it treats other
-barewords.
-
-=item *
-
-Autovivifying a subroutine stub via C<\&$glob> started causing crashes in Perl
-5.18.0 if the $glob was merely a copy of a real glob, i.e., a scalar that had
-had a glob assigned to it. This has been fixed. [perl #119051]
-
-=item *
-
-Perl used to leak an implementation detail when it came to referencing the
-return values of certain operators. C<for ($a+$b) { warn \$_; warn \$_ }> used
-to display two different memory addresses, because the C<\> operator was
-copying the variable. Under threaded builds, it would also happen for
-constants (C<for(1) { ... }>). This has been fixed. [perl #21979, #78194,
-#89188, #109746, #114838, #115388]
-
-=item *
-
-The range operator C<..> was returning the same modifiable scalars with each
-call, unless it was the only thing in a C<foreach> loop header. This meant
-that changes to values within the list returned would be visible the next time
-the operator was executed. [perl #3105]
-
-=item *
-
-Constant folding and subroutine inlining no longer cause operations that would
-normally return new modifiable scalars to return read-only values instead.
-
-=item *
-
-Closures of the form C<sub () { $some_variable }> are no longer inlined,
-causing changes to the variable to be ignored by callers of the subroutine.
-[perl #79908]
-
-=item *
-
-Return values of certain operators such as C<ref> would sometimes be shared
-between recursive calls to the same subroutine, causing the inner call to
-modify the value returned by C<ref> in the outer call. This has been fixed.
-
-=item *
-
-C<__PACKAGE__> and constants returning a package name or hash key are now
-consistently read-only. In various previous Perl releases, they have become
-mutable under certain circumstances.
-
-=item *
-
-Enabling "used once" warnings no longer causes crashes on stash circularities
-created at compile time (C<*Foo::Bar::Foo:: = *Foo::>).
-
-=item *
-
-Undef constants used in hash keys (C<use constant u =E<gt> undef; $h{+u}>) no
-longer produce "uninitialized" warnings at compile time.
-
-=item *
-
-Modifying a substitution target inside the substitution replacement no longer
-causes crashes.
-
-=item *
-
-The first statement inside a string eval used to use the wrong pragma setting
-sometimes during constant folding. C<eval 'uc chr 0xe0'> would randomly choose
-between Unicode, byte, and locale semantics. This has been fixed.
-
-=item *
-
-The handling of return values of @INC filters (subroutines returned by
-subroutines in @INC) has been fixed in various ways. Previously tied variables
-were mishandled, and setting $_ to a reference or typeglob could result in
-crashes.
-
-=item *
-
-The C<SvPVbyte> XS function has been fixed to work with tied scalars returning
-something other than a string. It used to return utf8 in those cases where
-C<SvPV> would.
-
-=item *
-
-Perl 5.18.0 inadvertently made C<--> and C<++> crash on dereferenced regular
-expressions, and stopped C<++> from flattening vstrings.
-
-=item *
-
-C<bless> no longer dies with "Can't bless non-reference value" if its first
-argument is a tied reference.
-
-=item *
-
-C<reset> with an argument no longer skips copy-on-write scalars, regular
-expressions, typeglob copies, and vstrings. Also, when encountering those or
-read-only values, it no longer skips any array or hash with the same name.
-
-=item *
-
-C<reset> with an argument now skips scalars aliased to typeglobs
-(C<for $z (*foo) { reset "z" }>). Previously it would corrupt memory or crash.
-
-=item *
-
-C<ucfirst> and C<lcfirst> were not respecting the bytes pragma. This was a
-regression from Perl 5.12. [perl #117355]
-
-=item *
-
-Changes to C<UNIVERSAL::DESTROY> now update DESTROY caches in all classes,
-instead of causing classes that have already had objects destroyed to continue
-using the old sub. This was a regression in Perl 5.18. [perl #114864]
-
-=item *
-
-All known false-positive occurrences of the deprecation warning "Useless use of
-'\'; doesn't escape metacharacter '%c'", added in Perl 5.18.0, have been
-removed. [perl #119101]
-
-=item *
-
-The value of $^E is now saved across signal handlers on Windows. [perl #85104]
-
-=item *
-
-A lexical filehandle (as in C<open my $fh...>) is usually given a name based on
-the current package and the name of the variable, e.g. "main::$fh". Under
-recursion, the filehandle was losing the "$fh" part of the name. This has been
-fixed.
-
-=item *
-
-Uninitialized values returned by XSUBs are no longer exempt from uninitialized
-warnings. [perl #118693]
-
-=item *
-
-C<elsif ("")> no longer erroneously produces a warning about void context.
-[perl #118753]
-
-=item *
-
-Passing C<undef> to a subroutine now causes @_ to contain the same read-only
-undefined scalar that C<undef> returns. Furthermore, C<exists $_[0]> will now
-return true if C<undef> was the first argument. [perl #7508, #109726]
-
-=item *
-
-Passing a non-existent array element to a subroutine does not usually
-autovivify it unless the subroutine modifies its argument. This did not work
-correctly with negative indices and with non-existent elements within the
-array. The element would be vivified immediately. The delayed vivification
-has been extended to work with those. [perl #118691]
-
-=item *
-
-Assigning references or globs to the scalar returned by $#foo after the @foo
-array has been freed no longer causes assertion failures on debugging builds
-and memory leaks on regular builds.
-
-=item *
-
-On 64-bit platforms, large ranges like 1..1000000000000 no longer crash, but
-eat up all your memory instead. [perl #119161]
-
-=item *
-
-C<__DATA__> now puts the C<DATA> handle in the right package, even if the
-current package has been renamed through glob assignment.
-
-=item *
-
-When C<die>, C<last>, C<next>, C<redo>, C<goto> and C<exit> unwind the scope,
-it is possible for C<DESTROY> recursively to call a subroutine or format that
-is currently being exited. It that case, sometimes the lexical variables
-inside the sub would start out having values from the outer call, instead of
-being undefined as they should. This has been fixed. [perl #119311]
-
-=item *
-
-${^MPEN} is no longer treated as a synonym for ${^MATCH}.
-
-=item *
-
-Perl now tries a little harder to return the correct line number in
-C<(caller)[2]>. [perl #115768]
-
-=item *
-
-Line numbers inside multiline quote-like operators are now reported correctly.
-[perl #3643]
-
-=item *
-
-C<#line> directives inside code embedded in quote-like operators are now
-respected.
-
-=item *
-
-Line numbers are now correct inside the second here-doc when two here-doc
-markers occur on the same line.
-
-=item *
-
-An optimization in Perl 5.18 made incorrect assumptions causing a bad
-interaction with the L<Devel::CallParser> CPAN module. If the module was
-loaded then lexical variables declared in separate statements following a
-C<my(...)> list might fail to be cleared on scope exit.
-
-=item *
-
-C<&xsub> and C<goto &xsub> calls now allow the called subroutine to autovivify
-elements of @_.
-
-=item *
-
-C<&xsub> and C<goto &xsub> no longer crash if *_ has been undefined and has no
-ARRAY entry (i.e. @_ does not exist).
-
-=item *
-
-C<&xsub> and C<goto &xsub> now work with tied @_.
-
-=item *
-
-Overlong identifiers no longer cause a buffer overflow (and a crash). They
-started doing so in Perl 5.18.
-
-=item *
-
-The warning "Scalar value @hash{foo} better written as $hash{foo}" now produces
-far fewer false positives. In particular, C<@hash{+function_returning_a_list}>
-and C<@hash{ qw "foo bar baz" }> no longer warn. The same applies to array
-slices. [perl #28380, #114024]
-
-=item *
-
-C<$! = EINVAL; waitpid(0, WNOHANG);> no longer goes into an internal infinite
-loop. [perl #85228]
-
-=item *
-
-A possible segmentation fault in filehandle duplication has been fixed.
-
-=item *
-
-A subroutine in @INC can return a reference to a scalar containing the initial
-contents of the file. However, that scalar was freed prematurely if not
-referenced elsewhere, giving random results.
-
-=item *
-
-C<last> no longer returns values that the same statement has accumulated so
-far, fixing amongst other things the long-standing bug that C<push @a, last>
-would try to return the @a, copying it like a scalar in the process and
-resulting in the error, "Bizarre copy of ARRAY in last." [perl #3112]
-
-=item *
-
-In some cases, closing file handles opened to pipe to or from a process, which
-had been duplicated into a standard handle, would call perl's internal waitpid
-wrapper with a pid of zero. With the fix for [perl #85228] this zero pid was
-passed to C<waitpid>, possibly blocking the process. This wait for process
-zero no longer occurs. [perl #119893]
-
-=item *
-
-C<select> used to ignore magic on the fourth (timeout) argument, leading to
-effects such as C<select> blocking indefinitely rather than the expected sleep
-time. This has now been fixed. [perl #120102]
-
-=item *
-
-The class name in C<for my class $foo> is now parsed correctly. In the case of
-the second character of the class name being followed by a digit (e.g. 'a1b')
-this used to give the error "Missing $ on loop variable". [perl #120112]
-
-=item *
-
-Perl 5.18.0 accidentally disallowed C<-bareword> under C<use strict> and
-C<use integer>. This has been fixed. [perl #120288]
-
-=item *
-
-C<-a> at the start of a line (or a hyphen with any single letter that is
-not a filetest operator) no longer produces an erroneous 'Use of "-a"
-without parentheses is ambiguous' warning. [perl #120288]
-
-=item *
-
-Lvalue context is now properly propagated into bare blocks and C<if> and
-C<else> blocks in lvalue subroutines. Previously, arrays and hashes would
-sometimes incorrectly be flattened when returned in lvalue list context, or
-"Bizarre copy" errors could occur. [perl #119797]
-
-=item *
-
-Lvalue context is now propagated to the branches of C<||> and C<&&> (and
-their alphabetic equivalents, C<or> and C<and>). This means
-C<foreach (pos $x || pos $y) {...}> now allows C<pos> to be modified
-through $_.
-
-=item *
-
-C<stat> and C<readline> remember the last handle used; the former
-for the special C<_> filehandle, the latter for C<${^LAST_FH}>.
-C<eval "*foo if 0"> where *foo was the last handle passed to C<stat>
-or C<readline> could cause that handle to be forgotten if the
-handle were not opened yet. This has been fixed.
-
-=item *
-
-Various cases of C<delete $::{a}>, C<delete $::{ENV}> etc. causing a crash
-have been fixed. [perl #54044]
-
-=item *
-
-Setting C<$!> to EACCESS before calling C<require> could affect
-C<require>'s behaviour. This has been fixed.
-
-=item *
-
-The "Can't use \1 to mean $1 in expression" warning message now only occurs
-on the right-hand (replacement) part of a substitution. Formerly it could
-happen in code embedded in the left-hand side, or in any other quote-like
-operator.
-
-=item *
-
-Blessing into a reference (C<bless $thisref, $thatref>) has long been
-disallowed, but magical scalars for the second like C<$/> and those tied
-were exempt. They no longer are. [perl #119809]
-
-=item *
-
-Blessing into a reference was accidentally allowed in 5.18 if the class
-argument were a blessed reference with stale method caches (i.e., whose
-class had had subs defined since the last method call). They are
-disallowed once more, as in 5.16.
-
-=item *
-
-C<< $x->{key} >> where $x was declared as C<my Class $x> no longer crashes
-if a Class::FIELDS subroutine stub has been declared.
-
-=item *
-
-C<@$obj{'key'}> and C<${$obj}{key}> used to be exempt from compile-time
-field checking ("No such class field"; see L<fields>) but no longer are.
-
-=item *
-
-A nonexistent array element with a large index passed to a subroutine that
-ties the array and then tries to access the element no longer results in a
-crash.
-
-=item *
-
-Declaring a subroutine stub named NEGATIVE_INDICES no longer makes negative
-array indices crash when the current package is a tied array class.
-
-=item *
-
-Declaring a C<require>, C<glob>, or C<do> subroutine stub in the
-CORE::GLOBAL:: package no longer makes compilation of calls to the
-corresponding functions crash.
-
-=item *
-
-Aliasing CORE::GLOBAL:: functions to constants stopped working in Perl 5.10
-but has now been fixed.
-
-=item *
-
-When C<`...`> or C<qx/.../> calls a C<readpipe> override, double-quotish
-interpolation now happens, as is the case when there is no override.
-Previously, the presence of an override would make these quote-like
-operators act like C<q{}>, suppressing interpolation. [perl #115330]
-
-=item *
-
-C<<<<`...`> here-docs (with backticks as the delimiters) now call
-C<readpipe> overrides. [perl #119827]
-
-=item *
-
-C<&CORE::exit()> and C<&CORE::die()> now respect L<vmsish> hints.
-
-=item *
-
-Undefining a glob that triggers a DESTROY method that undefines the same
-glob is now safe. It used to produce "Attempt to free unreferenced glob
-pointer" warnings and leak memory.
-
-=item *
-
-If subroutine redefinition (C<eval 'sub foo{}'> or C<newXS> for XS code)
-triggers a DESTROY method on the sub that is being redefined, and that
-method assigns a subroutine to the same slot (C<*foo = sub {}>), C<$_[0]>
-is no longer left pointing to a freed scalar. Now DESTROY is delayed until
-the new subroutine has been installed.
-
-=item *
-
-On Windows, perl no longer calls CloseHandle() on a socket handle. This makes
-debugging easier on Windows by removing certain irrelevant bad handle
-exceptions. It also fixes a race condition that made socket functions randomly
-fail in a Perl process with multiple OS threads, and possible test failures in
-F<dist/IO/t/cachepropagate-tcp.t>. [perl #120091/118059]
-
-=item *
-
-Formats involving UTF-8 encoded strings, or strange vars like ties,
-overloads, or stringified refs (and in recent
-perls, pure NOK vars) would generally do the wrong thing in formats
-when the var is treated as a string and repeatedly chopped, as in
-C<< ^<<<~~ >> and similar. This has now been resolved.
-[perl #33832/45325/113868/119847/119849/119851]
-
-=item *
-
-C<< semctl(..., SETVAL, ...) >> would set the semaphore to the top
-32-bits of the supplied integer instead of the bottom 32-bits on
-64-bit big-endian systems. [perl #120635]
-
-=item *
-
-C<< readdir() >> now only sets C<$!> on error. C<$!> is no longer set
-to C<EBADF> when then terminating C<undef> is read from the directory
-unless the system call sets C<$!>. [perl #118651]
-
-=item *
-
-C<&CORE::glob> no longer causes an intermittent crash due to perl's stack
-getting corrupted. [perl #119993]
-
-=item *
-
-C<open> with layers that load modules (e.g., "<:encoding(utf8)") no longer
-runs the risk of crashing due to stack corruption.
-
-=item *
-
-Perl 5.18 broke autoloading via C<< ->SUPER::foo >> method calls by looking
-up AUTOLOAD from the current package rather than the current package's
-superclass. This has been fixed. [perl #120694]
-
-=item *
-
-A longstanding bug causing C<do {} until CONSTANT>, where the constant
-holds a true value, to read unallocated memory has been resolved. This
-would usually happen after a syntax error. In past versions of Perl it has
-crashed intermittently. [perl #72406]
-
-=item *
-
-Fix HP-UX C<$!> failure. HP-UX strerror() returns an empty string for an
-unknown error code. This caused an assertion to fail under DEBUGGING
-builds. Now instead, the returned string for C<"$!"> contains text
-indicating the code is for an unknown error.
-
-=item *
-
-Individually-tied elements of @INC (as in C<tie $INC[0]...>) are now
-handled correctly. Formerly, whether a sub returned by such a tied element
-would be treated as a sub depended on whether a FETCH had occurred
-previously.
-
-=item *
-
-C<getc> on a byte-sized handle after the same C<getc> operator had been
-used on a utf8 handle used to treat the bytes as utf8, resulting in erratic
-behavior (e.g., malformed UTF-8 warnings).
-
-=item *
-
-An initial C<{> at the beginning of a format argument line was always
-interpreted as the beginning of a block prior to v5.18. In Perl v5.18, it
-started being treated as an ambiguous token. The parser would guess
-whether it was supposed to be an anonymous hash constructor or a block
-based on the contents. Now the previous behavious has been restored.
-[perl #119973]
-
-=item *
-
-In Perl v5.18 C<undef *_; goto &sub> and C<local *_; goto &sub> started
-crashing. This has been fixed. [perl #119949]
-
-=item *
-
-Backticks (C< `` > or C< qx// >) combined with multiple threads on
-Win32 could result in output sent to stdout on one thread being
-captured by backticks of an external command in another thread.
-
-This could occur for pseudo-forked processes too, as Win32's
-pseudo-fork is implemented in terms of threads. [perl #77672]
-
-=item *
-
-C<< open $fh, ">+", undef >> no longer leaks memory when TMPDIR is set
-but points to a directory a temporary file cannot be created in. [perl
-#120951]
-
-=item *
-
-C< for ( $h{k} || '' ) > no longer auto-vivifies C<$h{k}>. [perl
-#120374]
-
-=item *
-
-On Windows machines, Perl now emulates the POSIX use of the environment
-for locale initialization. Previously, the environment was ignored.
-See L<perllocale/ENVIRONMENT>.
-
-=item *
-
-Fixed a crash when destroying a self-referencing GLOB. [perl #121242]
-
-=back
-
-=head1 Known Problems
-
-=over 4
-
-=item *
-
-L<IO::Socket> is known to fail tests on AIX 5.3. There is
-L<a patch|https://rt.perl.org/Ticket/Display.html?id=120835> in the request
-tracker, #120835, which may be applied to future releases.
-
-=item *
-
-The following modules are known to have test failures with this version of
-Perl. Patches have been submitted, so there will hopefully be new releases
-soon:
-
-=over
-
-=item *
-
-L<Data::Structure::Util> version 0.15
-
-=item *
-
-L<HTML::StripScripts> version 1.05
-
-=item *
-
-L<List::Gather> version 0.08.
-
-=back
+Many issues have been detected by L<Coverity|http://www.coverity.com/> and
+fixed.
=back
-=head1 Obituary
-
-Diana Rosa, 27, of Rio de Janeiro, went to her long rest on May 10,
-2014, along with the plush camel she kept hanging on her computer screen
-all the time. She was a passionate Perl hacker who loved the language and its
-community, and who never missed a Rio.pm event. She was a true artist, an
-enthusiast about writing code, singing arias and graffiting walls. We'll never
-forget you.
-
-Greg McCarroll died on August 28, 2013.
-
-Greg was well known for many good reasons. He was one of the organisers of
-the first YAPC::Europe, which concluded with an unscheduled auction where he
-frantically tried to raise extra money to avoid the conference making a
-loss. It was Greg who mistakenly arrived for a london.pm meeting a week
-late; some years later he was the one who sold the choice of official
-meeting date at a YAPC::Europe auction, and eventually as glorious leader of
-london.pm he got to inherit the irreverent confusion that he had created.
-
-Always helpful, friendly and cheerfully optimistic, you will be missed, but
-never forgotten.
-
=head1 Acknowledgements
-Perl 5.20.0 represents approximately 12 months of development since Perl 5.18.0
-and contains approximately 470,000 lines of changes across 2,900 files from 124
+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
authors.
Excluding auto-generated files, documentation and release tools, there were
-approximately 280,000 lines of changes to 1,800 .pm, .t, .c and .h files.
+approximately 2,600 lines of changes to 110 .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.0:
-
-Aaron Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai Alavi, Alan
-Hourihane, Alexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno Siegel,
-Aristotle Pagaltzis, Arthur Axel 'fREW' Schmidt, Brad Gilbert, Brendan Byrd,
-Brian Childs, Brian Fraser, Brian Gottreu, Chris 'BinGOs' Williams, Christian
-Millour, Colin Kuskie, Craig A. Berry, Dabrien 'Dabe' Murphy, Dagfinn Ilmari
-Mannsåker, Daniel Dragan, Darin McBride, David Golden, David Leadbeater, David
-Mitchell, David Nicol, David Steinbrunner, Dennis Kaarsemaker, Dominic
-Hargreaves, Ed Avis, Eric Brine, Evan Zacks, Father Chrysostomos, Florian
-Ragwitz, François Perrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas,
-Graham Knop, H.Merijn Brand, Hauke D, Heiko Eissfeldt, Hiroo Hayashi, Hojung
-Youn, James E Keenan, Jarkko Hietaniemi, Jerry D. Hedden, Jess Robinson, Jesse
-Luehrs, Johan Vromans, John Gardiner Myers, John Goodyear, John P. Linderman,
-John Peacock, kafka, Kang-min Liu, Karen Etheridge, Karl Williamson, Keedi Kim,
-Kent Fredric, kevin dawson, Kevin Falcone, Kevin Ryde, Leon Timmermans, Lukas
-Mai, Marc Simpson, Marcel Grünauer, Marco Peereboom, Marcus Holland-Moritz,
-Mark Jason Dominus, Martin McGrath, Matthew Horsfall, Max Maischein, Mike
-Doherty, Moritz Lenz, Nathan Glenn, Nathan Trapuzzano, Neil Bowers, Neil
-Williams, Nicholas Clark, Niels Thykier, Niko Tyni, Olivier Mengué, Owain G.
-Ainsworth, Paul Green, Paul Johnson, Peter John Acklam, Peter Martini, Peter
-Rabbitson, Petr PÃsaÅ™, Philip Boulain, Philip Guenther, Piotr Roszatycki,
-Rafael Garcia-Suarez, Reini Urban, Reuben Thomas, Ricardo Signes, Ruslan
-Zakirov, Sergey Alekseev, Shirakata Kentaro, Shlomi Fish, Slaven Rezic,
-Smylers, Steffen Müller, Steve Hay, Sullivan Beck, Thomas Sibley, Tobias
-Leich, Toby Inkster, Tokuhiro Matsuno, Tom Christiansen, Tom Hukins, Tony Cook,
-Victor Efimov, Viktor Turskyi, Vladimir Timofeev, YAMASHINA Hio, Yves Orton,
-Zefram, Zsbán Ambrus, Ævar Arnfjörð Bjarmason.
+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 list above is almost certainly incomplete as it is automatically generated
-from version control history. In particular, it does not include the names of
+from version control history. In particular, it does not include the names of
the (very much appreciated) contributors who reported issues to the Perl bug
tracker.
Many of the changes included in this version originated in the CPAN modules
-included in Perl's core. We're grateful to the entire CPAN community for
+included in Perl's core. We're grateful to the entire CPAN community for
helping Perl to flourish.
For a more complete list of all of Perl's historical contributors, please see
If you find what you think is a bug, you might check the articles recently
posted to the comp.lang.perl.misc newsgroup and the perl bug database at
-http://rt.perl.org/perlbug/ . There may also be information at
-http://www.perl.org/ , the Perl Home Page.
+https://rt.perl.org/ . There may also be information at http://www.perl.org/ ,
+the Perl Home Page.
If you believe you have an unreported bug, please run the L<perlbug> program
included with your release. Be sure to trim your bug down to a tiny but
not finding it. Chances are you left some needed parentheses out
earlier in the line, and you really meant a "less than".
+=item gmtime(%f) failed
+
+(W overflow) You called C<gmtime> with a number that it could not handle:
+too large, too small, or NaN. The returned value is C<undef>.
+
=item gmtime(%f) too large
(W overflow) You called C<gmtime> with a number that was larger than
form of C<open> does not support pipes, such as C<open($pipe, '|-', @args)>.
Use the two-argument C<open($pipe, '|prog arg1 arg2...')> form instead.
+=item localtime(%f) failed
+
+(W overflow) You called C<localtime> with a number that it could not handle:
+too large, too small, or NaN. The returned value is C<undef>.
+
=item localtime(%f) too large
(W overflow) You called C<localtime> with a number that was larger
=item Variable length lookbehind not implemented in regex m/%s/
(F) Lookbehind is allowed only for subexpressions whose length is fixed and
-known at compile time. See L<perlre>.
+known at compile time. For positive lookbehind, you can use the C<\K>
+regex construct as a way to get the equivalent functionality. See
+L<perlre/(?<=pattern) \K>.
+
+There are non-obvious Unicode rules under C</i> that can match variably,
+but which you might not think could. For example, the substring C<"ss">
+can match the single character LATIN SMALL LETTER SHARP S. There are
+other sequences of ASCII characters that can match single ligature
+characters, such as LATIN SMALL LIGATURE FFI matching C<qr/ffi/i>.
+Starting in Perl v5.16, if you only care about ASCII matches, adding the
+C</aa> modifier to the regex will exclude all these non-obvious matches,
+thus getting rid of this message. You can also say C<S<use re qw(/aa)>>
+to apply C</aa> to all regular expressions compiled within its scope.
+See L<re>.
=item "%s" variable %s masks earlier declaration in same %s
=back
+=head1 SEE ALSO
+
+For a complete list of features check L<feature>.
+
=head1 AUTHORS
brian d foy C<< <brian.d.foy@gmail.com> >>
-f File is a plain file.
-d File is a directory.
- -l File is a symbolic link.
+ -l File is a symbolic link (false if symlinks aren't
+ supported by the file system).
-p File is a named pipe (FIFO), or Filehandle is a pipe.
-S File is a socket.
-b File is a block special file.
-g File has setgid bit set.
-k File has sticky bit set.
- -T File is an ASCII text file (heuristic guess).
+ -T File is an ASCII or UTF-8 text file (heuristic guess).
-B File is a "binary" file (opposite of -T).
-M Script start time minus file modification time, in days.
in effect. Read the documentation for the C<filetest> pragma for more
information.
-The C<-T> and C<-B> switches work as follows. The first block or so of the
-file is examined for odd characters such as strange control codes or
-characters with the high bit set. If too many strange characters (>30%)
-are found, it's a C<-B> file; otherwise it's a C<-T> file. Also, any file
-containing a zero byte in the first block is considered a binary file. If C<-T>
-or C<-B> is used on a filehandle, the current IO buffer is examined
+The C<-T> and C<-B> switches work as follows. The first block or so of
+the file is examined to see if it is valid UTF-8 that includes non-ASCII
+characters. If, so it's a C<-T> file. Otherwise, that same portion of
+the file is examined for odd characters such as strange control codes or
+characters with the high bit set. If more than a third of the
+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
+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
file, or a file at EOF when testing a filehandle. Because you have to
read a file to do the C<-T> test, on most occasions you want to use a C<-f>
delete $hash{$key}; # This is safe
}
+Tied hashes may have a different ordering behaviour to perl's hash
+implementation.
+
This prints out your environment like the printenv(1) program,
but in a different order:
If you don't really want to execute the first argument, but want to lie
to the program you are executing about its own name, you can specify
the program you actually want to run as an "indirect object" (without a
-comma) in front of the LIST. (This always forces interpretation of the
-LIST as a multivalued list, even if there is only a single scalar in
-the list.) Example:
+comma) in front of the LIST, as in C<exec PROGRAM LIST>. (This always
+forces interpretation of the LIST as a multivalued list, even if there
+is only a single scalar in the list.) Example:
$shell = '/bin/csh';
exec $shell '-sh'; # pretend it's a login shell
it tried to run a program named I<"echo surprise">, didn't find it, and set
C<$?> to a non-zero value indicating failure.
+On Windows, only the C<exec PROGRAM LIST> indirect object syntax will
+reliably avoid using the shell; C<exec LIST>, even with more than one
+element, will fall back to the shell if the first spawn fails.
+
Perl attempts to flush all files opened for output before the exec,
but this may not be supported on some platforms (see L<perlport>).
To be safe, you may need to set C<$|> ($AUTOFLUSH in English) or
as each other. See L<perlsec/"Algorithmic Complexity Attacks"> for
details on why hash order is randomized. Aside from the guarantees
provided here the exact details of Perl's hash algorithm and the hash
-traversal order are subject to change in any release of Perl.
+traversal order are subject to change in any release of Perl. Tied hashes
+may behave differently to Perl's hashes with respect to changes in order on
+insertion and deletion of items.
As a side effect, calling keys() resets the internal iterator of the HASH or
ARRAY (see L</each>). In particular, calling keys() in void context resets
=for Pod::Functions +5.6.0 declare and assign a package variable (lexical scoping)
-C<our> makes a lexical alias to a package variable of the same name in the current
-package for use within the current lexical scope.
+C<our> makes a lexical alias to a package (i.e. global) variable of the
+same name in the current package for use within the current lexical scope.
-C<our> has the same scoping rules as C<my> or C<state>, but C<our> only
-declares an alias, whereas C<my> or C<state> both declare a variable name and
-allocate storage for that name within the current scope.
+C<our> has the same scoping rules as C<my> or C<state>, meaning that it is
+only valid within a lexical scope. Unlike C<my> and C<state>, which both
+declare new (lexical) variables, C<our> only creates an alias to an
+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. In this way, C<our> differs from
-C<use vars>, which allows use of an unqualified name I<only> within the
-affected package, but across scopes.
+the lexical scope of the C<our> declaration.
+
+ package Foo;
+ use strict;
+
+ $Foo::foo = 23;
+
+ {
+ our $foo; # alias to $Foo::foo
+ print $foo; # prints 23
+ }
+
+ print $Foo::foo; # prints 23
+
+ print $foo; # ERROR: requires explicit package name
+
+This works even if the package variable has not been used before, as
+package variables spring into existence when first used.
+
+ package Foo;
+ use strict;
+
+ our $foo = 23; # just like $Foo::foo = 23
+
+ print $Foo::foo; # prints 23
If more than one variable is listed, the list must be placed
in parentheses.
- our $foo;
our($bar, $baz);
An C<our> declaration declares an alias for a package variable that will be visible
our ( undef, $min, $hour ) = localtime;
+C<our> differs from C<use vars>, which allows use of an unqualified name
+I<only> within the affected package, but across scopes.
+
=item pack TEMPLATE,LIST
X<pack>
(this is C</bin/sh -c> on Unix platforms, but varies on other
platforms). If there are no shell metacharacters in the argument,
it is split into words and passed directly to C<execvp>, which is
-more efficient.
+more efficient. On Windows, only the C<system PROGRAM LIST> syntax will
+reliably avoid using the shell; C<system LIST>, even with more than one
+element, will fall back to the shell if the first spawn fails.
Perl will attempt to flush all files opened for
output before any operation that may do a fork, but this may not be
as each other. See L<perlsec/"Algorithmic Complexity Attacks"> for
details on why hash order is randomized. Aside from the guarantees
provided here the exact details of Perl's hash algorithm and the hash
-traversal order are subject to change in any release of Perl.
+traversal order are subject to change in any release of Perl. Tied hashes
+may behave differently to Perl's hashes with respect to changes in order on
+insertion and deletion of items.
As a side effect, calling values() resets the HASH or ARRAY's internal
iterator, see L</each>. (In particular, calling values() in void context
to an array of UVs. But,
using it for non-strings requires care, as the underlying assumption of
much of the internals is that PVs are just for strings. Often, for
-example, a trailing NUL is tacked on automatically. The non-string use
+example, a trailing C<NUL> is tacked on automatically. The non-string use
is documented only in this paragraph.)
The seven routines are:
In the unlikely case of a SV requiring more complex initialization, you
can create an empty SV with newSV(len). If C<len> is 0 an empty SV of
type NULL is returned, else an SV of type PV is returned with len + 1 (for
-the NUL) bytes of storage allocated, accessible via SvPVX. In both cases
+the C<NUL>) bytes of storage allocated, accessible via SvPVX. In both cases
the SV has the undef value.
SV *sv = newSV(0); /* no storage allocated */
allow Perl to calculate the length by using C<sv_setpv> or by specifying
0 as the second argument to C<newSVpv>. Be warned, though, that Perl will
determine the string's length by using C<strlen>, which depends on the
-string terminating with a NUL character, and not otherwise containing
+string terminating with a C<NUL> character, and not otherwise containing
NULs.
The arguments of C<sv_setpvf> are processed like C<sprintf>, and the
The C<sv_set*()> functions are not generic enough to operate on values
that have "magic". See L<Magic Virtual Tables> later in this document.
-All SVs that contain strings should be terminated with a NUL character.
-If it is not NUL-terminated there is a risk of
+All SVs that contain strings should be terminated with a C<NUL> character.
+If it is not C<NUL>-terminated there is a risk of
core dumps and corruptions from code which passes the string to C
-functions or system calls which expect a NUL-terminated string.
-Perl's own functions typically add a trailing NUL for this reason.
+functions or system calls which expect a C<NUL>-terminated string.
+Perl's own functions typically add a trailing C<NUL> for this reason.
Nevertheless, you should be very careful when you pass a string stored
in an SV to a C function or system call.
used in this case. But that can be quite inefficient because C<PL_na> must
be accessed in thread-local storage in threaded Perl. In any case, remember
that Perl allows arbitrary strings of data that may both contain NULs and
-might not be terminated by a NUL.
+might not be terminated by a C<NUL>.
Also remember that C doesn't allow you to safely say C<foo(SvPV(s, len),
len);>. It might work with your
which will determine if more memory needs to be allocated. If so, it will
call the function C<sv_grow>. Note that C<SvGROW> can only increase, not
decrease, the allocated memory of an SV and that it does not automatically
-add space for the trailing NUL byte (perl's own string functions typically do
+add space for the trailing C<NUL> byte (perl's own string functions typically do
C<SvGROW(sv, len + 1)>).
+If you want to write to an existing SV's buffer and set its value to a
+string, use SvPV_force() or one of its variants to force the SV to be
+a PV. This will remove any of various types of non-stringness from
+the SV while preserving the content of the SV in the PV. This can be
+used, for example, to append data from an API function to a buffer
+without extra copying:
+
+ (void)SvPVbyte_force(sv, len);
+ s = SvGROW(sv, len + needlen + 1);
+ /* something that modifies up to needlen bytes at s+len, but
+ modifies newlen bytes
+ eg. newlen = read(fd, s + len, needlen);
+ ignoring errors for these examples
+ */
+ s[len + newlen] = '\0';
+ SvCUR_set(sv, len + newlen);
+ SvUTF8_off(sv);
+ SvSETMAGIC(sv);
+
+If you already have the data in memory or if you want to keep your
+code simple, you can use one of the sv_cat*() variants, such as
+sv_catpvn(). If you want to insert anywhere in the string you can use
+sv_insert() or sv_insert_flags().
+
+If you don't need the existing content of the SV, you can avoid some
+copying with:
+
+ sv_setpvn(sv, "", 0);
+ s = SvGROW(sv, needlen + 1);
+ /* something that modifies up to needlen bytes at s, but modifies
+ newlen bytes
+ eg. newlen = read(fd, s. needlen);
+ */
+ s[newlen] = '\0';
+ SvCUR_set(sv, newlen);
+ SvPOK_only(sv); /* also clears SVf_UTF8 */
+ SvSETMAGIC(sv);
+
+Again, if you already have the data in memory or want to avoid the
+complexity of the above, you can use sv_setpvn().
+
+If you have a buffer allocated with Newx() and want to set that as the
+SV's value, you can use sv_usepvn_flags(). That has some requirements
+if you want to avoid perl re-allocating the buffer to fit the trailing
+NUL:
+
+ Newx(buf, somesize+1, char);
+ /* ... fill in buf ... */
+ buf[somesize] = '\0';
+ sv_usepvn_flags(sv, buf, somesize, SV_SMAGIC | SV_HAS_TRAILING_NUL);
+ /* buf now belongs to perl, don't release it */
+
If you have an SV and want to know what kind of data Perl thinks is stored
in it, you can use the following macros to check the type of SV you have.
=head2 Security problems
Last but not least, here are various tips for safer coding.
+See also L<perlclib> for libc/stdio replacements one should use.
=over 4
=item *
+Do not use tmpfile()
+
+Use mkstemp() instead.
+
+=item *
+
Do not use strcpy() or strcat() or strncpy() or strncat()
Use my_strlcpy() and my_strlcat() instead: they either use the native
Matt S Trout, David Golden, Florian Ragwitz, Tatsuhiko Miyagawa,
Chris C<BinGOs> Williams, Zefram, Ævar Arnfjörð Bjarmason, Stevan
Little, Dave Rolsky, Max Maischein, Abigail, Jesse Luehrs, Tony Cook,
-Dominic Hargreaves, Aaron Crane and Aristotle Pagaltzis.
+Dominic Hargreaves, Aaron Crane, Aristotle Pagaltzis, Matthew Horsfall
+and Peter Martini.
=head2 PUMPKIN?
Ricardo 5.20.0-RC1 2014-May-16 The 5.20 maintenance track
Ricardo 5.20.0 2014-May-27
+ Steve 5.20.1-RC1 2014-Aug-25
+ Steve 5.20.1-RC2 2014-Sep-07
+ Steve 5.20.1 2014-Sep-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
=head2 SELECTED RELEASE SIZES
=over
-=item Category LC_NUMERIC: Numeric formatting
+=item Category C<LC_NUMERIC>: Numeric formatting
This indicates how numbers should be formatted for human readability,
for example the character used as the decimal point.
-=item Category LC_MONETARY: Formatting of monetary amounts
+=item Category C<LC_MONETARY>: Formatting of monetary amounts
=for comment
The nbsp below makes this look better (though not great)
E<160>
-=item Category LC_TIME: Date/Time formatting
+=item Category C<LC_TIME>: Date/Time formatting
=for comment
The nbsp below makes this look better (though not great)
E<160>
-=item Category LC_MESSAGES: Error and other messages
+=item Category C<LC_MESSAGES>: Error and other messages
This is used by Perl itself only for accessing operating system error
messages via L<$!|perlvar/$ERRNO> and L<$^E|perlvar/$EXTENDED_OS_ERROR>.
-=item Category LC_COLLATE: Collation
+=item Category C<LC_COLLATE>: Collation
This indicates the ordering of letters for comparison and sorting.
In Latin alphabets, for example, "b", generally follows "a".
-=item Category LC_CTYPE: Character Types
+=item Category C<LC_CTYPE>: Character Types
This indicates, for example if a character is an uppercase letter.
XS modules for all categories but C<LC_NUMERIC> get the underlying
locale, and hence any C library functions they call will use that
-underlying locale. Perl always initializes C<LC_NUMERIC> to C<"C">
-because too many modules are unable to cope with the decimal point in a
-floating point number not being a dot (it's a comma in many locales).
-But note that these modules are vulnerable because C<LC_NUMERIC>
-currently can be changed at any time by a call to the C C<set_locale()>
-by XS code or by something XS code calls, or by C<POSIX::setlocale()> by
-Perl code. This is true also for the Perl-provided lite wrappers for XS
-modules to use some C library C<printf> functions:
-C<Gconvert>,
-L<my_sprintf|perlapi/my_sprintf>,
-L<my_snprintf|perlapi/my_snprintf>,
-and
-L<my_vsnprintf|perlapi/my_vsnprintf>.
+underlying locale. For more discussion, see L<perlxs/CAVEATS>.
=back
operands are char-for-char identical. If you really want to know whether
two strings--which C<eq> and C<cmp> may consider different--are equal
as far as collation in the locale is concerned, see the discussion in
-L<Category LC_COLLATE: Collation>.
+L<Category C<LC_COLLATE>: Collation>.
=item *
example.
If no second argument is provided and the category is something other
-than LC_ALL, the function returns a string naming the current locale
+than C<LC_ALL>, the function returns a string naming the current locale
for the category. You can use this value as the second argument in a
subsequent call to C<setlocale()>, B<but> on some platforms the string
is opaque, not something that most people would be able to decipher as
to what locale it means.
-If no second argument is provided and the category is LC_ALL, the
+If no second argument is provided and the category is C<LC_ALL>, the
result is implementation-dependent. It may be a string of
concatenated locale names (separator also implementation-dependent)
or a single locale name. Please consult your L<setlocale(3)> man page for
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
-This means that your locale settings had LC_ALL set to "En_US" and
+This means that your locale settings had C<LC_ALL> set to "En_US" and
LANG exists but has no value. Perl tried to believe you but could not.
Instead, Perl gave up and fell back to the "C" locale, the default locale
that is supposed to work no matter what. (On Windows, it first tries
locale inconsistencies or to run Perl under the default locale "C".
Perl's moaning about locale problems can be silenced by setting the
-environment variable PERL_BADLANG to a zero value, for example "0".
+environment variable C<PERL_BADLANG> to a zero value, for example "0".
This method really just sweeps the problem under the carpet: you tell
Perl to shut up even when Perl sees that something is wrong. Do not
be surprised if later something locale-dependent misbehaves.
Perl can be run under the "C" locale by setting the environment
-variable LC_ALL to "C". This method is perhaps a bit more civilized
-than the PERL_BADLANG approach, but setting LC_ALL (or
+variable C<LC_ALL> to "C". This method is perhaps a bit more civilized
+than the C<PERL_BADLANG> approach, but setting C<LC_ALL> (or
other locale variables) may affect other programs as well, not just
Perl. In particular, external programs run from within Perl will see
these changes. If you make the new settings permanent (read on), all
programs you run see the changes. See L<"ENVIRONMENT"> for
the full list of relevant environment variables and L<USING LOCALES>
for their effects in Perl. Effects in other programs are
-easily deducible. For example, the variable LC_COLLATE may well affect
+easily deducible. For example, the variable C<LC_COLLATE> may well affect
your B<sort> program (or whatever the program that arranges "records"
alphabetically in your system is called).
some combination categories allow manipulation of more than one
basic category at a time. See L<"ENVIRONMENT"> for a discussion of these.
-=head2 Category LC_COLLATE: Collation
+=head2 Category C<LC_COLLATE>: Collation
In the scope of S<C<use locale>> (but not a
C<use locale ':not_characters'>), Perl looks to the C<LC_COLLATE>
which use the standard system-supplied C<libc> functions that
always obey the current C<LC_COLLATE> locale.
-=head2 Category LC_CTYPE: Character Types
+=head2 Category C<LC_CTYPE>: Character Types
In the scope of S<C<use locale>> (but not a
C<use locale ':not_characters'>), Perl obeys the C<LC_CTYPE> locale
digits--for example, in command strings--locale-aware applications
should use C<\w> with the C</a> regular expression modifier. See L<"SECURITY">.
-=head2 Category LC_NUMERIC: Numeric Formatting
+=head2 Category C<LC_NUMERIC>: Numeric Formatting
After a proper C<POSIX::setlocale()> call, and within the scope of one
of the C<use locale> variants, Perl obeys the C<LC_NUMERIC>
See also L<I18N::Langinfo> and C<RADIXCHAR>.
-=head2 Category LC_MONETARY: Formatting of monetary amounts
+=head2 Category C<LC_MONETARY>: Formatting of monetary amounts
The C standard defines the C<LC_MONETARY> category, but not a function
that is affected by its contents. (Those with experience of standards
See also L<I18N::Langinfo> and C<CRNCYSTR>.
-=head2 LC_TIME
+=head2 C<LC_TIME>
Output produced by C<POSIX::strftime()>, which builds a formatted
human-readable date/time string, is affected by the current C<LC_TIME>
=item *
String interpolation with case-mapping, as in, say, C<$dest =
-"C:\U$name.$ext">, may produce dangerous results if a bogus LC_CTYPE
+"C:\U$name.$ext">, may produce dangerous results if a bogus C<LC_CTYPE>
case-mapping table is in effect.
=item *
zero--that is, "0" or ""-- Perl will complain about locale setting
failures.
-B<NOTE>: PERL_BADLANG only gives you a way to hide the warning message.
+B<NOTE>: C<PERL_BADLANG> only gives you a way to hide the warning message.
The message tells about some problem in your system's locale support,
and you should investigate what the problem is.
the next lower one in priority. If none are valid, on Windows, the
system default locale is then tried. If all else fails, the C<"C">
locale is used. If even that doesn't work, something is badly broken,
-but Perl tries to forge ahead with whatever the locale settinga might
+but Perl tries to forge ahead with whatever the locale settings might
be.
=over 12
-=item LC_ALL
+=item C<LC_ALL>
C<LC_ALL> is the "override-all" locale environment variable. If
set, it overrides all the rest of the locale environment variables.
-=item LANGUAGE
+=item C<LANGUAGE>
B<NOTE>: C<LANGUAGE> is a GNU extension, it affects you only if you
are using the GNU libc. This is the case if you are using e.g. Linux.
instead a "path" (":"-separated list) of I<languages> (not locales).
See the GNU C<gettext> library documentation for more information.
-=item LC_CTYPE
+=item C<LC_CTYPE>.
In the absence of C<LC_ALL>, C<LC_CTYPE> chooses the character type
locale. In the absence of both C<LC_ALL> and C<LC_CTYPE>, C<LANG>
chooses the character type locale.
-=item LC_COLLATE
+=item C<LC_COLLATE>
In the absence of C<LC_ALL>, C<LC_COLLATE> chooses the collation
(sorting) locale. In the absence of both C<LC_ALL> and C<LC_COLLATE>,
C<LANG> chooses the collation locale.
-=item LC_MONETARY
+=item C<LC_MONETARY>
In the absence of C<LC_ALL>, C<LC_MONETARY> chooses the monetary
formatting locale. In the absence of both C<LC_ALL> and C<LC_MONETARY>,
C<LANG> chooses the monetary formatting locale.
-=item LC_NUMERIC
+=item C<LC_NUMERIC>
In the absence of C<LC_ALL>, C<LC_NUMERIC> chooses the numeric format
locale. In the absence of both C<LC_ALL> and C<LC_NUMERIC>, C<LANG>
chooses the numeric format.
-=item LC_TIME
+=item C<LC_TIME>
In the absence of C<LC_ALL>, C<LC_TIME> chooses the date and time
formatting locale. In the absence of both C<LC_ALL> and C<LC_TIME>,
C<LANG> chooses the date and time formatting locale.
-=item LANG
+=item C<LANG>
C<LANG> is the "catch-all" locale environment variable. If it is set, it
is used as the last resort after the overall C<LC_ALL> and the
-category-specific C<LC_...>.
+category-specific C<LC_I<foo>>
=back
=head2 Examples
-The LC_NUMERIC controls the numeric output:
+The C<LC_NUMERIC> controls the numeric output:
use locale;
use POSIX qw(locale_h); # Imports setlocale() and the LC_ constants.
they and Perl store characters that take up multiple bytes the same way.
However, some, if not most, C library implementations may not process
the characters in the upper half of the Latin-1 range (128 - 255)
-properly under LC_CTYPE. To see if a character is a particular type
+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()>.
\c[ chr(27)
\c] chr(29)
\c^ chr(30)
- \c? chr(127)
+ \c_ chr(31)
+ \c? chr(127) # (on ASCII platforms)
In other words, it's the character whose code point has had 64 xor'd with
-its uppercase. C<\c?> is DELETE because C<ord("?") ^ 64> is 127, and
+its uppercase. C<\c?> is DELETE on ASCII platforms because
+S<C<ord("?") ^ 64>> is 127, and
C<\c@> is NULL because the ord of "@" is 64, so xor'ing 64 itself produces 0.
Also, C<\c\I<X>> yields C< chr(28) . "I<X>"> for any I<X>, but cannot come at the
On ASCII platforms, the resulting characters from the list above are the
complete set of ASCII controls. This isn't the case on EBCDIC platforms; see
-L<perlebcdic/OPERATOR DIFFERENCES> for the complete list of what these
-sequences mean on both ASCII and EBCDIC platforms.
+L<perlebcdic/OPERATOR DIFFERENCES> for a full discussion of the
+differences between these for ASCII versus EBCDIC platforms.
-Use of any other character following the "c" besides those listed above is
+Use of any other character following the C<"c"> besides those listed above is
discouraged, and some are deprecated with the intention of removing
those in a later Perl version. What happens for any of these
other characters currently though, is that the value is derived by xor'ing
C<\o{}>, or convert to something else, such as to hex and use C<\x{}>
instead.
-Having fewer than 3 digits may lead to a misleading warning message that says
-that what follows is ignored. For example, C<"\128"> in the ASCII character set
-is equivalent to the two characters C<"\n8">, but the warning C<Illegal octal
-digit '8' ignored> will be thrown. If C<"\n8"> is what you want, you can
-avoid this warning by padding your octal number with C<0>'s: C<"\0128">.
-
=item [8]
Several constructs above specify a character by a number. That number
after the trailing delimiter.
Once upon a time, Perl would recompile regular expressions
unnecessarily, and this modifier was useful to tell it not to do so, in the
-interests of speed. But now, the only reasons to use C</o> are either:
+interests of speed. But now, the only reasons to use C</o> are one of:
=over
And don't forget, all commands but C<=encoding> last up
until the end of its I<paragraph>, not its line. So in the
examples below, you can see that every command needs the blank
-line after it, to end its paragraph. (And some older
-Pod translators may require the C<=encoding> line to be similarly
-separated.)
+line after it, to end its paragraph. (And some older Pod translators
+may require the C<=encoding> line to have a following blank line as
+well, even though it should be legal to omit.)
Some examples of lists include:
+=encoding utf8
+
=head1 NAME
perlpolicy - Various and sundry policies and commitments related to the Perl core
=item *
Acceptable documentation updates are those that correct factual errors,
-explain significant bugs or deficiencies in the current implementation,
+explain significant bugs or deficiencies in the current implementation,
or fix broken markup.
=item *
=item *
Patches that fix crashing bugs that do not otherwise change Perl's
-functionality or negatively impact performance are acceptable.
+functionality or negatively impact performance are acceptable.
=item *
=item *
-Updates to dual-life modules should consist of minimal patches to
+Updates to dual-life modules should consist of minimal patches to
fix crashing or security issues (as above).
=item *
-Minimal patches that fix platform-specific test failures or
+Minimal patches that fix platform-specific test failures or build or
installation issues are acceptable. When these changes are made
to dual-life modules for which CPAN is canonical, any changes
should be coordinated with the upstream author.
Any committer may cherry-pick any commit from blead to a maint branch if
they send mail to perl5-porters announcing their intent to cherry-pick
-a specific commit along with a rationale for doing so and at least two
+a specific commit along with a rationale for doing so and at least two
other committers respond to the list giving their assent. (This policy
applies to current and former pumpkings, as well as other committers.)
but, with very few exceptions, documentation isn't "dual-life" --
it doesn't need to fully describe how all old versions used to work.
+=head1 STANDARDS OF CONDUCT
+
+The official forum for the development of perl is the perl5-porters mailing
+list, mentioned above, and its bugtracker at rt.perl.org. All participants in
+discussion there are expected to adhere to a standard of conduct.
+
+=over 4
+
+=item *
+
+Always be civil.
+
+=item *
+
+Heed the moderators.
+
+=back
+
+Civility is simple: stick to the facts while avoiding demeaning remarks and
+sarcasm. It is not enough to be factual. You must also be civil. Responding
+in kind to incivility is not acceptable.
+
+If the list moderators tell you that you are not being civil, carefully
+consider how your words have appeared before responding in any way. You may
+protest, but repeated protest in the face of a repeatedly reaffirmed decision
+is not acceptable.
+
+Unacceptable behavior will result in a public and clearly identified warning.
+Repeated unacceptable behavior will result in removal from the mailing list.
+The first removal is for one month. Subsequent removals will double in length.
+After six months with no warning, a user's ban length is reset. Removals, like
+warnings, are public.
+
+The list of moderators will be public knowledge. At present, it is:
+Aaron Crane, Andy Dougherty, Ricardo Signes, Steffen Müller.
=head1 CREDITS
=item exec
+C<exec LIST> without the use of indirect object syntax (C<exec PROGRAM LIST>)
+may fall back to trying the shell if the first spawn() fails. (Win32)
+
Does not automatically flush output handles on some platforms.
(SunOS, Solaris, HP-UX)
I<scalar> will call the native command line direct and no such emulation
of a child Unix program will exists. Mileage B<will> vary. (S<RISC OS>)
+C<system LIST> without the use of indirect object syntax (C<system PROGRAM LIST>)
+may fall back to trying the shell if the first spawn() fails. (Win32)
+
Does not automatically flush output handles on some platforms.
(SunOS, Solaris, HP-UX)
class, which is unaffected by C</x>), then you'll either have to
escape them (using backslashes or C<\Q...\E>) or encode them using octal,
hex, or C<\N{}> escapes.
+It is ineffective to try to continue a comment onto the next line by
+escaping the C<\n> with a backslash or C<\Q>.
You can use L</(?#text)> to create a comment that ends earlier than the
end of the current line, but C<text> also can't contain the closing
\o{}, \000 character whose ordinal is the given octal number
\l lowercase next char (think vi)
\u uppercase next char (think vi)
- \L lowercase till \E (think vi)
- \U uppercase till \E (think vi)
- \Q quote (disable) pattern metacharacters till \E
+ \L lowercase until \E (think vi)
+ \U uppercase until \E (think vi)
+ \Q quote (disable) pattern metacharacters until \E
\E end either case modification or quoted section, think vi
Details are in L<perlop/Quote and Quote-like Operators>.
matches a word that follows a tab, without including the tab in C<$&>.
Works only for fixed-width look-behind.
-There is a special form of this construct, called C<\K>, which causes the
+There is a special form of this construct, called C<\K> (available since
+Perl 5.10.0), which causes the
regex engine to "keep" everything it had matched prior to the C<\K> and
not include it in C<$&>. This effectively provides variable-length
look-behind. The use of C<\K> inside of another look-around assertion
/(?<NAME>(?&NAME_PAT))(?<ADDR>(?&ADDRESS_PAT))
(?(DEFINE)
(?<NAME_PAT>....)
- (?<ADRESS_PAT>....)
+ (?<ADDRESS_PAT>....)
)/x
Note that capture groups matched inside of recursion are not accessible
permutations (use e.g. the CPAN modules C<Algorithm::Permute> or
C<Algorithm::FastPermute>), or for any cryptographic applications.
+Tied hashes may have their own ordering and algorithmic complexity
+attacks.
+
=item *
Regular expressions - Perl's regular expression engine is so called NFA
and the control sections).
X<my>
+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.
+
Besides the normal array index looping, C<for> can lend itself
to many other interesting applications. Here's one that avoids the
problem you get into if you explicitly test for end-of-file on
(The same is done if an existing logical name was defined in
executive or kernel mode; an existing user or supervisor mode
logical name is reset to the new value.) If the value is an empty
-string, the logical name's translation is defined as a single NUL
-(ASCII 00) character, since a logical name cannot translate to a
+string, the logical name's translation is defined as a single C<NUL>
+(ASCII C<\0>) character, since a logical name cannot translate to a
zero-length string. (This restriction does not apply to CLI symbols
or CRTL C<environ> values; they are set to the empty string.)
An element of the CRTL C<environ> array can be set only if your
if (!(mg = mg_find_mglob(sv))) {
mg = sv_magicext_mglob(sv);
}
- assert(SvPOK(dstr));
- MgBYTEPOS_set(mg, sv, SvPVX(dstr), m - orig);
+ assert(SvPOK(sv));
+ MgBYTEPOS_set(mg, sv, SvPVX(sv), m - orig);
}
if (old != rx)
(void)ReREFCNT_inc(rx);
}
}
if (UNLIKELY(PL_delaymagic & ~DM_DELAY)) {
- int rc = 0;
/* Will be used to set PL_tainting below */
Uid_t tmp_uid = PerlProc_getuid();
Uid_t tmp_euid = PerlProc_geteuid();
Gid_t tmp_gid = PerlProc_getgid();
Gid_t tmp_egid = PerlProc_getegid();
+ /* XXX $> et al currently silently ignore failures */
if (PL_delaymagic & DM_UID) {
#ifdef HAS_SETRESUID
- rc = setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
- (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
- (Uid_t)-1);
+ PERL_UNUSED_RESULT(
+ setresuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
+ (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1,
+ (Uid_t)-1));
#else
# ifdef HAS_SETREUID
- rc = setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
- (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1);
+ PERL_UNUSED_RESULT(
+ setreuid((PL_delaymagic & DM_RUID) ? PL_delaymagic_uid : (Uid_t)-1,
+ (PL_delaymagic & DM_EUID) ? PL_delaymagic_euid : (Uid_t)-1));
# else
# ifdef HAS_SETRUID
if ((PL_delaymagic & DM_UID) == DM_RUID) {
- rc = setruid(PL_delaymagic_uid);
+ PERL_UNUSED_RESULT(setruid(PL_delaymagic_uid));
PL_delaymagic &= ~DM_RUID;
}
# endif /* HAS_SETRUID */
# ifdef HAS_SETEUID
if ((PL_delaymagic & DM_UID) == DM_EUID) {
- rc = seteuid(PL_delaymagic_euid);
+ PERL_UNUSED_RESULT(seteuid(PL_delaymagic_euid));
PL_delaymagic &= ~DM_EUID;
}
# endif /* HAS_SETEUID */
if (PL_delaymagic & DM_UID) {
if (PL_delaymagic_uid != PL_delaymagic_euid)
DIE(aTHX_ "No setreuid available");
- rc = PerlProc_setuid(PL_delaymagic_uid);
+ PERL_UNUSED_RESULT(PerlProc_setuid(PL_delaymagic_uid));
}
# endif /* HAS_SETREUID */
#endif /* HAS_SETRESUID */
- /* XXX $> et al currently silently ignore failures */
- PERL_UNUSED_VAR(rc);
-
tmp_uid = PerlProc_getuid();
tmp_euid = PerlProc_geteuid();
}
+ /* XXX $> et al currently silently ignore failures */
if (PL_delaymagic & DM_GID) {
#ifdef HAS_SETRESGID
- rc = setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
- (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
- (Gid_t)-1);
+ PERL_UNUSED_RESULT(
+ setresgid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
+ (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1,
+ (Gid_t)-1));
#else
# ifdef HAS_SETREGID
- rc = setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
- (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1);
+ PERL_UNUSED_RESULT(
+ setregid((PL_delaymagic & DM_RGID) ? PL_delaymagic_gid : (Gid_t)-1,
+ (PL_delaymagic & DM_EGID) ? PL_delaymagic_egid : (Gid_t)-1));
# else
# ifdef HAS_SETRGID
if ((PL_delaymagic & DM_GID) == DM_RGID) {
- rc = setrgid(PL_delaymagic_gid);
+ PERL_UNUSED_RESULT(setrgid(PL_delaymagic_gid));
PL_delaymagic &= ~DM_RGID;
}
# endif /* HAS_SETRGID */
# ifdef HAS_SETEGID
if ((PL_delaymagic & DM_GID) == DM_EGID) {
- rc = setegid(PL_delaymagic_egid);
+ PERL_UNUSED_RESULT(setegid(PL_delaymagic_egid));
PL_delaymagic &= ~DM_EGID;
}
# endif /* HAS_SETEGID */
if (PL_delaymagic & DM_GID) {
if (PL_delaymagic_gid != PL_delaymagic_egid)
DIE(aTHX_ "No setregid available");
- rc = PerlProc_setgid(PL_delaymagic_gid);
+ PERL_UNUSED_RESULT(PerlProc_setgid(PL_delaymagic_gid));
}
# endif /* HAS_SETREGID */
#endif /* HAS_SETRESGID */
- /* XXX $> et al currently silently ignore failures */
- PERL_UNUSED_VAR(rc);
-
tmp_gid = PerlProc_getgid();
tmp_egid = PerlProc_getegid();
}
}
if (err == NULL) {
+ /* diag_listed_as: gmtime(%f) failed */
/* XXX %lld broken for quads */
Perl_ck_warner(aTHX_ packWARN(WARN_OVERFLOW),
"%s(%.0" NVff ") failed", opname, when);
}
if (GIMME != G_ARRAY) { /* scalar context */
- SV *tsv;
- /* XXX newSVpvf()'s %lld type is broken, so cheat with a double */
- double year = (double)tmbuf.tm_year + 1900;
-
EXTEND(SP, 1);
EXTEND_MORTAL(1);
if (err == NULL)
RETPUSHUNDEF;
-
- tsv = Perl_newSVpvf(aTHX_ "%s %s %2d %02d:%02d:%02d %.0f",
- dayname[tmbuf.tm_wday],
- monname[tmbuf.tm_mon],
- tmbuf.tm_mday,
- tmbuf.tm_hour,
- tmbuf.tm_min,
- tmbuf.tm_sec,
- year);
- mPUSHs(tsv);
+ else {
+ mPUSHs(Perl_newSVpvf(aTHX_ "%s %s %2d %02d:%02d:%02d %.0f",
+ dayname[tmbuf.tm_wday],
+ monname[tmbuf.tm_mon],
+ tmbuf.tm_mday,
+ tmbuf.tm_hour,
+ tmbuf.tm_min,
+ tmbuf.tm_sec,
+ /* XXX newSVpvf()'s %lld type is broken,
+ * so cheat with a double */
+ (double)tmbuf.tm_year + 1900));
+ }
}
else { /* list context */
if ( err == NULL )
#define PERL_ARGS_ASSERT_SWASH_INIT \
assert(pkg); assert(name); assert(listsv)
+/* PERL_CALLCONV void sync_locale(void); */
PERL_CALLCONV void Perl_sys_init(int* argc, char*** argv)
__attribute__nonnull__(1)
__attribute__nonnull__(2);
*/
ssc_init(pRExC_state, data->start_class);
} else {
- /* AND before and after: combine and continue */
+ /* AND before and after: combine and continue. These
+ * assertions are zero-length, so can match an EMPTY
+ * string */
ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &intrnl);
+ ANYOF_FLAGS(data->start_class) |= ANYOF_EMPTY_STRING;
}
}
}
if (f & SCF_DO_STCLASS_AND) {
ssc_and(pRExC_state, data->start_class, (regnode_charclass *) &intrnl);
+ ANYOF_FLAGS(data->start_class) |= ANYOF_EMPTY_STRING;
}
if (data) {
if (data_fake.flags & (SF_HAS_PAR|SF_IN_PAR))
EBCDIC, but it works there, as the extra invariants
fold to themselves) */
*character = toFOLD((U8) code_point);
- if (downgradable
- && *character == code_point
- && ! HAS_NONLATIN1_FOLD_CLOSURE(code_point))
- {
+
+ /* We can downgrade to an EXACT node if this character
+ * isn't a folding one. Note that this assumes that
+ * nothing above Latin1 folds to some other invariant than
+ * one of these alphabetics; otherwise we would also have
+ * to check:
+ * && (! HAS_NONLATIN1_FOLD_CLOSURE(code_point)
+ * || ASCII_FOLD_RESTRICTED))
+ */
+ if (downgradable && PL_fold[code_point] == code_point) {
OP(node) = EXACT;
}
}
* at compile time. Besides not inverting folded locale now, we can't
* invert if there are things such as \w, which aren't known until runtime
* */
- if (invert
+ if (cp_list
+ && invert
&& ! (ANYOF_FLAGS(ret) & (ANYOF_LOCALE_FLAGS))
&& ! depends_list
&& ! HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
PERL_ARGS_ASSERT_PUT_LATIN1_CHARCLASS_INNARDS;
for (i = 0; i < 256; i++) {
- if (i < 256 && BITMAP_TEST((U8 *) bitmap,i)) {
+ if (BITMAP_TEST((U8 *) bitmap,i)) {
/* The character at index i should be output. Find the next
* character that should NOT be output */
int j;
- for (j = i + 1; j <= 256; j++) {
+ for (j = i + 1; j < 256; j++) {
if (! BITMAP_TEST((U8 *) bitmap, j)) {
break;
}
* has a mandatory return value, even though that value is just the same
* as the buf arg */
-#define V_Gconvert(x,n,t,b) \
-{ \
- char *rc = (char *)Gconvert(x,n,t,b); \
- PERL_UNUSED_VAR(rc); \
-}
-
-
#ifdef PERL_UTF8_CACHE_ASSERT
/* if adding more checks watch out for the following tests:
* t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
newlen++;
#endif
+#if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
+#define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
+#endif
+
if (newlen > SvLEN(sv)) { /* need more room? */
STRLEN minlen = SvCUR(sv);
minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
if (newlen < minlen)
newlen = minlen;
-#ifndef Perl_safesysmalloc_size
- if (SvLEN(sv))
+#ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
+ if (SvLEN(sv)) {
newlen = PERL_STRLEN_ROUNDUP(newlen);
+ }
#endif
if (SvLEN(sv) && s) {
s = (char*)saferealloc(s, newlen);
}
}
SvPV_set(sv, s);
-#ifdef Perl_safesysmalloc_size
+#ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
/* Do this here, do it once, do it right, and then we will never get
called back into sv_grow() unless there really is some growing
needed. */
/* some Xenix systems wipe out errno here */
#ifndef USE_LOCALE_NUMERIC
- V_Gconvert(SvNVX(sv), NV_DIG, 0, s);
+ PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
SvPOK_on(sv);
#else
{
DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
- V_Gconvert(SvNVX(sv), NV_DIG, 0, s);
+ PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
/* If the radix character is UTF-8, and actually is in the
* output, turn on the UTF-8 flag for the scalar */
and just use bytes. But some things that do fit into a byte are variants in
utf8, and the caller may not have been keeping track of these.)
-If the routine itself changes the string, it adds a trailing NUL. Such a NUL
-isn't guaranteed due to having other routines do the work in some input cases,
-or if the input is already flagged as being in utf8.
+If the routine itself changes the string, it adds a trailing C<NUL>. Such a
+C<NUL> isn't guaranteed due to having other routines do the work in some input
+cases, or if the input is already flagged as being in utf8.
The speed of this could perhaps be improved for many cases if someone wanted to
write a fast function that counts the number of variant characters in a string,
/*
=for apidoc sv_setpvn
-Copies a string into an SV. The C<len> parameter indicates the number of
+Copies a string (possibly containing embedded C<NUL> characters) into an SV.
+The C<len> parameter indicates the number of
bytes to be copied. If the C<ptr> argument is NULL the SV will become
undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
/*
=for apidoc sv_setpv
-Copies a string into an SV. The string must be null-terminated. Does not
-handle 'set' magic. See C<sv_setpv_mg>.
+Copies a string into an SV. The string must be terminated with a C<NUL>
+character.
+Does not handle 'set' magic. See C<sv_setpv_mg>.
=cut
*/
=for apidoc sv_usepvn_flags
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
+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 C<malloc>. It must be the start of a mallocked block
-of memory, and not a pointer to the middle of it. The
-string length, C<len>, must be supplied. By default
-this function will realloc (i.e. move) the memory pointed to by C<ptr>,
+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
+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
giving it to sv_usepvn, and neither should any pointers from "behind"
that pointer (e.g. ptr + 1) be used.
If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
-SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
+SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
will be skipped (i.e. the buffer is actually at least 1 byte longer than
C<len>, and already meets the requirements for storing in C<SvPVX>).
}
# endif
SvPV_set(sv, NULL);
+ SvCUR_set(sv, 0);
SvLEN_set(sv, 0);
if (flags & SV_COW_DROP_PV) {
/* OK, so we don't need to copy our buffer. */
/*
=for apidoc sv_catpv
-Concatenates the string onto the end of the string which is in the SV.
+Concatenates the C<NUL>-terminated string onto the end of the string which is
+in the SV.
If the SV has the UTF-8 status set, then the bytes appended should be
valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
/*
=for apidoc sv_catpv_flags
-Concatenates the string onto the end of the string which is in the SV.
+Concatenates the C<NUL>-terminated string onto the end of the string which is
+in the SV.
If the SV has the UTF-8 status set, then the bytes appended should
be valid UTF-8. If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
on the modified SV if appropriate.
Creates a new SV. A non-zero C<len> parameter indicates the number of
bytes of preallocated string space the SV should have. An extra byte for a
-trailing NUL is also reserved. (SvPOK is not set for the SV even if string
+trailing C<NUL> is also reserved. (SvPOK is not set for the SV even if string
space is allocated.) The reference count for the new SV is set to 1.
In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
PERL_ARGS_ASSERT_SV_MAGIC;
- if (how < 0 || (unsigned)how > C_ARRAY_LENGTH(PL_magic_data)
+ if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
|| ((flags = PL_magic_data[how]),
(vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
> magic_vtable_max))
/*
=for apidoc newSVpvn_flags
-Creates a new SV and copies a string into it. The reference count for the
+Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
+characters) into it. The reference count for the
SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
string. You are responsible for ensuring that the source string is at least
C<len> bytes long. If the C<s> argument is NULL the new SV will be undefined.
/*
=for apidoc newSVpv
-Creates a new SV and copies a string into it. The reference count for the
+Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
+characters) into it. The reference count for the
SV is set to 1. If C<len> is zero, Perl will compute the length using
-strlen(). For efficiency, consider using C<newSVpvn> instead.
+strlen(), (which means if you use this option, that C<s> can't have embedded
+C<NUL> characters and has to have a terminating C<NUL> byte).
+
+For efficiency, consider using C<newSVpvn> instead.
=cut
*/
/*
=for apidoc newSVpvn
-Creates a new SV and copies a buffer into it, which may contain NUL characters
+Creates a new SV and copies a string into it, which may contain C<NUL> characters
(C<\0>) and other binary data. The reference count for the SV is set to 1.
Note that if C<len> is zero, Perl will create a zero length (Perl) string. You
are responsible for ensuring that the source buffer is at least
/*
=for apidoc newSVpv_share
-Like C<newSVpvn_share>, but takes a nul-terminated string instead of a
+Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
string/length pair.
=cut
if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
/* 0, point, slack */
STORE_LC_NUMERIC_SET_TO_NEEDED();
- V_Gconvert(nv, (int)digits, 0, ebuf);
+ PERL_UNUSED_RESULT(Gconvert(nv, (int)digits, 0, ebuf));
sv_catpv_nomg(sv, ebuf);
if (*ebuf) /* May return an empty string for digits==0 */
return;
aka precis is 0 */
if ( c == 'g' && precis) {
STORE_LC_NUMERIC_SET_TO_NEEDED();
- V_Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
+ PERL_UNUSED_RESULT(Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf));
/* May return an empty string for digits==0 */
if (*PL_efloatbuf) {
elen = strlen(PL_efloatbuf);
DIR *ret;
#if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
- int rc = 0;
DIR *pwd;
const Direntry_t *dirent;
char smallbuf[256];
/* Now we should have two dir handles pointing to the same dir. */
/* Be nice to the calling code and chdir back to where we were. */
- rc = fchdir(my_dirfd(pwd));
/* XXX If this fails, then what? */
- PERL_UNUSED_VAR(rc);
+ PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
/* We have no need of the pwd handle any more. */
PerlDir_close(pwd);
new_arena->next = tbl->tbl_arena;
tbl->tbl_arena = new_arena;
tbl->tbl_arena_next = new_arena->array;
- tbl->tbl_arena_end = new_arena->array
- + sizeof(new_arena->array) / sizeof(new_arena->array[0]);
+ tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
}
tblent = tbl->tbl_arena_next++;
=for apidoc Am|char*|SvEND|SV* sv
Returns a pointer to the spot just after the last character in
the string which is in the SV, where there is usually a trailing
-null (even though Perl scalars do not strictly require it).
+C<NUL> character (even though Perl scalars do not strictly require it).
See C<SvCUR>. Access the character as *(SvEND(sv)).
Warning: If C<SvCUR> is equal to C<SvLEN>, then C<SvEND> points to
Set the value of the NV pointer in sv to val. See C<SvIV_set>.
=for apidoc Am|void|SvPV_set|SV* sv|char* val
-Set the value of the PV pointer in sv to val. See also C<SvIV_set>.
+Set the value of the PV pointer in C<sv> to the C<NUL>-terminated string
+C<val>. See also C<SvIV_set>.
Beware that the existing pointer may be involved in copy-on-write or other
mischief, so do C<SvOOK_off(sv)> and use C<sv_force_normal> or
=for apidoc Am|void|SvSetSV|SV* dsv|SV* ssv
Calls C<sv_setsv> if dsv is not the same as ssv. May evaluate arguments
-more than once.
+more than once. Does not handle 'set' magic on the destination SV.
=for apidoc Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
=for apidoc Am|char *|SvGROW|SV* sv|STRLEN len
Expands the character buffer in the SV so that it has room for the
indicated number of bytes (remember to reserve space for an extra trailing
-NUL character). Calls C<sv_grow> to perform the expansion if necessary.
+C<NUL> character). Calls C<sv_grow> to perform the expansion if necessary.
Returns a pointer to the character
buffer. SV must be of type >= SVt_PV. One
alternative is to call C<sv_grow> if you are not sure of the type of SV.
/*
=for apidoc Am|SV*|newSVpvn_utf8|NULLOK const char* s|STRLEN len|U32 utf8
-Creates a new SV and copies a string into it. If utf8 is true, calls
+Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
+characters) into it. If utf8 is true, calls
C<SvUTF8_on> on the new SV. Implemented as a wrapper around C<newSVpvn_flags>.
=cut
elsif ($^O eq 'VMS') {
$wd = `show default`;
}
-elsif ($ENV{PWD}) {
- $wd = $ENV{PWD};
-}
elsif ( $^O =~ /android/ || $^O eq 'nto' ) {
# On Android and Blackberry 10, pwd is a shell builtin, so plain `pwd`
# won't cut it
plan(tests => 53 + 27*14);
+if ($^O =~ /MSWin32|cygwin|msys/ && !is_miniperl) {
+ require Win32; # for IsAdminUser()
+}
+
# Tests presume we are in t/op directory and that file 'TEST' is found
# therein.
is(-d 'op', 1, "-d: directory correctly identified");
SKIP: {
my $restore_root;
- if ($> == 0) {
+ skip "Need Win32::IsAdminUser() on $^O", 1
+ if $^O =~ /MSWin32|cygwin|msys/ && is_miniperl();
+ my $Is_WinAdminUser = ($^O =~ /MSWin32|cygwin|msys/ and Win32::IsAdminUser()) ? 1 : 0;
+ # TODO: skip("On an ACL filesystem like $^O we cannot rely on -w via uid/gid");
+ # We have no filesystem check for ACL in core
+ if ($Is_WinAdminUser) {
+ skip("As Windows Administrator we cannot rely on -w via uid/gid");
+ }
+ elsif ($> == 0) {
# root can read and write anything, so switch uid (may not be
# implemented)
eval '$> = 1';
# argv[0] assignment and by calling prctl()
{
SKIP: {
- skip "We don't have prctl() here", 2 unless $Config{d_prctl_set_name};
+ skip "We don't have prctl() here, or we're on Android", 2 unless $Config{d_prctl_set_name} && $^O ne 'android';
# We don't really need these tests. prctl() is tested in the
# Kernel, but test it anyway for our sanity. If something doesn't
SKIP: {
skip("\$0 check only on Linux and FreeBSD", 2)
- unless $^O =~ /^(linux|freebsd)$/
+ unless $^O =~ /^(linux|android|freebsd)$/
&& open CMDLINE, "/proc/$$/cmdline";
chomp(my $line = scalar <CMDLINE>);
my $me = (split /\0/, $line)[0];
is $me, $0, 'altering $0 is effective (testing with /proc/)';
close CMDLINE;
+ skip("\$0 check with 'ps' only on Linux (but not Android) and FreeBSD", 1) if $^O eq 'android';
# perlbug #22811
my $mydollarzero = sub {
my($arg) = shift;
$Is_UFS = $Is_Darwin && (() = `df -t ufs . 2>/dev/null`) == 2;
-if ($Is_Cygwin) {
+if ($Is_Cygwin && !is_miniperl) {
require Win32;
Win32->import;
}
# Going to try to switch away from root. Might not work.
my $olduid = $>;
eval { $> = 1; };
+ skip "Can't test if an admin user in miniperl", 2,
+ if $Is_Cygwin && is_miniperl();
skip "Can't test -r or -w meaningfully if you're superuser", 2
if ($Is_Cygwin ? Win32::IsAdminUser : $> == 0);
my $s2 = -s _;
is($s1, $s2, q(-T _ doesn't break the statbuffer));
SKIP: {
+ my $root_uid = $Is_Cygwin ? 18 : 0;
skip "No lstat", 1 unless $Config{d_lstat};
- skip "uid=0", 1 unless $<&&$>;
- skip "Readable by group/other means readable by me", 1 if $^O eq 'VMS';
+ skip "uid=0", 1 if $< == $root_uid or $> == $root_uid;
+ skip "Can't check if admin user in miniperl", 1
+ if $^O =~ /^(cygwin|MSWin32|msys)$/ && is_miniperl();
+ skip "Readable by group/other means readable by me on $^O", 1 if $^O eq 'VMS'
+ or ($^O =~ /^(cygwin|MSWin32|msys)$/ and Win32::IsAdminUser());
lstat($tmpfile);
-T _;
ok(eval { lstat _ },
local $ENV{PATH} = $tmp;
is(eval { `$echo 1` }, undef);
- like($@, qr/^Insecure directory in \$ENV\{PATH}/);
+ # Message can be different depending on whether echo
+ # is a builtin or not
+ like($@, qr/^Insecure (?:directory in )?\$ENV\{PATH}/);
}
SKIP: {
require './test.pl';
}
-plan tests => 66;
+plan tests => 70;
# These tests make sure, among other things, that we don't end up
# burning tons of CPU for dates far in the future.
|| $small_time == $smallest
|| $big_time - 200 != $biggest
|| $big_time == $biggest) {
- skip "Can't represent test values", 4;
+ skip "Can't represent test values", 8;
}
my $small_time_f = sprintf("%.0f", $small_time);
my $big_time_f = sprintf("%.0f", $big_time);
$warning = '';
my $date = gmtime($big_time);
like $warning, qr/^gmtime\($big_time_f\) too large/;
+ like $warning, qr/^gmtime\($big_time_f\) failed/m;
$warning = '';
$date = localtime($big_time);
like $warning, qr/^localtime\($big_time_f\) too large/;
+ like $warning, qr/^localtime\($big_time_f\) failed/m;
$warning = '';
$date = gmtime($small_time);
like $warning, qr/^gmtime\($small_time_f\) too small/;
+ like $warning, qr/^gmtime\($small_time_f\) failed/m;
$warning = '';
$date = localtime($small_time);
like $warning, qr/^localtime\($small_time_f\) too small/;
-
+ like $warning, qr/^localtime\($small_time_f\) failed/m;
}
}
require './test.pl';
-plan(tests => 3*10 + 3*8 + 2*16 + 2);
+plan(tests => 3*10 + 3*8 + 2*16 + 3);
my $arg = $ENV{PATH}; # a tainted value
use constant UTF8 => "\x{1234}";
'ok', {switches => ["-T", "-l"]},
"therefore swash_init should be taint agnostic");
}
+
+{
+ # RT #122148: s///e on tainted utf8 strings got pos() messed up in 5.20
+
+ my @p;
+ my $s = "\x{100}\x{100}\x{100}\x{100}". $^X;
+ $s =~ s/\x{100}/push @p, pos($s); "xxxx";/eg;
+ is("@p", "0 1 2 3", "RT #122148");
+}
libnet cpan/libnet/Makefile.PL 13a8e4a8c7fb2607219c3106cad6c3d7173f7221
podlators cpan/podlators/scripts/pod2man.PL f81acf53f3ff46cdcc5ebdd661c5d13eb35d20d6
podlators cpan/podlators/scripts/pod2text.PL b4693fcfe4a0a1b38a215cfb8985a65d5d025d69
-version cpan/version/lib/version.pm fa9931d4db05aff9a0a6ef558610b1a472d9306e
-version vutil.c 238196173eb90dea388443213a4b968323474874
-version vxs.inc 9064aacbdfe42bb584a068f62b505dd11dbb4dc4
+version cpan/version/lib/version.pm d0923b895d57f1d669ae36fcf85c87b16db341d1
require './test.pl';
}
-plan tests => 721; # Update this when adding/deleting tests.
+plan tests => 722; # Update this when adding/deleting tests.
run_tests() unless caller;
+ { # Was getting optimized into EXACT (non-folding node)
+ my $x = qr/[x]/i;
+ utf8::upgrade($x);
+ like("X", qr/$x/, "UTF-8 of /[x]/i matches upper case");
+ }
+
} # End of sub run_tests
1;
is($word, 'раб', "Handles UTF8 trie correctly");
}
+ { # [perl #122460]
+ my $a = "rdvark";
+ $a =~ /(?{})(?=[A-Za-z0-9_])a*?/g;
+ is (pos $a, 0, "optimizer correctly thinks (?=...) is 0-length");
+ }
+
#
# Keep the following tests last -- they may crash perl
#
EOF
"", {}, "no locales where LC_NUMERIC breaks");
-{
+SKIP: {
+ skip("Windows stores locale defaults in the registry", 1 )
+ if $^O eq 'MSWin32';
local $ENV{LC_NUMERIC}; # So not taken as a default
local $ENV{LC_ALL}; # so it never overrides LC_NUMERIC
local $ENV{LANG}; # So not taken as a default
# define ALLOC_THREAD_KEY \
STMT_START { \
if (pthread_key_create(&PL_thr_key, 0)) { \
- int rc; \
- rc = write(2, STR_WITH_LEN("panic: pthread_key_create failed\n")); \
- PERL_UNUSED_VAR(rc); \
+ PERL_UNUSED_RESULT(write(2, STR_WITH_LEN("panic: pthread_key_create failed\n"))); \
exit(1); \
} \
} STMT_END
Direct pointer to the end of the chunk of text currently being lexed, the
end of the lexer buffer. This is equal to C<SvPVX(PL_parser-E<gt>linestr)
-+ SvCUR(PL_parser-E<gt>linestr)>. A NUL character (zero octet) is
++ SvCUR(PL_parser-E<gt>linestr)>. A C<NUL> character (zero octet) is
always located at the end of the buffer, and does not count as part of
the buffer's contents.
=for apidoc Amx|char *|lex_grow_linestr|STRLEN len
Reallocates the lexer buffer (L</PL_parser-E<gt>linestr>) to accommodate
-at least I<len> octets (including terminating NUL). Returns a
+at least I<len> octets (including terminating C<NUL>). Returns a
pointer to the reallocated buffer. This is necessary before making
any direct modification of the buffer that would increase its length.
L</lex_stuff_pvn> provides a more convenient way to insert text into
#endif
/* Generated from:
- * 986d2349e078df67f02d5b9747b7fe65abb0d2875fb52a836138919aafe08545 config_h.SH
+ * 7557e985de18f71e80f627226b454bc8eaf20477dcf0c45b5b2c51ec792f5c89 config_h.SH
* dbc8d38ba52ae23e5423418bb3f56b1b6fcdaa82cf71ba0be3463e8221bfe0c0 uconfig.sh
* ex: set ro: */
dVAR;
static const char file[] = __FILE__;
const struct xsub_details *xsub = details;
- const struct xsub_details *end
- = details + sizeof(details) / sizeof(details[0]);
+ const struct xsub_details *end = C_ARRAY_END(details);
do {
newXS_flags(xsub->name, xsub->xsub, file, xsub->proto, 0);
HV *const hv = MUTABLE_HV(SvRV(swash));
U32 klen;
U32 off;
- STRLEN slen;
+ STRLEN slen = 0;
STRLEN needents;
const U8 *tmps = NULL;
U32 bit;
Perl's version of C<strdup()>. Returns a pointer to a newly allocated
string which is a duplicate of C<pv>. The size of the string is
-determined by C<strlen()>. The memory allocated for the new string can
-be freed with the C<Safefree()> function.
+determined by C<strlen()>, which means it may not contain embedded C<NUL>
+characters and must have a trailing C<NUL>. The memory allocated for the new
+string can be freed with the C<Safefree()> function.
On some platforms, Windows for example, all allocated memory owned by a thread
is deallocated when that thread ends. So if you need that not to happen, you
Perl's version of what C<strndup()> would be if it existed. Returns a
pointer to a newly allocated string which is a duplicate of the first
C<len> bytes from C<pv>, plus a trailing
-NUL byte. The memory allocated for
+C<NUL> byte. The memory allocated for
the new string can be freed with the C<Safefree()> function.
On some platforms, Windows for example, all allocated memory owned by a thread
Perl_croak_no_mem(void)
{
dTHX;
- int rc;
-
/* Can't use PerlIO to write as it allocates memory */
- rc = PerlLIO_write(PerlIO_fileno(Perl_error_log),
- PL_no_mem, sizeof(PL_no_mem)-1);
- /* silently ignore failures */
- PERL_UNUSED_VAR(rc);
+ PERL_UNUSED_RESULT(PerlLIO_write(PerlIO_fileno(Perl_error_log),
+ PL_no_mem, sizeof(PL_no_mem)-1));
my_exit(1);
}
my_setenv_format(environ[i], nam, nlen, val, vlen);
} else {
# endif
-# if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__)
+ /* This next branch should only be called #if defined(HAS_SETENV), but
+ Configure doesn't test for that yet. For Solaris, setenv() and unsetenv()
+ were introduced in Solaris 9, so testing for HAS UNSETENV is sufficient.
+ */
+# if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV))
# if defined(HAS_UNSETENV)
if (val == NULL) {
(void)unsetenv(nam);
PERL_UNUSED_CONTEXT;
return (vtbl_id < 0 || vtbl_id >= magic_vtable_max)
- ? NULL : PL_magic_vtables + vtbl_id;
+ ? NULL : (MGVTBL*)PL_magic_vtables + vtbl_id;
}
I32
{
struct perl_vars *plvarsp = NULL;
# ifdef PERL_GLOBAL_STRUCT
- const IV nppaddr = sizeof(Gppaddr)/sizeof(Perl_ppaddr_t);
- const IV ncheck = sizeof(Gcheck) /sizeof(Perl_check_t);
+ const IV nppaddr = C_ARRAY_LENGTH(Gppaddr);
+ const IV ncheck = C_ARRAY_LENGTH(Gcheck);
# ifdef PERL_GLOBAL_STRUCT_PRIVATE
/* PerlMem_malloc() because can't use even safesysmalloc() this early. */
plvarsp = (struct perl_vars*)PerlMem_malloc(sizeof(struct perl_vars));
# else
retval = vsprintf(buffer, format, apc);
# endif
+ va_end(apc);
#else
# ifdef HAS_VSNPRINTF
retval = vsnprintf(buffer, len, format, ap);
=for apidoc my_strlcat
The C library C<strlcat> if available, or a Perl implementation of it.
-This operates on C NUL-terminated strings.
+This operates on C C<NUL>-terminated strings.
C<my_strlcat()> appends string C<src> to the end of C<dst>. It will append at
-most S<C<size - strlen(dst) - 1>> characters. It will then NUL-terminate,
+most S<C<size - strlen(dst) - 1>> characters. It will then C<NUL>-terminate,
unless C<size> is 0 or the original C<dst> string was longer than C<size> (in
practice this should not happen as it means that either C<size> is incorrect or
-that C<dst> is not a proper NUL-terminated string).
+that C<dst> is not a proper C<NUL>-terminated string).
Note that C<size> is the full size of the destination buffer and
-the result is guaranteed to be NUL-terminated if there is room. Note that room
-for the NUL should be included in C<size>.
+the result is guaranteed to be C<NUL>-terminated if there is room. Note that
+room for the C<NUL> should be included in C<size>.
=cut
=for apidoc my_strlcpy
The C library C<strlcpy> if available, or a Perl implementation of it.
-This operates on C NUL-terminated strings.
+This operates on C C<NUL>-terminated strings.
C<my_strlcpy()> copies up to S<C<size - 1>> characters from the string C<src>
-to C<dst>, NUL-terminating the result if C<size> is not 0.
+to C<dst>, C<NUL>-terminating the result if C<size> is not 0.
=cut
extra.pods : miniperl
@ @extra_pods.com
-PERLDELTA_CURRENT = [.pod]perl5200delta.pod
+PERLDELTA_CURRENT = [.pod]perl5201delta.pod
$(PERLDELTA_CURRENT) : [.pod]perldelta.pod
Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
# AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
av$(O) : av.c $(h)
$(CC) $(CORECFLAGS) $(MMS$SOURCE)
+caretx$(O) : caretx.c $(h)
+ $(CC) $(CORECFLAGS) $(MMS$SOURCE)
deb$(O) : deb.c $(h)
$(CC) $(CORECFLAGS) $(MMS$SOURCE)
doio$(O) : doio.c $(h)
*/
if (value > 0) {
status = simple_trnlnm(name, val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if (val_str[0] == 'D' || val_str[0] == '0' || val_str[0] == 'F')
return 0;
/* Allow an exception to bring Perl into the VMS debugger */
vms_debug_on_exception = 0;
status = simple_trnlnm("PERL_VMS_EXCEPTION_DEBUG", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T'))
vms_debug_on_exception = 1;
/* Debug unix/vms file translation routines */
vms_debug_fileify = 0;
status = simple_trnlnm("PERL_VMS_FILEIFY_DEBUG", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T'))
vms_debug_fileify = 1;
/* enable it so that the impact can be studied. */
vms_bug_stat_filename = 0;
status = simple_trnlnm("PERL_VMS_BUG_STAT_FILENAME", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T'))
vms_bug_stat_filename = 1;
/* Create VTF-7 filenames from Unicode instead of UTF-8 */
vms_vtf7_filenames = 0;
status = simple_trnlnm("PERL_VMS_VTF7_FILENAMES", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T'))
vms_vtf7_filenames = 1;
/* unlink all versions on unlink() or rename() */
vms_unlink_all_versions = 0;
- status = simple_trnlnm
- ("PERL_VMS_UNLINK_ALL_VERSIONS", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ status = simple_trnlnm("PERL_VMS_UNLINK_ALL_VERSIONS", val_str, sizeof(val_str));
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T'))
vms_unlink_all_versions = 1;
/* Detect running under GNV Bash or other UNIX like shell */
gnv_unix_shell = 0;
status = simple_trnlnm("GNV$UNIX_SHELL", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
gnv_unix_shell = 1;
set_feature_default("DECC$FILENAME_UNIX_NO_VERSION", 1);
set_feature_default("DECC$FILENAME_UNIX_REPORT", 1);
/* PCP mode requires creating /dev/null special device file */
decc_bug_devnull = 0;
status = simple_trnlnm("DECC_BUG_DEVNULL", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T'))
decc_bug_devnull = 1;
#else
status = simple_trnlnm
("DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T')) {
decc_disable_to_vms_logname_translation = 1;
#ifndef __VAX
status = simple_trnlnm("DECC$EFS_CASE_PRESERVE", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T')) {
decc_efs_case_preserve = 1;
#endif
status = simple_trnlnm("DECC$FILENAME_UNIX_REPORT", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T')) {
decc_filename_unix_report = 1;
}
}
status = simple_trnlnm("DECC$FILENAME_UNIX_ONLY", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T')) {
decc_filename_unix_only = 1;
}
}
status = simple_trnlnm("DECC$FILENAME_UNIX_NO_VERSION", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T')) {
decc_filename_unix_no_version = 1;
}
}
status = simple_trnlnm("DECC$READDIR_DROPDOTNOTYPE", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T')) {
decc_readdir_dropdotnotype = 1;
/* USE POSIX/DCL Exit codes - Recommended, but needs to default to */
/* for strict backward compatibility */
- status = simple_trnlnm
- ("PERL_VMS_POSIX_EXIT", val_str, sizeof(val_str));
- if ($VMS_STATUS_SUCCESS(status)) {
+ status = simple_trnlnm("PERL_VMS_POSIX_EXIT", val_str, sizeof(val_str));
+ if (status) {
val_str[0] = _toupper(val_str[0]);
if ((val_str[0] == 'E') || (val_str[0] == '1') || (val_str[0] == 'T'))
vms_posix_exit = 1;
char tbuf[64];
SV *sv = SvNVX(ver) > 10e50 ? newSV(64) : 0;
char *buf;
+#ifdef USE_LOCALE_NUMERIC
+ const char * const cur_numeric = setlocale(LC_NUMERIC, NULL);
+ assert(cur_numeric);
+
+ /* XS code can set the locale without us knowing. To protect the
+ * version number parsing, which requires the radix character to be a
+ * dot, update our records as to what the locale is, so that our
+ * existing macro mechanism can correctly change it to a dot and back
+ * if necessary. This code is extremely unlikely to be in a loop, so
+ * the extra work will have a negligible performance impact. See [perl
+ * #121930].
+ *
+ * If the current locale is a standard one, but we are expecting it to
+ * be a different, underlying locale, update our records to make the
+ * underlying locale this (standard) one. If the current locale is not
+ * a standard one, we should be expecting a non-standard one, the same
+ * one that we have recorded as the underlying locale. If not, update
+ * our records. */
+ if (strEQ(cur_numeric, "C") || strEQ(cur_numeric, "POSIX")) {
+ if (! PL_numeric_standard) {
+ new_numeric(cur_numeric);
+ }
+ }
+ else if (PL_numeric_standard
+ || ! PL_numeric_name
+ || strNE(PL_numeric_name, cur_numeric))
+ {
+ new_numeric(cur_numeric);
+ }
+#endif
+ { /* Braces needed because macro just below declares a variable */
STORE_NUMERIC_LOCAL_SET_STANDARD();
if (sv) {
Perl_sv_catpvf(aTHX_ sv, "%.9"NVff, SvNVX(ver));
buf = tbuf;
}
RESTORE_NUMERIC_LOCAL();
+ }
while (buf[len-1] == '0' && len > 0) len--;
if ( buf[len-1] == '.' ) len--; /* eat the trailing decimal */
version = savepvn(buf, len);
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER = \5.20.0
+#INST_VER = \5.20.1
#
# Comment this out if you DON'T want your perl installation to have
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5200delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5201delta.pod
cd ..\win32
$(PERLEXE) $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
-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 \
- perl5200delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl5201delta.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 \
}
elsif ($opt{cc} =~ /\bgcc\b/) {
$int64 = 'long long';
- $int64f = 'll';
+ $int64f = 'I64';
}
# set large files options
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER *= \5.20.0
+#INST_VER *= \5.20.1
#
# Comment this out if you DON'T want your perl installation to have
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5200delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5201delta.pod
$(PERLEXE) $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
-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 \
- perl5200delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl5201delta.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 \
perl5181delta.pod \
perl5182delta.pod \
perl5200delta.pod \
+ perl5201delta.pod \
perl561delta.pod \
perl56delta.pod \
perl581delta.pod \
perl5181delta.man \
perl5182delta.man \
perl5200delta.man \
+ perl5201delta.man \
perl561delta.man \
perl56delta.man \
perl581delta.man \
perl5181delta.html \
perl5182delta.html \
perl5200delta.html \
+ perl5201delta.html \
perl561delta.html \
perl56delta.html \
perl581delta.html \
perl5181delta.tex \
perl5182delta.tex \
perl5200delta.tex \
+ perl5201delta.tex \
perl561delta.tex \
perl56delta.tex \
perl581delta.tex \