ansi2knr=''
aphostname='/bin/hostname'
api_revision='5'
-api_subversion='11'
+api_subversion='12'
api_version='25'
-api_versionstring='5.25.11'
+api_versionstring='5.25.12'
ar='ar'
-archlib='/usr/lib/perl5/5.25.11/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.25.11/armv4l-linux'
+archlib='/usr/lib/perl5/5.25.12/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.25.12/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
cat='cat'
cc='cc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.25.11/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.25.12/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.25.11/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.25.12/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.25.11'
+installprivlib='./install_me_here/usr/lib/perl5/5.25.12'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.25.11/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.25.12/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.25.11'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.25.12'
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.25.11'
-privlibexp='/usr/lib/perl5/5.25.11'
+privlib='/usr/lib/perl5/5.25.12'
+privlibexp='/usr/lib/perl5/5.25.12'
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.25.11/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.25.11/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.25.12/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.25.12/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.25.11'
+sitelib='/usr/lib/perl5/site_perl/5.25.12'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.25.11'
+sitelibexp='/usr/lib/perl5/site_perl/5.25.12'
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='11'
+subversion='12'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.25.11'
-version_patchlevel_string='version 25 subversion 11'
+version='5.25.12'
+version_patchlevel_string='version 25 subversion 12'
versiononly='undef'
vi=''
xlibpth='/usr/lib/386 /lib/386'
config_argc=0
PERL_REVISION=5
PERL_VERSION=25
-PERL_SUBVERSION=11
+PERL_SUBVERSION=12
PERL_API_REVISION=5
PERL_API_VERSION=25
-PERL_API_SUBVERSION=11
+PERL_API_SUBVERSION=12
PERL_PATCHLEVEL=
PERL_CONFIG_SH=true
ansi2knr=''
aphostname='/bin/hostname'
api_revision='5'
-api_subversion='11'
+api_subversion='12'
api_version='25'
-api_versionstring='5.25.11'
+api_versionstring='5.25.12'
ar='ar'
-archlib='/usr/lib/perl5/5.25.11/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.25.11/armv4l-linux'
+archlib='/usr/lib/perl5/5.25.12/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.25.12/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.25.11/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.25.12/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.25.11/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.25.12/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.25.11'
+installprivlib='./install_me_here/usr/lib/perl5/5.25.12'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.25.11/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.25.12/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.25.11'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.25.12'
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.25.11'
-privlibexp='/usr/lib/perl5/5.25.11'
+privlib='/usr/lib/perl5/5.25.12'
+privlibexp='/usr/lib/perl5/5.25.12'
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.25.11/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.25.11/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.25.12/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.25.12/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.25.11'
+sitelib='/usr/lib/perl5/site_perl/5.25.12'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.25.11'
+sitelibexp='/usr/lib/perl5/site_perl/5.25.12'
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='11'
+subversion='12'
sysman='/usr/share/man/man1'
tail=''
tar=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.25.11'
-version_patchlevel_string='version 25 subversion 11'
+version='5.25.12'
+version_patchlevel_string='version 25 subversion 12'
versiononly='undef'
vi=''
xlibpth='/usr/lib/386 /lib/386'
config_argc=0
PERL_REVISION=5
PERL_VERSION=25
-PERL_SUBVERSION=11
+PERL_SUBVERSION=12
PERL_API_REVISION=5
PERL_API_VERSION=25
-PERL_API_SUBVERSION=11
+PERL_API_SUBVERSION=12
PERL_PATCHLEVEL=
PERL_CONFIG_SH=true
You can override various aspects of this feature by defining various
symbols during configure. An example might be:
- Configure -Accflags=-DPERL_HASH_FUNC_SIPHASH
+ sh Configure -Accflags=-DPERL_HASH_FUNC_SIPHASH
B<Unless stated otherwise these options are considered experimental or
insecure and are not recommended for production use.>
=item Directories for the perl distribution
-By default, Configure will use the following directories for 5.25.11.
+By default, Configure will use the following directories for 5.25.12.
$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
For example, if you have a bundle of perl libraries from a previous
installation, perhaps in a strange place:
- Configure -Dotherlibdirs=/usr/lib/perl5/site_perl/5.8.1
+ sh Configure -Dotherlibdirs=/usr/lib/perl5/site_perl/5.8.1
=item APPLLIB_EXP
directories ahead of those in APPLLIB_EXP by using any of the standard
run-time methods: $PERLLIB, $PERL5LIB, -I, use lib, etc.
+=item default_inc_excludes_dot
+
+Since version 5.25.12, default perl builds no longer includes C<'.'> as the
+last element of @INC. The old behaviour can restored using
+
+ sh Configure -Udefault_inc_excludes_dot
+
+Note that this is likely to make programs run under such a perl
+interpreter less secure.
+
=item usesitecustomize
Run-time customization of @INC can be enabled with:
1. Disable the use of ODBM_FILE
- Configure ... -Dnoextensions=ODBM_File
+ sh Configure ... -Dnoextensions=ODBM_File
2. Fix the header file, somewhat like this:
=head1 Coexistence with earlier versions of perl 5
-Perl 5.25.11 is not binary compatible with earlier versions of Perl.
+Perl 5.25.12 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
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.25.11
+ sh Configure -Dprefix=/opt/perl5.25.12
-and adding /opt/perl5.25.11/bin to the shell PATH variable. Such users
+and adding /opt/perl5.25.12/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.25.9 or earlier
-B<Perl 5.25.11 may not be binary compatible with Perl 5.25.9 or
+B<Perl 5.25.12 may not be binary compatible with Perl 5.25.9 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.25.11. If you find you do need to rebuild an extension with
-5.25.11, you may safely do so without disturbing the older
+used with 5.25.12. If you find you do need to rebuild an extension with
+5.25.12, 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.25.11 is as follows (under $Config{prefix}):
+in Linux with perl-5.25.12 is as follows (under $Config{prefix}):
./bin/perl
- ./lib/perl5/5.25.11/strict.pm
- ./lib/perl5/5.25.11/warnings.pm
- ./lib/perl5/5.25.11/i686-linux/File/Glob.pm
- ./lib/perl5/5.25.11/feature.pm
- ./lib/perl5/5.25.11/XSLoader.pm
- ./lib/perl5/5.25.11/i686-linux/auto/File/Glob/Glob.so
+ ./lib/perl5/5.25.12/strict.pm
+ ./lib/perl5/5.25.12/warnings.pm
+ ./lib/perl5/5.25.12/i686-linux/File/Glob.pm
+ ./lib/perl5/5.25.12/feature.pm
+ ./lib/perl5/5.25.12/XSLoader.pm
+ ./lib/perl5/5.25.12/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
dist/base/t/fields-5_6_0.t See if fields work
dist/base/t/fields-5_8_0.t See if fields work
dist/base/t/fields-base.t See if fields work
-dist/base/t/incdot.t Test how base.pm handles '.' in @INC
dist/base/t/isa.t See if base's behaviour doesn't change
dist/base/t/lib/Broken.pm Test module for base.pm
dist/base/t/lib/Dummy.pm Test module for base.pm
ext/Win32CORE/Win32CORE.pm Win32CORE extension (stubs for Win32 CORE subs)
ext/XS-APItest/APItest.pm XS::APItest extension
ext/XS-APItest/APItest.xs XS::APItest extension
+ext/XS-APItest/APItest_BS autogenerate APItest.bs
ext/XS-APItest/core.c Test API functions when PERL_CORE is defined
ext/XS-APItest/core_or_not.inc Code common to core.c and notcore.c
ext/XS-APItest/exception.c XS::APItest extension
ext/XS-APItest/t/blockasexpr.t test recursive descent block parsing
ext/XS-APItest/t/blockhooks.t XS::APItest: tests for PL_blockhooks
ext/XS-APItest/t/blockhooks-csc.t XS::APItest: more tests for PL_blockhooks
+ext/XS-APItest/t/bootstrap.t XS::APItest: test APItest.bs
ext/XS-APItest/t/call.t Test calling perl from C
ext/XS-APItest/t/call_checker.t test call checker plugin API
ext/XS-APItest/t/caller.t XS::APItest: tests for caller_cx
pod/perl5241delta.pod Perl changes in version 5.24.1
pod/perl5250delta.pod Perl changes in version 5.25.0
pod/perl52510delta.pod Perl changes in version 5.25.10
+pod/perl52511delta.pod Perl changes in version 5.25.11
pod/perl5251delta.pod Perl changes in version 5.25.1
pod/perl5252delta.pod Perl changes in version 5.25.2
pod/perl5253delta.pod Perl changes in version 5.25.3
"url" : "http://perl5.git.perl.org/"
}
},
- "version" : "5.025011",
+ "version" : "5.025012",
"x_serialization_backend" : "JSON::PP version 2.27400_02"
}
homepage: http://www.perl.org/
license: http://dev.perl.org/licenses/
repository: http://perl5.git.perl.org/
-version: '5.025011'
+version: '5.025012'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
$spitshell >>$Makefile <<'!NO!SUBS!'
-perltoc_pod_prereqs = extra.pods pod/perl52511delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
+perltoc_pod_prereqs = extra.pods pod/perl52512delta.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
pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
$(MINIPERL) pod/perlmodlib.PL -q
-pod/perl52511delta.pod: pod/perldelta.pod
- $(RMS) pod/perl52511delta.pod
- $(LNS) perldelta.pod pod/perl52511delta.pod
+pod/perl52512delta.pod: pod/perldelta.pod
+ $(RMS) pod/perl52512delta.pod
+ $(LNS) perldelta.pod pod/perl52512delta.pod
extra.pods: $(MINIPERL_EXE)
-@test ! -f extra.pods || rm -f `cat extra.pods`
# Here comes the CW tools - TO BE FILLED TO BUILD WITH CW -
-MODULE_DESC = "Perl 5.25.11 for NetWare"
+MODULE_DESC = "Perl 5.25.12 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.25.11
+INST_VER = \5.25.12
#
# 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.25.11\\lib\\NetWare-x86-multi-thread" /**/
+#define ARCHLIB "c:\\perl\\5.25.12\\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.25.11\\bin\\NetWare-x86-multi-thread" /**/
-#define BIN_EXP "c:\\perl\\5.25.11\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN "c:\\perl\\5.25.12\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN_EXP "c:\\perl\\5.25.12\\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.25.11\\lib\\NetWare-x86-multi-thread" /**/
+#define SITEARCH "c:\\perl\\site\\5.25.12\\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.25.11\\lib" /**/
+#define SITELIB "c:\\perl\\site\\5.25.12\\lib" /**/
/*#define SITELIB_EXP "" /**/
#define SITELIB_STEM "" /**/
'base' => {
'DISTRIBUTION' => 'RJBS/base-2.23.tar.gz',
'FILES' => q[dist/base],
- 'CUSTOMIZED' => [
- # https://rt.perl.org/Ticket/Display.html?id=127834
- qw( lib/base.pm )
- ],
},
'bignum' => {
},
'CPAN' => {
- 'DISTRIBUTION' => 'ANDK/CPAN-2.17-TRIAL2.tar.gz',
+ 'DISTRIBUTION' => 'ANDK/CPAN-2.18-TRIAL.tar.gz',
'FILES' => q[cpan/CPAN],
'EXCLUDED' => [
qr{^distroprefs/},
},
'Module::CoreList' => {
- 'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20170220.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20170320.tar.gz',
'FILES' => q[dist/Module-CoreList],
},
sub read_tests_file {
my ($file) = @_;
- my $ta = do $file;
+ my $ta;
+ {
+ local @INC = ('.');
+ $ta = do $file;
+ }
unless ($ta) {
die "Error: can't parse '$file': $@\n" if $@;
die "Error: can't read '$file': $!\n";
},
);
- for ('t', '.') {
- last if require "$_/test.pl";
+ for ('./t', '.') {
+ my $t = "$_/test.pl";
+ next unless -f $t;
+ require $t;
}
plan(@tests / 3 * keys %VALID_FIELDS);
ansi2knr=''
aphostname='/bin/hostname'
api_revision='5'
-api_subversion='11'
+api_subversion='12'
api_version='25'
-api_versionstring='5.25.11'
+api_versionstring='5.25.12'
ar='ar'
-archlib='/tmp/mblead/lib/perl5/5.25.11/darwin-2level'
-archlibexp='/tmp/mblead/lib/perl5/5.25.11/darwin-2level'
+archlib='/tmp/mblead/lib/perl5/5.25.12/darwin-2level'
+archlibexp='/tmp/mblead/lib/perl5/5.25.12/darwin-2level'
archname64=''
archname='darwin-2level'
archobjs=''
incpth='/usr/local/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include /usr/include /usr/local/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include /usr/include /usr/local/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include /usr/include'
inews=''
initialinstalllocation='/tmp/mblead/bin'
-installarchlib='/tmp/mblead/lib/perl5/5.25.11/darwin-2level'
+installarchlib='/tmp/mblead/lib/perl5/5.25.12/darwin-2level'
installbin='/tmp/mblead/bin'
installhtml1dir=''
installhtml3dir=''
installman3dir='/tmp/mblead/man/man3'
installprefix='/tmp/mblead'
installprefixexp='/tmp/mblead'
-installprivlib='/tmp/mblead/lib/perl5/5.25.11'
+installprivlib='/tmp/mblead/lib/perl5/5.25.12'
installscript='/tmp/mblead/bin'
-installsitearch='/tmp/mblead/lib/perl5/site_perl/5.25.11/darwin-2level'
+installsitearch='/tmp/mblead/lib/perl5/site_perl/5.25.12/darwin-2level'
installsitebin='/tmp/mblead/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='/tmp/mblead/lib/perl5/site_perl/5.25.11'
+installsitelib='/tmp/mblead/lib/perl5/site_perl/5.25.12'
installsiteman1dir='/tmp/mblead/man/man1'
installsiteman3dir='/tmp/mblead/man/man3'
installsitescript='/tmp/mblead/bin'
perl_static_inline='static __inline__'
perladmin='aaron@daybreak.nonet'
perllibs='-lpthread -ldl -lm -lutil -lc'
-perlpath='/tmp/mblead/bin/perl5.25.11'
+perlpath='/tmp/mblead/bin/perl5.25.12'
pg='pg'
phostname='hostname'
pidtype='pid_t'
pr=''
prefix='/tmp/mblead'
prefixexp='/tmp/mblead'
-privlib='/tmp/mblead/lib/perl5/5.25.11'
-privlibexp='/tmp/mblead/lib/perl5/5.25.11'
+privlib='/tmp/mblead/lib/perl5/5.25.12'
+privlibexp='/tmp/mblead/lib/perl5/5.25.12'
procselfexe=''
prototype='define'
ptrsize='8'
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, 6, 0'
sig_size='33'
signal_t='void'
-sitearch='/tmp/mblead/lib/perl5/site_perl/5.25.11/darwin-2level'
-sitearchexp='/tmp/mblead/lib/perl5/site_perl/5.25.11/darwin-2level'
+sitearch='/tmp/mblead/lib/perl5/site_perl/5.25.12/darwin-2level'
+sitearchexp='/tmp/mblead/lib/perl5/site_perl/5.25.12/darwin-2level'
sitebin='/tmp/mblead/bin'
sitebinexp='/tmp/mblead/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/tmp/mblead/lib/perl5/site_perl/5.25.11'
+sitelib='/tmp/mblead/lib/perl5/site_perl/5.25.12'
sitelib_stem='/tmp/mblead/lib/perl5/site_perl'
-sitelibexp='/tmp/mblead/lib/perl5/site_perl/5.25.11'
+sitelibexp='/tmp/mblead/lib/perl5/site_perl/5.25.12'
siteman1dir='/tmp/mblead/man/man1'
siteman1direxp='/tmp/mblead/man/man1'
siteman3dir='/tmp/mblead/man/man3'
ssizetype='ssize_t'
st_ino_sign='1'
st_ino_size='8'
-startperl='#!/tmp/mblead/bin/perl5.25.11'
+startperl='#!/tmp/mblead/bin/perl5.25.12'
startsh='#!/bin/sh'
static_ext=' '
stdchar='char'
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='11'
+subversion='12'
sysman='/usr/share/man/man1'
sysroot=''
tail=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.25.11'
-version_patchlevel_string='version 25 subversion 11'
+version='5.25.12'
+version_patchlevel_string='version 25 subversion 12'
versiononly='define'
vi=''
xlibpth='/usr/lib/386 /lib/386'
zip='zip'
PERL_REVISION=5
PERL_VERSION=25
-PERL_SUBVERSION=11
+PERL_SUBVERSION=12
PERL_API_REVISION=5
PERL_API_VERSION=25
-PERL_API_SUBVERSION=11
+PERL_API_SUBVERSION=12
PERL_PATCHLEVEL=''
PERL_CONFIG_SH=true
* 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.25.11/i686-linux-64int-ld" /**/
-#define ARCHLIB_EXP "/pro/lib/perl5/5.25.11/i686-linux-64int-ld" /**/
+#define ARCHLIB "/pro/lib/perl5/5.25.12/i686-linux-64int-ld" /**/
+#define ARCHLIB_EXP "/pro/lib/perl5/5.25.12/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.25.11" /**/
-#define PRIVLIB_EXP "/pro/lib/perl5/5.25.11" /**/
+#define PRIVLIB "/pro/lib/perl5/5.25.12" /**/
+#define PRIVLIB_EXP "/pro/lib/perl5/5.25.12" /**/
/* 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.25.11/i686-linux-64int-ld" /**/
-#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.25.11/i686-linux-64int-ld" /**/
+#define SITEARCH "/pro/lib/perl5/site_perl/5.25.12/i686-linux-64int-ld" /**/
+#define SITEARCH_EXP "/pro/lib/perl5/site_perl/5.25.12/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.25.11" /**/
-#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.25.11" /**/
+#define SITELIB "/pro/lib/perl5/site_perl/5.25.12" /**/
+#define SITELIB_EXP "/pro/lib/perl5/site_perl/5.25.12" /**/
#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.25.11" /**/
+#define STARTPERL "#!/pro/bin/perl5.25.12" /**/
/* HAS_STDIO_STREAM_ARRAY:
* This symbol, if defined, tells that there is an array
=head1 EPIGRAPHS
+=head2 v5.25.11 - Daniel Kahneman, Thinking, Fast and Slow
+
+L<Announced on 2017-03-20 by Sawyer X|http://www.nntp.perl.org/group/perl.perl5.porters/2017/03/msg243624.html>
+
+ Subjective confidence in a judgment is not a reasoned evaluation of
+ the probability that this judgment is correct. Confidence is a
+ feeling, which reflects the coherence of the information and the
+ cognitive ease of processing it. It is wise to take admissions of
+ uncertainty seriously, but declarations of high confidence mainly
+ tell you that an individual has constructed a coherent story in his
+ mind, not necessarily that the story is true.
+
=head2 v5.25.10 - Erich Fried, 1968
L<Announced on 2017-02-20 by Renee Bäcker|https://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg243173.html>
#
# harness-timer-report.pl
#
-# - read in the HARNESS_TIMER=1 output of "make test"
+# - read in the time-annotated outputs of
+# "env HARNESS_TIMER=1 make test" or
+# "make test_harness"
# - convert the milliseconds to seconds
# - compute a couple of derived values
# - cpu: the sum of 'self' and 'kids'
=item ActiveState
-C<http://bugs.activestate.com/show_bug.cgi?id=72443>
+C<L<http://bugs.activestate.com/show_bug.cgi?id=72443>>
=item Debian
# Get command line options
use Getopt::Long;
-require "Porting/manifest_lib.pl";
+require "./Porting/manifest_lib.pl";
my $outfile;
my $check_only = 0;
my $quiet = 0;
The Comprehensive Perl Archive Network (or CPAN) is the place to go.
There are many mirrors, but the easiest thing to use is probably
-http://www.cpan.org/README.html , which automatically points you to a
+L<http://www.cpan.org/README.html> , which automatically points you to a
mirror site "close" to you.
=head2 Perl5-porters mailing list
If you want your patch to appear in the F<src/5.0/unsupported>
directory on CPAN, send e-mail to the CPAN master librarian. (Check
-out http://www.cpan.org/CPAN.html ).
+out L<http://www.cpan.org/CPAN.html> ).
=head1 Help Save the World
If you use Dropbox, you can append "raw=1" as a parameter to their usual
sharing link to allow direct download (albeit with redirects).
-=head3 git clone of https://github.com/perlorg/perlweb
+=head3 git clone of L<https://github.com/perlorg/perlweb>
For updating the L<http://dev.perl.org> web pages, either a Github account or
sweet-talking somebody with a Github account into obedience is needed. This
=head3 monitor CPAN testers for failures
For any release except a BLEAD-POINT: Examine the relevant analysis report(s)
-at http://analysis.cpantesters.org/beforemaintrelease to see how the impending
-release is performing compared to previous releases with regard to building
-and testing CPAN modules.
+at L<http://analysis.cpantesters.org/beforemaintrelease> to see how the
+impending release is performing compared to previous releases with
+regard to building and testing CPAN modules.
That page accepts a query parameter, C<pair> that takes a pair of
colon-delimited versions to use for comparison. For example:
-http://analysis.cpantesters.org/beforemaintrelease?pair=5.20.2:5.22.0%20RC1
+L<http://analysis.cpantesters.org/beforemaintrelease?pair=5.20.2:5.22.0%20RC1>
=head3 update perldelta
on HTTP::Tiny to fetch package metadata remotely.
(If you'd prefer to have a full CPAN mirror, see
-http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN)
+L<http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN>)
Then change to your perl checkout, and if necessary,
$ ./perl -Ilib ext/Pod-Html/bin/pod2html pod/perldelta.pod > \
/tmp/perldelta.html
-Another good HTML preview option is http://search.cpan.org/pod2html
+Another good HTML preview option is L<http://search.cpan.org/pod2html>
If you make changes, be sure to commit them.
Check that basic configuration and tests work on each test machine:
- $ ./Configure -des && make all test
+ $ ./Configure -des && make all minitest test
# Or for a development release:
- $ ./Configure -Dusedevel -des && make all test
+ $ ./Configure -Dusedevel -des && make all minitest test
=head4 Run the test harness and install
=head1 SOURCE
Based on
-http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-05/msg00608.html,
+L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-05/msg00608.html>,
plus a whole bunch of other sources, including private correspondence.
=cut
functioning programs freeze
2017-02-20 5.25.10 Full code freeze
2017-03-20 5.25.11 Full code freeze
- 2017-04-20 5.26.0 Stable release!
+ 2017-04-20 5.25.12 Full code freeze
+ 2017-05-20 5.26.0 Stable release!
=head2 Perl 5.24
2016-12-20 5.25.8 ✓ Sawyer X
2017-01-20 5.25.9 ✓ Abigail
2017-02-20 5.25.10 ✓ Renée Bäcker
- 2017-03-20 5.25.11 Sawyer X
+ 2017-03-20 5.25.11 ✓ Sawyer X
+ 2017-04-20 5.25.12 Sawyer X
(RC0 for 5.26.0 will be released once we think that all the blockers have been
addressed. This typically means some time in April or May.)
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.25.11.
+options would be nice for perl 5.25.12.
=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.25.11"
+of 5.25.12"
=head2 make ithreads more robust
Follow the messages ... and you're done.
If you like a more web-like approach, a good start point can be
-http://www14.software.ibm.com/webapp/download/downloadaz.jsp and click
+L<http://www14.software.ibm.com/webapp/download/downloadaz.jsp> and click
"C for AIX", and follow the instructions.
=head2 The usenm option
in preference to non-re-entrant versions. There is a bug in FreeBSD's
C<readdir_r> function in versions 4.5 and earlier that can cause a SEGV when
reading large directories. A patch for FreeBSD libc is available
-(see http://www.freebsd.org/cgi/query-pr.cgi?pr=misc/30631 )
+(see L<http://www.freebsd.org/cgi/query-pr.cgi?pr=misc/30631> )
which has been integrated into FreeBSD 4.6.
=head2 C<$^X> doesn't always contain a full path in FreeBSD
Make perl executable and create a symlink for libperl:
chmod a+x /boot/common/bin/perl
- cd /boot/common/lib; ln -s perl5/5.25.11/BePC-haiku/CORE/libperl.so .
+ cd /boot/common/lib; ln -s perl5/5.25.12/BePC-haiku/CORE/libperl.so .
-Replace C<5.25.11> with your respective version of Perl.
+Replace C<5.25.12> with your respective version of Perl.
=head1 KNOWN PROBLEMS
=head1 DESCRIPTION
If you want to use Perl on the Hurd, I recommend using the Debian
-GNU/Hurd distribution ( see http://www.debian.org/ ), even if an
+GNU/Hurd distribution ( see L<http://www.debian.org/> ), even if an
official, stable release has not yet been made. The old "gnu-0.2"
binary distribution will most certainly have additional problems.
=head2 About (jcode.pl|Jcode.pm|JPerl)
-5.8以前の、スクリプトがEUC-JPであればリテラルだけは扱うことができました。また、入出力を扱うモジュールとしてはJcode.pmが( http://openlab.ring.gr.jp/Jcode/ )、perl4用のユーティリティとしてはjcode.plがそれぞれ存在し、日本語の扱えるCGIでよく利用されていることを御存じの方も少なくないかと思われます。ただし、日本語による正規表現をうまく扱うことは不可能でした。
+5.8以前の、スクリプトがEUC-JPであればリテラルだけは扱うことができました。また、入出力を扱うモジュールとしてはJcode.pmが( L<http://openlab.ring.gr.jp/Jcode/> )、perl4用のユーティリティとしてはjcode.plがそれぞれ存在し、日本語の扱えるCGIでよく利用されていることを御存じの方も少なくないかと思われます。ただし、日本語による正規表現をうまく扱うことは不可能でした。
-5.005以前のPerlには、日本語に特化したローカライズ版、Jperlが存在しました( http://homepage2.nifty.com/kipp/perl/jperl/index.html )。また、Mac OS 9.x/Classic用のPerl、MacPerlの日本語版もMacJPerlとして存在してました。( http://habilis.net/macjperl/ ).これらでは文字コードとしてEUC-JPに加えShift_JISもそのまま扱うことができ、また日本語による正規表現を扱うことも可能でした。
+5.005以前のPerlには、日本語に特化したローカライズ版、Jperlが存在しました( L<http://homepage2.nifty.com/kipp/perl/jperl/index.html> )。また、Mac OS 9.x/Classic用のPerl、MacPerlの日本語版もMacJPerlとして存在してました。( L<http://habilis.net/macjperl/> ).これらでは文字コードとしてEUC-JPに加えShift_JISもそのまま扱うことができ、また日本語による正規表現を扱うことも可能でした。
Perl5.8では、これらの機能がすべてPerl本体だけで実現できる上に、日本語のみならず上記114の文字コードをすべて、しかも同時に扱うことができます。さらに、CPANなどから新しい文字コード用のモジュールを入手することも簡単にできるようになっています。
This document briefly describes Perl under Mac OS X.
- curl -O http://www.cpan.org/src/perl-5.25.11.tar.gz
- tar -xzf perl-5.25.11.tar.gz
- cd perl-5.25.11
+ curl -O http://www.cpan.org/src/perl-5.25.12.tar.gz
+ tar -xzf perl-5.25.12.tar.gz
+ cd perl-5.25.12
./Configure -des -Dprefix=/usr/local/
make
make test
=head1 DESCRIPTION
-The latest Perl release (5.25.11 as of this writing) builds without changes
+The latest Perl release (5.25.12 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.25.11/
+ unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.25.12/
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
The z/OS Unix Tools and Toys list may prove helpful and contains links
to ports of much of the software helpful for building Perl.
-http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html
+L<http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html>
=head2 Unpacking Perl distribution on OS/390
choice. Once you have done so, use a command like the following to
unpack the archive:
- vmstar -xvf perl-5^.25^.11.tar
+ vmstar -xvf perl-5^.25^.12.tar
Then set default to the top-level source directory like so:
- set default [.perl-5^.25^.11]
+ set default [.perl-5^.25^.12]
and proceed with configuration as described in the next section.
# This is a replacement for the old BEGIN preamble which heads (or
-# should head) up every core test program to prepare it for running.
-# Now instead of:
+# should head) up every core test program to prepare it for running:
#
# BEGIN {
# chdir 't' if -d 't';
# Its primary purpose is to clear @INC so core tests don't pick up
# modules from an installed Perl.
#
-# t/TEST will use -MTestInit. You may "use TestInit" in the test
-# programs but it is not required.
+# t/TEST and t/harness will invoke each test script with
+# perl -MTestInit[=arg,arg,..] some/test.t
+# You may "use TestInit" in the test # programs but it is not required.
+#
+# TestInit will completely empty the current @INC and replace it with
+# new entries based on the args:
+#
+# U2T: adds ../../lib and ../../t;
+# U1: adds ../lib;
+# T: adds lib and chdir's to the top-level directory.
+#
+# In the absence of any of the above options, it chdir's to
+# t/ or cpan/Foo-Bar/ etc as appropriate and correspondingly
+# sets @INC to (../lib) or ( ../../lib, ../../t)
+#
+# In addition,
+#
+# A: converts any added @INC entries to absolute paths;
+# NC: unsets $ENV{PERL_CORE};
+# DOT: unconditionally appends '.' to @INC.
+#
+# Any trailing '.' in @INC present on entry will be preserved.
#
# P.S. This documentation is not in POD format in order to avoid
# problems when there are fundamental bugs in perl.
$0 =~ s/\.dp$//; # for the test.deparse make target
+my $add_dot = (@INC && $INC[-1] eq '.'); # preserve existing,
+
sub import {
my $self = shift;
my @up_2_t = ('../../lib', '../../t');
} elsif ($_ eq 'T') {
$chdir = '..'
unless -f 't/TEST' && -f 'MANIFEST' && -d 'lib' && -d 'ext';
- @INC = qw/ lib . /;
+ @INC = 'lib';
$setopt = 1;
+ } elsif ($_ eq 'DOT') {
+ $add_dot = 1;
} else {
die "Unknown option '$_'";
}
}
}
- push @INC, '.' unless ${^TAINT};
+ push @INC, '.' if $add_dot;
}
1;
# vim: ts=4 sts=4 sw=4:
use strict;
package CPAN;
-$CPAN::VERSION = '2.17';
+$CPAN::VERSION = '2.18';
$CPAN::VERSION =~ s/_//;
# we need to run chdir all over and we would get at wrong libraries
use vars qw(
$VERSION
);
-$VERSION = "5.5002";
+$VERSION = "5.5003";
sub look {
my $self = shift;
delete $self->{later};
for my $c ( $self->contains ) {
my $obj = CPAN::Shell->expandany($c) or next;
+ if ($obj->id eq $self->id){
+ my $id = $obj->id;
+ $CPAN::Frontend->mywarn("$id seems to contain itself, skipping\n");
+ next;
+ }
$obj->undelay;
}
}
use File::Path ();
@CPAN::Distribution::ISA = qw(CPAN::InfoObj);
use vars qw($VERSION);
-$VERSION = "2.17";
+$VERSION = "2.18";
# no prepare, because prepare is not a command on the shell command line
# TODO: clear instance cache on reload
: ($ENV{PERLLIB} || "");
local $ENV{PERL5OPT} = defined $ENV{PERL5OPT} ? $ENV{PERL5OPT} : "";
- # local $ENV{PERL_USE_UNSAFE_INC} = exists $ENV{PERL_USE_UNSAFE_INC} ? $ENV{PERL_USE_UNSAFE_INC} : 1; # install
+ local $ENV{PERL_USE_UNSAFE_INC} = exists $ENV{PERL_USE_UNSAFE_INC} ? $ENV{PERL_USE_UNSAFE_INC} : 1; # install
$CPAN::META->set_perl5lib;
local $ENV{PERL_MM_USE_DEFAULT} = 1 if $CPAN::Config->{use_prompt_default};
local $ENV{NONINTERACTIVE_TESTING} = 1 if $CPAN::Config->{use_prompt_default};
require_ok( 'ExtUtils::ParseXS' );
chdir('t') if -d 't';
+push @INC, '.';
use Carp; $SIG{__WARN__} = \&Carp::cluck;
ExtUtils::ParseXS->import('process_file');
chdir 't' if -d 't';
+push @INC, '.';
use Carp; $SIG{__WARN__} = \&Carp::cluck;
require_ok( 'ExtUtils::ParseXS' );
chdir('t') if -d 't';
+push @INC, '.';
use Carp; $SIG{__WARN__} = \&Carp::cluck;
+5.20170420
+ - Updated for v5.25.12
+
5.20170320
- Updated for v5.25.11
use vars qw/$VERSION %released %version %families %upstream
%bug_tracker %deprecated %delta/;
use version;
-$VERSION = '5.20170320';
+$VERSION = '5.20170420';
sub _undelta {
my ($delta) = @_;
5.025009 => '2017-01-20',
5.025010 => '2017-02-20',
5.025011 => '2017-03-20',
+ 5.025012 => '2017-04-20',
);
for my $version ( sort { $a <=> $b } keys %released ) {
removed => {
}
},
+ 5.025012 => {
+ delta_from => 5.025011,
+ changed => {
+ 'B::Op_private' => '5.025012',
+ 'CPAN' => '2.18',
+ 'CPAN::Bundle' => '5.5003',
+ 'CPAN::Distribution' => '2.18',
+ 'Config' => '5.025012',
+ 'DynaLoader' => '1.42',
+ 'Module::CoreList' => '5.20170420',
+ 'Module::CoreList::TieHashDelta'=> '5.20170420',
+ 'Module::CoreList::Utils'=> '5.20170420',
+ 'Safe' => '2.40',
+ 'XSLoader' => '0.27',
+ 'base' => '2.25',
+ 'threads::shared' => '1.56',
+ },
+ removed => {
+ }
+ },
);
sub is_core
removed => {
}
},
+ 5.025012 => {
+ delta_from => 5.025011,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
%deprecated = _undelta(\%deprecated);
use strict;
use vars qw($VERSION);
-$VERSION = '5.20170230';
+$VERSION = '5.20170420';
sub TIEHASH {
my ($class, $changed, $removed, $parent) = @_;
use vars qw[$VERSION %utilities];
use Module::CoreList;
-$VERSION = '5.20170320';
+$VERSION = '5.20170420';
sub utilities {
my $perl = shift;
removed => {
}
},
+ 5.025012 => {
+ delta_from => 5.025011,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
%utilities = Module::CoreList::_undelta(\%delta);
ok(! Module::CoreList->is_core("CGI", undef, 5.021001), "CGI not in 5.021001");
ok( Module::CoreList::is_core("Config", 0, "5.020"), "Config v0+ is in core in 5.020");
-ok( Module::CoreList::is_core("Config", undef, "5.020"), "Config v(undef) is in core in 7.020");
+ok( Module::CoreList::is_core("Config", undef, "5.020"), "Config v(undef) is in core in 5.020");
skip "No udp echo port", 1 unless getservbyname('echo', 'udp');
skip "udp ping blocked by Window's default settings", 1 if isWindowsVista();
skip "No getprotobyname", 1 unless $Config{d_getpbyname};
- skip "Not allowed on HP-UX", 1 if $^O eq "hpux";
+ skip "Not allowed on $^O", 1 if $^O =~ /^(hpux|irix|aix)$/;
my $p = new Net::Ping "udp";
is($p->ping("127.0.0.1"), 1);
}
use 5.003_11;
use Scalar::Util qw(reftype refaddr);
-$Safe::VERSION = "2.39";
+$Safe::VERSION = "2.40";
# *** Don't declare any lexicals above this point ***
#
=head2 rdo (FILENAME)
This evaluates the contents of file FILENAME inside the compartment.
+It uses the same rules as perl's built-in C<do> to locate the file,
+poossibly using C<@INC>.
+
See above documentation on the B<reval> method for further details.
=head2 root (NAMESPACE)
\$_[1] = "\0" x $masksize;
EOF
close $fh;
-$safe2->rdo('nasty.pl');
+$safe2->rdo('./nasty.pl');
$safe2->reval( q{$x + $y} );
# Written this way to keep the Test::More that comes with perl 5.6.2 happy
ok( $@ =~ /^'?addition \(\+\)'? trapped by operation mask/,
}
sub init {
- my $hints = File::Spec->catfile("hints", "$^O.pl");
+ my $hints = File::Spec->catfile(".", "hints", "$^O.pl");
if (-f $hints) {
print "Using hints $hints...\n";
local $self;
use strict;
use Test::More tests => 10;
+BEGIN { push @INC, '.' }
use t::Watchdog;
BEGIN { require_ok "Time::HiRes"; }
use strict;
use Test::More tests => 5;
+BEGIN { push @INC, '.' }
use t::Watchdog;
BEGIN { require_ok "Time::HiRes"; }
}
use Test::More tests => 6;
+BEGIN { push @INC, '.' }
use t::Watchdog;
my @one = Time::HiRes::gettimeofday();
}
use Test::More tests => 2;
+BEGIN { push @INC, '.' }
use t::Watchdog;
my $limit = 0.25; # 25% is acceptable slosh for testing timers
}
use Test::More tests => 3;
+BEGIN { push @INC, '.' }
use t::Watchdog;
eval { Time::HiRes::nanosleep(-5) };
use strict;
use Test::More tests => 4;
+BEGIN { push @INC, '.' }
use t::Watchdog;
BEGIN { require_ok "Time::HiRes"; }
}
use Test::More tests => 43;
+BEGIN { push @INC, '.' }
use t::Watchdog;
my @atime;
use strict;
use Test::More tests => 2;
+BEGIN { push @INC, '.' }
use t::Watchdog;
BEGIN { require_ok "Time::HiRes"; }
}
use Test::More tests => 12;
+BEGIN { push @INC, '.' }
use t::Watchdog;
use Config;
}
use Test::More tests => 6;
+BEGIN { push @INC, '.' }
use t::Watchdog;
eval { Time::HiRes::usleep(-2) };
}
use Test::More tests => 18;
+BEGIN { push @INC, '.' }
use t::Watchdog;
use File::Temp qw( tempfile );
if (-f "Normalize.xs") {
print STDERR "Making header files for XS...\n";
- do 'mkheader' or die $@ || "mkheader: $!";
+ do './mkheader' or die $@ || "mkheader: $!";
$clean = { FILES => 'unfcan.h unfcmb.h unfcmp.h unfcpt.h unfexc.h' };
}
package XSLoader;
-$VERSION = "0.26";
+$VERSION = "0.27";
#use strict;
if (-s $bs) { # only read file if it's not empty
# print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
- eval { do $bs; };
+ eval { local @INC = ('.'); do $bs; };
warn "$bs: $@\n" if $@;
goto \&XSLoader::bootstrap_inherit;
}
use strict 'vars';
use vars qw($VERSION);
-$VERSION = '2.24';
+$VERSION = '2.25';
$VERSION =~ tr/_//d;
# constant.pm is slow
{
local $SIG{__DIE__};
my $fn = _module_to_filename($base);
- local @INC = @INC;
- pop @INC if my $dotty = $INC[-1] eq '.';
- eval {
- require $fn
- };
+ eval { require $fn };
# Only ignore "Can't locate" errors from our eval require.
# Other fatal errors (syntax etc) must be reported.
#
unless (%{"$base\::"}) {
require Carp;
local $" = " ";
- my $e = <<ERROR;
+ Carp::croak(<<ERROR);
Base class package "$base" is empty.
(Perhaps you need to 'use' the module which defines that package first,
or make that module available in \@INC (\@INC contains: @INC).
ERROR
- if ($dotty && -e $fn) {
- $e .= <<ERROS;
- The file $fn does exist in the current directory. But note
- that base.pm, when loading a module, now ignores the current working
- directory if it is the last entry in \@INC. If your software worked on
- previous versions of Perl, the best solution is to use FindBin to
- detect the path properly and to add that path to \@INC. As a last
- resort, you can re-enable looking in the current working directory by
- adding "use lib '.'" to your code.
-ERROS
- }
- $e =~ s/\n\z/)\n/;
- Carp::croak($e);
}
$sigdie = $SIG{__DIE__} || undef;
}
<$fh>;
(my $test_file = $file) =~ s/-open-chunk//;
-unless (my $return = do $test_file) {
+unless (my $return = do "./$test_file") {
warn "couldn't parse $test_file: $@" if $@;
warn "couldn't do $test_file: $!" unless defined $return;
warn "couldn't run $test_file" unless $return;
<$fh>;
(my $test_file = $file) =~ s/-open-line//;
-unless (my $return = do $test_file) {
+unless (my $return = do "./$test_file") {
warn "couldn't parse $test_file: $@" if $@;
warn "couldn't do $test_file: $!" unless defined $return;
warn "couldn't run $test_file" unless $return;
+++ /dev/null
-#!/usr/bin/perl -w
-
-use strict;
-
-use base ();
-
-use Test::More tests => 2;
-
-if ($INC[-1] ne '.') { push @INC, '.' }
-
-my $inc = quotemeta "@INC[0..$#INC-1]";
-
-eval { 'base'->import("foo") };
-like $@, qr/\@INC contains: $inc\).\)/,
- 'Error does not list final dot in @INC (or mention use lib)';
-eval { 'base'->import('t::lib::Dummy') };
-like $@, qr<\@INC contains: $inc\).\n(?x:
- ) The file t/lib/Dummy\.pm does exist in the current direct>,
- 'special cur dir message for existing files in . that are ignored';
use Scalar::Util qw(reftype refaddr blessed);
-our $VERSION = '1.55'; # Please update the pod, too.
+our $VERSION = '1.56'; # Please update the pod, too.
my $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
=head1 VERSION
-This document describes threads::shared version 1.55
+This document describes threads::shared version 1.56
=head1 SYNOPSIS
if (!sv) continue;
if ( (SvOBJECT(sv) || (SvROK(sv) && (sv = SvRV(sv))))
&& SvREFCNT(sv) == 1 ) {
- SV *tmp = Perl_sv_newmortal(caller_perl);
+ SV *tmp;
PERL_SET_CONTEXT((aTHX = caller_perl));
+ tmp = sv_newmortal();
sv_upgrade(tmp, SVt_RV);
get_RV(tmp, sv);
PERL_SET_CONTEXT((aTHX = PL_sharedsv_space));
if ( (SvOBJECT(sv) || (SvROK(sv) && (sv = SvRV(sv))))
&& SvREFCNT(sv) == 1 )
{
- SV *tmp = Perl_sv_newmortal(caller_perl);
+ SV *tmp;
PERL_SET_CONTEXT((aTHX = caller_perl));
+ tmp = sv_newmortal();
sv_upgrade(tmp, SVt_RV);
get_RV(tmp, sv);
PERL_SET_CONTEXT((aTHX = PL_sharedsv_space));
BEGIN {
$| = 1;
- print("1..131\n"); ### Number of tests that will be run ###
+ print("1..133\n"); ### Number of tests that will be run ###
};
use threads;
::ok($count == $n, "remove array object by undef");
}
+# RT #131124
+# Emptying a shared array creates new temp SVs. If there are no spare
+# SVs, a new arena is allocated. shared.xs was mallocing a new arena
+# with the wrong perl context set, meaning that when the arena was later
+# freed, it would "panic: realloc from wrong pool"
+#
+
+{
+ threads->new(sub {
+ my @a :shared;
+ push @a, bless &threads::shared::share({}) for 1..1000;
+ undef @a; # this creates lots of temp SVs
+ })->join;
+ ok(1, "#131124 undef array doesnt panic");
+
+ threads->new(sub {
+ my @a :shared;
+ push @a, bless &threads::shared::share({}) for 1..1000;
+ @a = (); # this creates lots of temp SVs
+ })->join;
+ ok(1, "#131124 clear array doesnt panic");
+}
# EOF
STRLEN targlen;
STRLEN len;
SV * const targ = LvTARG(sv);
+ char errflags = LvFLAGS(sv);
PERL_ARGS_ASSERT_DO_VECSET;
+ /* some out-of-range errors have been deferred if/until the LV is
+ * actually written to: f(vec($s,-1,8)) is not always fatal */
+ if (errflags) {
+ assert(!(errflags & ~(1|4)));
+ if (errflags & 1)
+ Perl_croak_nocontext("Negative offset to vec in lvalue context");
+ Perl_croak_nocontext("Out of memory!");
+ }
+
if (!targ)
return;
s = (unsigned char*)SvPV_force_flags(targ, targlen,
# Tim.Bunce@ig.co.uk, August 1994
BEGIN {
- $VERSION = '1.41';
+ $VERSION = '1.42';
}
EOT
$bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
if (-s $bs) { # only read file if it's not empty
print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
- eval { do $bs; };
+ eval { local @INC = ('.'); do $bs; };
warn "$bs: $@\n" if $@;
}
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
END {
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
END {
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
END {
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
END {
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
END {
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
END {
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
#!/usr/bin/perl -w # -*- perl -*-
BEGIN {
- require "t/pod2html-lib.pl";
+ require "./t/pod2html-lib.pl";
}
use strict;
--- /dev/null
+#
+# test that non-empty .bs files get executed
+
+$bscode = <<'EOF';
+$::bs_file_got_executed = 1;
+EOF
+
use Test::More tests => 17;
use XS::APItest;
+
+BEGIN { push @INC, '.' } # t/BHK.pm is in ext/XS-APItest/ directory
+
use t::BHK (); # make sure it gets compiled early
BEGIN { package XS::APItest; *main::bhkav = \@XS::APItest::bhkav }
--- /dev/null
+#!perl -w
+#
+# check that .bs files are loaded and executed.
+# During build of XS::APItest, the presence of APItest_BS should
+# cause a non-empty APItest.bs file to auto-generated. When loading
+# APItest.so, the .bs should be automatically executed, which should
+# set $::bs_file_got_executed.
+
+use strict;
+
+use Test::More;
+use XS::APItest;
+
+is $::bs_file_got_executed, 1, "BS file was executed";
+
+done_testing();
+
is $t, "";
$t = "";
-$t = do("t/labelconst.aux");
+$t = do("./t/labelconst.aux");
is $@, "";
is $t, "FOOBARBAZQUUX";
{
use utf8;
$t = "";
- $t = do("t/labelconst_utf8.aux");
+ $t = do("./t/labelconst_utf8.aux");
is $@, "";
is $t, "FǑǑBÀRᛒÀZQÙÙX";
}
is $t[3], "e";
}
is $t[3], "a";
+BEGIN { push @INC, '.' }
use t::scope_0;
is scope0_test(), "d";
# 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.25.11
+# mkdir -p /opt/perl-catamount/lib/perl5/5.25.12
# 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.25.11
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.25.12
# 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
print "1..0 # Skip -- Perl configured without B module\n";
exit 0;
}
- require 'test.pl';
+ require './test.pl';
}
use warnings;
our %bits;
-our $VERSION = "5.025011";
+our $VERSION = "5.025012";
$bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
$bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
{
SV * const lsv = LvTARG(sv);
+ char errflags = LvFLAGS(sv);
PERL_ARGS_ASSERT_MAGIC_GETVEC;
PERL_UNUSED_ARG(mg);
- sv_setuv(sv, do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
+ /* non-zero errflags implies deferred out-of-range condition */
+ assert(!(errflags & ~(1|4)));
+ sv_setuv(sv, errflags ? 0 : do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
return 0;
}
#define PERL_REVISION 5 /* age */
#define PERL_VERSION 25 /* epoch */
-#define PERL_SUBVERSION 11 /* generation */
+#define PERL_SUBVERSION 12 /* generation */
/* The following numbers describe the earliest compatible version of
Perl ("compatibility" here being defined as sufficient binary/API
*/
#define PERL_API_REVISION 5
#define PERL_API_VERSION 25
-#define PERL_API_SUBVERSION 11
+#define PERL_API_SUBVERSION 12
/*
XXX Note: The selection of non-default Configure options, such
as -Duselonglong may invalidate these settings. Currently, Configure
* 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.25.11" /**/
-#define PRIVLIB_EXP "/sys/lib/perl/5.25.11" /**/
+#define PRIVLIB "/sys/lib/perl/5.25.12" /**/
+#define PRIVLIB_EXP "/sys/lib/perl/5.25.12" /**/
/* 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.25.11/site_perl" /**/
-#define SITELIB_EXP "/sys/lib/perl/5.25.11/site_perl" /**/
-#define SITELIB_STEM "/sys/lib/perl/5.25.11/site_perl" /**/
+#define SITELIB "/sys/lib/perl/5.25.12/site_perl" /**/
+#define SITELIB_EXP "/sys/lib/perl/5.25.12/site_perl" /**/
+#define SITELIB_STEM "/sys/lib/perl/5.25.12/site_perl" /**/
/* Size_t_size:
* This symbol holds the size of a Size_t in bytes.
ansi2knr=''
aphostname='/bin/uname -n'
api_revision='5'
-api_subversion='11'
+api_subversion='12'
api_version='25'
-api_versionstring='5.25.11'
+api_versionstring='5.25.12'
ar='ar'
-archlib='/sys/lib/perl5/5.25.11/386'
-archlibexp='/sys/lib/perl5/5.25.11/386'
+archlib='/sys/lib/perl5/5.25.12/386'
+archlibexp='/sys/lib/perl5/5.25.12/386'
archname64=''
archname='386'
archobjs=''
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='/sys/lib/perl/5.25.11/386'
+installarchlib='/sys/lib/perl/5.25.12/386'
installbin='/usr/bin'
installman1dir='/sys/man/1pub'
installman3dir='/sys/man/2pub'
installprefix='/usr'
installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.25.11'
+installprivlib='/sys/lib/perl/5.25.12'
installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.25.11/site_perl/386'
+installsitearch='/sys/lib/perl/5.25.12/site_perl/386'
installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.25.11/site_perl'
+installsitelib='/sys/lib/perl/5.25.12/site_perl'
installstyle='lib/perl5'
installusrbinperl='undef'
installvendorarch=''
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/sys/lib/perl/5.25.11'
-privlibexp='/sys/lib/perl/5.25.11'
+privlib='/sys/lib/perl/5.25.12'
+privlibexp='/sys/lib/perl/5.25.12'
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.25.11/site_perl/386'
+sitearch='/sys/lib/perl/5.25.12/site_perl/386'
sitearchexp='/sys/lib/perl/site_perl/386'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.25.11/site_perl'
-sitelib_stem='/sys/lib/perl/5.25.11/site_perl'
-sitelibexp='/sys/lib/perl/5.25.11/site_perl'
+sitelib='/sys/lib/perl/5.25.12/site_perl'
+sitelib_stem='/sys/lib/perl/5.25.12/site_perl'
+sitelibexp='/sys/lib/perl/5.25.12/site_perl'
siteprefix='/usr'
siteprefixexp='/usr'
sizesize='4'
strerror_r_proto='0'
strings='/sys/include/ape/string.h'
submit=''
-subversion='11'
+subversion='12'
sysman='/sys/man/1pub'
tail=''
tar=''
vendorlibexp=''
vendorprefix=''
vendorprefixexp=''
-version='5.25.11'
-version_patchlevel_string='version 25 subversion 11'
+version='5.25.12'
+version_patchlevel_string='version 25 subversion 12'
versiononly='undef'
vi=''
xlibpth=''
config_argc=0
PERL_REVISION=5
PERL_VERSION=25
-PERL_SUBVERSION=11
+PERL_SUBVERSION=12
PERL_API_REVISION=5
PERL_API_VERSION=25
-PERL_API_SUBVERSION=11
+PERL_API_SUBVERSION=12
PERL_PATCHLEVEL=
PERL_CONFIG_SH=true
/roffitall
# generated
-/perl52511delta.pod
+/perl52512delta.pod
/perlapi.pod
/perlintern.pod
/perlmodlib.pod
perlhist Perl history records
perldelta Perl changes since previous version
+ perl52511delta Perl changes in version 5.25.11
perl52510delta Perl changes in version 5.25.10
perl5259delta Perl changes in version 5.25.9
perl5258delta Perl changes in version 5.25.8
--- /dev/null
+=encoding utf8
+
+=head1 NAME
+
+perl52511delta - what is new for perl v5.25.11
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.25.10 release and the 5.25.11
+release.
+
+If you are upgrading from an earlier release such as 5.25.9, first read
+L<perl52510delta>, which describes differences between 5.25.9 and 5.25.10.
+
+=head1 Notice
+
+This release includes two important updates:
+
+=over 4
+
+=item * Turning on the removal of C<.> in C<@INC>
+
+=item * Providing a warning when C<do> is used on a file in C<.>
+
+=back
+
+=head1 Security
+
+=head2 Remove current dir (C<.>) from C<@INC>
+
+For security reasons, C<@INC> no longer contains the default directory
+(C<.>).
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from version 2.070 to 2.074.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from version 2.070 to 2.074.
+
+=item *
+
+L<Config::Perl::V> has been upgraded from version 0.27 to 0.28.
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded from version 3.33 to 3.34.
+
+=item *
+
+L<ExtUtils::Typemaps> has been upgraded from version 3.33 to 3.34.
+
+=item *
+
+L<File::Spec> has been upgraded from version 3.66 to 3.67.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20170220 to 5.20170320.
+
+=item *
+
+L<Pod::Perldoc> has been upgraded from version 3.27 to 3.28.
+
+=item *
+
+L<Test::Harness> has been upgraded from version 3.36_01 to 3.38.
+
+=item *
+
+L<threads> has been upgraded from version 2.13 to 2.15.
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.54 to 1.55.
+
+=item *
+
+L<VMS::Stdio> has been upgraded from version 2.42 to 2.41.
+
+=back
+
+=head1 Diagnostics
+
+=head2 New Diagnostics
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+Since C<.> is removed from C<@INC>, C<do> will now trigger a warning
+recommending on fixing the C<do> statement.
+
+L<do "%s" failed, '.' is no longer in @INC|perldiag/"do "%s" failed, '.' is no longer in @INC">
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+C<DEFAULT_INC_EXCLUDES_DOT> has been turned on as default.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+C< $-{$name} > would leak an C<AV> on each access if the regular
+expression had no named captures. The same applies to access to any
+hash tied with L<Tie::Hash::NamedCapture> and C<< all =E<gt> 1 >>. [perl
+#130822]
+
+=back
+
+=head1 Obituary
+
+It is with great sadness we note that Kip Hampton passed away. Probably
+best known as the author of the Perl & XML column on XML.com, he was a
+core contributor to AxKit, ab XML server platform that became an Apache
+Foundation project. He was a frequent speaker in the early days at
+OSCON, and most recently at YAPC::NA in Madison. He was frequently on
+irc.perl.org as `ubu`, generally in the #axkit-dahut community, the
+group responsible for YAPC::NA Asheville in 2011.
+
+Kip and his constant contributions to the community will be greatly missed.
+
+=head1 Acknowledgements
+
+
+Perl 5.25.11 represents approximately 4 weeks of development since Perl 5.25.10
+and contains approximately 4,900 lines of changes across 240 files from 21
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 2,200 lines of changes to 170 .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.25.11:
+
+Aaron Crane, Andy Lester, Chris 'BinGOs' Williams, Craig A. Berry, Dave Cross,
+David Golden, David Mitchell, Dominic Hargreaves, H.Merijn Brand, Hugo van der
+Sanden, James E Keenan, Jarkko Hietaniemi, Jerry D. Hedden, Karl Williamson,
+Leon Timmermans, Matthew Horsfall, Renee Baecker, Sawyer X, Shlomi Fish, Steve
+Hay, Tony Cook.
+
+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 perl bug database
+at L<https://rt.perl.org/> . There may also be information at
+L<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 see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
+for details of how to report the issue.
+
+=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.25.11
+perldelta - what is new for perl v5.25.12
=head1 DESCRIPTION
-This document describes differences between the 5.25.10 release and the 5.25.11
+This document describes differences between the 5.25.11 release and the 5.25.12
release.
-If you are upgrading from an earlier release such as 5.25.9, first read
-L<perl52510delta>, which describes differences between 5.25.9 and 5.25.10.
-
-=head1 Notice
-
-This release includes two important updates:
-
-=over 4
-
-=item * Turning on the removal of C<.> in C<@INC>
-
-=item * Providing a warning when C<do> is used on a file in C<.>
-
-=back
-
-=head1 Security
-
-=head2 Remove current dir (C<.>) from C<@INC>
-
-For security reasons, C<@INC> no longer contains the default directory
-(C<.>).
+If you are upgrading from an earlier release such as 5.25.10, first read
+L<perl52511delta>, which describes differences between 5.25.10 and 5.25.11.
=head1 Modules and Pragmata
=item *
-L<Compress::Raw::Bzip2> has been upgraded from version 2.070 to 2.074.
-
-=item *
-
-L<Compress::Raw::Zlib> has been upgraded from version 2.070 to 2.074.
+L<base> has been upgraded from version 2.24 to 2.25.
=item *
-L<Config::Perl::V> has been upgraded from version 0.27 to 0.28.
+L<CPAN> has been upgraded from version 2.17 to 2.18.
=item *
-L<ExtUtils::ParseXS> has been upgraded from version 3.33 to 3.34.
+L<DynaLoader> has been upgraded from version 1.41 to 1.42.
=item *
-L<ExtUtils::Typemaps> has been upgraded from version 3.33 to 3.34.
+L<Module::CoreList> has been upgraded from version 5.20170320 to
+5.20170420.
=item *
-L<File::Spec> has been upgraded from version 3.66 to 3.67.
+L<Safe> has been upgraded from version 2.39 to 2.40.
=item *
-L<Module::CoreList> has been upgraded from version 5.20170220 to 5.20170320.
+L<threads::shared> has been upgraded from version 1.55 to 1.56.
=item *
-L<Pod::Perldoc> has been upgraded from version 3.27 to 3.28.
-
-=item *
-
-L<Test::Harness> has been upgraded from version 3.36_01 to 3.38.
-
-=item *
-
-L<threads> has been upgraded from version 2.13 to 2.15.
-
-=item *
-
-L<threads::shared> has been upgraded from version 1.54 to 1.55.
-
-=item *
-
-L<VMS::Stdio> has been upgraded from version 2.42 to 2.41.
+L<XSLoader> has been upgraded from version 0.26 to 0.27.
=back
=head2 New Diagnostics
-=head3 New Warnings
+=head3 New Errors
=over 4
=item *
-Since C<.> is removed from C<@INC>, C<do> will now trigger a warning
-recommending on fixing the C<do> statement.
+Since C<.> is now removed from C<@INC> by default, C<do> will now trigger
+a warning recommending to fix the C<do> statement:
-L<do "%s" failed, '.' is no longer in @INC|perldiag/"do "%s" failed, '.' is no longer in @INC">
+L<do "%s" failed, '.' is no longer in @INC|perldiag/do "%s" failed, '.' is no longer in @INC; did you mean do ".E<sol>%s"?>
=back
-=head1 Configuration and Compilation
+=head2 Changes to Existing Diagnostics
=over 4
=item *
-C<DEFAULT_INC_EXCLUDES_DOT> has been turned on as default.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
+When a C<require> fails, we now do not provide C<@INC> when the C<require>
+is for a file instead of a module.
=item *
-C< $-{$name} > would leak an C<AV> on each access if the regular
-expression had no named captures. The same applies to access to any
-hash tied with L<Tie::Hash::NamedCapture> and C<< all =E<gt> 1 >>. [perl
-#130822]
+When C<@INC> is not scanned for a C<require> call, we no longer display
+C<@INC> to avoid confusion.
=back
-=head1 Obituary
-
-It is with great sadness we note that Kip Hampton passed away. Probably
-best known as the author of the Perl & XML column on XML.com, he was a
-core contributor to AxKit, ab XML server platform that became an Apache
-Foundation project. He was a frequent speaker in the early days at
-OSCON, and most recently at YAPC::NA in Madison. He was frequently on
-irc.perl.org as `ubu`, generally in the #axkit-dahut community, the
-group responsible for YAPC::NA Asheville in 2011.
-
-Kip and his constant contributions to the community will be greatly missed.
-
=head1 Acknowledgements
-
-Perl 5.25.11 represents approximately 4 weeks of development since Perl 5.25.10
-and contains approximately 4,900 lines of changes across 240 files from 21
+Perl 5.25.12 represents approximately 4 weeks of development since Perl 5.25.11
+and contains approximately 1,700 lines of changes across 150 files from 8
authors.
Excluding auto-generated files, documentation and release tools, there were
-approximately 2,200 lines of changes to 170 .pm, .t, .c and .h files.
+approximately 700 lines of changes to 73 .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.25.11:
+improvements that became Perl 5.25.12:
-Aaron Crane, Andy Lester, Chris 'BinGOs' Williams, Craig A. Berry, Dave Cross,
-David Golden, David Mitchell, Dominic Hargreaves, H.Merijn Brand, Hugo van der
-Sanden, James E Keenan, Jarkko Hietaniemi, Jerry D. Hedden, Karl Williamson,
-Leon Timmermans, Matthew Horsfall, Renee Baecker, Sawyer X, Shlomi Fish, Steve
-Hay, Tony Cook.
+Chris 'BinGOs' Williams, Dagfinn Ilmari Mannsåker, David Mitchell, James E
+Keenan, Jarkko Hietaniemi, Karl Williamson, Pali, Sawyer X.
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
(F) You cannot put a repeat count of any kind right after the '/' code.
See L<perlfunc/pack>.
-=item do "%s" failed, '.' is no longer in @INC
+=item do "%s" failed, '.' is no longer in @INC; did you mean do "./%s"?
-(W deprecated) Previously C< do "somefile"; > would search the current
-directory for the specified file. Since F<.> has been removed from
-C<@INC> by default this is no longer true. To search the current
-directory (and only the current directory) you can write C< do
-"./somefile"; >.
+(D deprecated) Previously C< do "somefile"; > would search the current
+directory for the specified file. Since perl v5.26.0, F<.> has been
+removed from C<@INC> by default, so this is no longer true. To search the
+current directory (and only the current directory) you can write
+C< do "./somefile"; >.
=item Don't know how to get file name
(D deprecated, misc) You used the obsolescent C<dump()> built-in function,
without fully qualifying it as C<CORE::dump()>. Maybe it's a typo.
-Use of a unqualified C<dump()> was deprecated in Perl 5.30, and this
+Use of a unqualified C<dump()> was deprecated in Perl 5.8.0, and this
will not be available in Perl 5.30.
See L<perlfunc/dump>.
If the B<ExtUtils::Embed> module isn't part of your Perl distribution,
you can retrieve it from
-http://www.perl.com/perl/CPAN/modules/by-module/ExtUtils/
+L<http://www.perl.com/perl/CPAN/modules/by-module/ExtUtils/>
(If this documentation came from your Perl distribution, then you're
running 5.004 or better and you already have it.)
Zakharevich.
Doug MacEachern has an article on embedding in Volume 1, Issue 4 of
-The Perl Journal ( http://www.tpj.com/ ). Doug is also the developer of the
+The Perl Journal ( L<http://www.tpj.com/> ). Doug is also the developer of the
most widely-used Perl embedding: the mod_perl system
(perl.apache.org), which embeds Perl in the Apache web server.
Oracle, Binary Evolution, ActiveState, and Ben Sugars's nsapi_perl
regexes with embedded newlines that are specified with raw C</.../>
delimiters and don't have a modifier C</x> are indistinguishable from
code chunks beginning with the division operator C</>. As a workaround
-you must use C<m/.../> or C<m?...?> for such patterns. Also, the presence of
-regexes specified with raw C<?...?> delimiters may cause mysterious
-errors. The workaround is to use C<m?...?> instead. See
+you must use C<m/.../> or C<m?...?> for such patterns. See
L<http://search.cpan.org/perldoc?Switch#LIMITATIONS>
Currently the content of the C<__DATA__> block is not filtered.
X<do>
Uses the value of EXPR as a filename and executes the contents of the
-file as a Perl script.
+file as a Perl script:
+ # load the exact specified file (./ and ../ special-cased)
+ do '/foo/stat.pl';
do './stat.pl';
+ do '../foo/stat.pl';
-is largely like
+ # search for the named file within @INC
+ do 'stat.pl';
+ do 'foo/stat.pl';
+
+C<do './stat.pl'> is largely like
eval `cat stat.pl`;
reparse the file every time you call it, so you probably don't want
to do this inside a loop.
-Using C<do> with no path, like
+Using C<do> with a relative path (except for F<./> and F<../>), like
- do 'stat.pl';
+ do 'foo/stat.pl';
will search the L<C<@INC>|perlvar/@INC> directories, and update
L<C<%INC>|perlvar/%INC> if the file is found. See L<perlvar/@INC>
and L<perlvar/%INC> for these variables. In particular, note that
whilst historically L<C<@INC>|perlvar/@INC> contained '.' (the
current directory) making these two cases equivalent, that is no
-longer necessarily the case, as there is now a compile-time option
-to disable this behaviour.
+longer necessarily the case, as '.' is not included in C<@INC> by default
+in perl versions 5.26.0 onwards. Instead, perl will now warn:
+
+ do "stat.pl" failed, '.' is no longer in @INC;
+ did you mean do "./stat.pl"?
If L<C<do>|/do EXPR> can read the file but cannot compile it, it
returns L<C<undef>|/undef EXPR> and sets an error message in
You might like to use L<C<do>|/do EXPR> to read in a program
configuration file. Manual error checking can be done this way:
- # read in config files: system first, then user
+ # Read in config files: system first, then user.
+ # Beware of using relative pathnames here.
for $file ("/share/prog/defaults.rc",
"$ENV{HOME}/.someprogrc")
{
camel every few minutes, you should not push there. Both machines also
have a full CPAN mirror in F</srv/CPAN>, please use this. To share files
with the general public, dromedary serves your F<~/public_html/> as
-C<http://users.perl5.git.perl.org/~yourlogin/>
+C<L<http://users.perl5.git.perl.org/~yourlogin/>>
These hosts have fairly strict firewalls to the outside. Outgoing, only
rsync, ssh and git are allowed. For http and ftp, you can use
-http://webproxy:3128 as proxy. Incoming, the firewall tries to detect
+L<http://webproxy:3128> as proxy. Incoming, the firewall tries to detect
attacks and blocks IP addresses with suspicious activity. This
sometimes (but very rarely) has false positives and you might get
blocked. The quickest way to get unblocked is to notify the admins.
=head1 CPAN TESTERS AND PERL SMOKERS
-The CPAN testers ( http://testers.cpan.org/ ) are a group of volunteers
+The CPAN testers ( L<http://testers.cpan.org/> ) are a group of volunteers
who test CPAN modules on a variety of platforms.
-Perl Smokers ( http://www.nntp.perl.org/group/perl.daily-build/ and
-http://www.nntp.perl.org/group/perl.daily-build.reports/ )
+Perl Smokers ( L<http://www.nntp.perl.org/group/perl.daily-build/> and
+L<http://www.nntp.perl.org/group/perl.daily-build.reports/> )
automatically test Perl source releases on platforms with various
configurations.
=head2 Coverity
-Coverity (http://www.coverity.com/) is a product similar to lint and as
+Coverity (L<http://www.coverity.com/>) is a product similar to lint and as
a testbed for their product they periodically check several open source
projects, and they give out accounts to open source developers to the
defect databases.
changed, too. Therefore such code should probably be turned into a
subroutine or a macro.
-cpd (http://pmd.sourceforge.net/cpd.html) is part of the pmd project
-(http://pmd.sourceforge.net/). pmd was originally written for static
+cpd (L<http://pmd.sourceforge.net/cpd.html>) is part of the pmd project
+(L<http://pmd.sourceforge.net/>). pmd was originally written for static
analysis of Java code, but later the cpd part of it was extended to
parse also C and C++.
Abigail 5.25.9 2017-Jan-20
Renee 5.25.10 2017-Feb-20
Sawyer X 5.25.11 2017-Feb-20
+ Sawyer X 5.25.12 2017-Mar-20
=head2 SELECTED RELEASE SIZES
=head2 Using Perl modules
Perl modules provide a range of features to help you avoid reinventing
-the wheel, and can be downloaded from CPAN ( http://www.cpan.org/ ). A
+the wheel, and can be downloaded from CPAN ( L<http://www.cpan.org/> ). A
number of popular modules are included with the Perl distribution
itself.
You can think of a module as the fundamental unit of reusable Perl
code; see L<perlmod> for details. Whenever anyone creates a chunk of
Perl code that they think will be useful to the world, they register
-as a Perl developer at http://www.cpan.org/modules/04pause.html
+as a Perl developer at L<http://www.cpan.org/modules/04pause.html>
so that they can then upload their code to the CPAN. The CPAN is the
Comprehensive Perl Archive Network and can be accessed at
-http://www.cpan.org/ , and searched at http://search.cpan.org/ .
+L<http://www.cpan.org/> , and searched at L<http://search.cpan.org/> .
This documentation is for people who want to download CPAN modules
and install them on their own computer.
B<If you're on a Unix or Unix-like system,>
You can use Andreas Koenig's CPAN module
-( http://www.cpan.org/modules/by-module/CPAN )
+( L<http://www.cpan.org/modules/by-module/CPAN> )
to automate the following steps, from DECOMPRESS through INSTALL.
A. DECOMPRESS
Decompress the file with C<gzip -d yourmodule.tar.gz>
-You can get gzip from ftp://prep.ai.mit.edu/pub/gnu/
+You can get gzip from L<ftp://prep.ai.mit.edu/pub/gnu/>
Or, you can combine this step with the next to save disk space:
A. DECOMPRESS
-You can use the shareware Winzip ( http://www.winzip.com ) to
+You can use the shareware Winzip ( L<http://www.winzip.com> ) to
decompress and unpack modules.
B. UNPACK
C. BUILD
You'll need the C<nmake> utility, available at
-http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe
+L<http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe>
or dmake, available on CPAN.
-http://search.cpan.org/dist/dmake/
+L<http://search.cpan.org/dist/dmake/>
Does the module require compilation (i.e. does it have files that end
in .xs, .c, .h, .y, .cc, .cxx, or .C)? If it does, life is now
yourself (no easy feat on Windows). You'll need a compiler such as
Visual C++. Alternatively, you can download a pre-built PPM package
from ActiveState.
-http://aspn.activestate.com/ASPN/Downloads/ActivePerl/PPM/
+L<http://aspn.activestate.com/ASPN/Downloads/ActivePerl/PPM/>
Go into the newly-created directory and type:
A. DECOMPRESS
First, make sure you have the latest B<cpan-mac> distribution (
-http://www.cpan.org/authors/id/CNANDOR/ ), which has utilities for
+L<http://www.cpan.org/authors/id/CNANDOR/> ), which has utilities for
doing all of the steps. Read the cpan-mac directions carefully and
install it. If you choose not to use cpan-mac for some reason, there
are alternatives listed here.
B<untarzipme> droplet, which will decompress and unpack for you.
B<Or>, you can either use the shareware B<StuffIt Expander> program
-( http://my.smithmicro.com/mac/stuffit/ )
+( L<http://my.smithmicro.com/mac/stuffit/> )
or the freeware B<MacGzip> program (
-http://persephone.cps.unizar.es/general/gente/spd/gzip/gzip.html ).
+L<http://persephone.cps.unizar.es/general/gente/spd/gzip/gzip.html> ).
B. UNPACK
If you're using untarzipme or StuffIt, the archive should be extracted
now. B<Or>, you can use the freeware B<suntar> or I<Tar> (
-http://hyperarchive.lcs.mit.edu/HyperArchive/Archive/cmp/ ).
+L<http://hyperarchive.lcs.mit.edu/HyperArchive/Archive/cmp/> ).
C. BUILD
A. DECOMPRESS
-djtarx ( ftp://ftp.delorie.com/pub/djgpp/current/v2/ )
+djtarx ( L<ftp://ftp.delorie.com/pub/djgpp/current/v2/> )
will both uncompress and unpack.
B. UNPACK
B<If you're on OS/2,>
Get the EMX development suite and gzip/tar, from either Hobbes (
-http://hobbes.nmsu.edu ) or Leo ( http://www.leo.org ), and then follow
+L<http://hobbes.nmsu.edu> ) or Leo ( L<http://www.leo.org> ), and then follow
the instructions for Unix.
=item *
C. BUILD
Make sure you have MMS (from Digital) or the freeware MMK ( available
-from MadGoat at http://www.madgoat.com ). Then type this to create
+from MadGoat at L<http://www.madgoat.com> ). Then type this to create
the DESCRIP.MMS for the module:
perl Makefile.PL
Decompress the file with C<gzip -d yourmodule.tar.gz>
You can get gzip from
-http://www.s390.ibm.com/products/oe/bpxqp1.html
+L<http://www.s390.ibm.com/products/oe/bpxqp1.html>
B. UNPACK
The BUILD and INSTALL steps are identical to those for Unix. Some
modules generate Makefiles that work better with GNU make, which is
-available from http://www.mks.com/s390/gnu/
+available from L<http://www.mks.com/s390/gnu/>
=back
L<Test::Simple>, L<Test::Inline>, L<Carp::Assert>, L<Test::More>, L<Test::MockObject>
-=item http://pause.perl.org/
+=item L<http://pause.perl.org/>
Perl Authors Upload Server. Contains links to information for module
authors.
=item Get a CPAN user ID
Every developer publishing modules on CPAN needs a CPAN ID. Visit
-C<http://pause.perl.org/>, select "Request PAUSE Account", and wait for
+C<L<http://pause.perl.org/>>, select "Request PAUSE Account", and wait for
your request to be approved by the PAUSE administrators.
=item C<perl Makefile.PL; make test; make distcheck; make dist>
L<perlmod>, L<perlmodlib>, L<perlmodinstall>, L<h2xs>, L<strict>,
L<Carp>, L<Exporter>, L<perlpod>, L<Test::Simple>, L<Test::More>
L<ExtUtils::MakeMaker>, L<Module::Build>, L<Module::Starter>
-L<http://www.cpan.org/>, Ken Williams's tutorial on building your own
+L<http://www.cpan.org/>, Ken Williams' tutorial on building your own
module at L<http://mathforum.org/~ken/perl_modules.html>
=head2 Symbolic Unary Operators
X<unary operator> X<operator, unary>
-Unary C<"!"> performs logical negation, that is, "not". See also C<not> for a lower
-precedence version of this.
+Unary C<"!"> performs logical negation, that is, "not". See also
+L<C<not>|/Logical Not> for a lower precedence version of this.
X<!>
Unary C<"-"> performs arithmetic negation if the operand is numeric,
=item C<m?I<PATTERN>?msixpodualngc>
X<?> X<operator, match-once>
-=item C<?I<PATTERN>?msixpodualngc>
-
This is just like the C<m/I<PATTERN>/> search, except that it matches
only once between calls to the C<reset()> operator. This is a useful
optimization when you want to see only the first occurrence of
is emitted if the S<C<use warnings>> pragma or the B<-w> command-line flag
(that is, the C<$^W> variable) was set.
-=item C<RE> in C<?RE?>, C</RE/>, C<m/RE/>, C<s/RE/foo/>,
+=item C<RE> in C<m?RE?>, C</RE/>, C<m/RE/>, C<s/RE/foo/>,
Processing of C<\Q>, C<\U>, C<\u>, C<\L>, C<\l>, C<\F>, C<\E>,
and interpolation happens (almost) as with C<qq//> constructs.
the previous step, and C<\\/> will be left as is. Because C</> is
equivalent to C<\/> inside a regular expression, this does not
matter unless the delimiter happens to be character special to the
-RE engine, such as in C<s*foo*bar*>, C<m[foo]>, or C<?foo?>; or an
+RE engine, such as in C<s*foo*bar*>, C<m[foo]>, or C<m?foo?>; or an
alphanumeric char, as in:
m m ^ a \s* b mmx;
the analysis, and after this are the main columns defining which define the
report. Check the C<dprofpp> docs for details of the many options it supports.
-See also C<Apache::DProf> which hooks C<Devel::DProf> into C<mod_perl>.
+See also C<L<Apache::DProf>> which hooks C<Devel::DProf> into C<mod_perl>.
=head2 Devel::Profiler
YMMV.
-See also C<Devel::Apache::Profiler> which hooks C<Devel::Profiler> into C<mod_perl>.
+See also C<L<Devel::Apache::Profiler>> which hooks C<Devel::Profiler>
+into C<mod_perl>.
=head2 Devel::SmallProf
these tools are supposed to be used together, there is no single best way to
profile your code, you need to use the best tools for the job.
-See also C<Apache::SmallProf> which hooks C<Devel::SmallProf> into C<mod_perl>.
+See also C<L<Apache::SmallProf>> which hooks C<Devel::SmallProf> into
+C<mod_perl>.
=head2 Devel::FastProf
Oodles of very useful information in there - this seems to be the way forward.
-See also C<Devel::NYTProf::Apache> which hooks C<Devel::NYTProf> into C<mod_perl>.
+See also C<L<Devel::NYTProf::Apache>> which hooks C<Devel::NYTProf> into
+C<mod_perl>.
=head1 SORTING
This documentation is maintained as part of the podlators distribution.
The current version is always available from its web site at
-<http://www.eyrie.org/~eagle/software/podlators/>.
+L<http://www.eyrie.org/~eagle/software/podlators/>.
=head1 AUTHOR
Any number of C<(*PRUNE)> assertions may be used in a pattern.
-See also C<< (?>pattern) >> and possessive quantifiers for other ways to
+See also C<<< L<< /(?>pattern) >> >>> and possessive quantifiers for
+other ways to
control backtracking. In some cases, the use of C<(*PRUNE)> can be
replaced with a C<< (?>pattern) >> with no functional difference; however,
C<(*PRUNE)> can be used to handle cases that cannot be expressed using a
Author: Mark Jason Dominus, Plover Systems (C<mjd-perl-ref+@plover.com>)
This article originally appeared in I<The Perl Journal>
-( http://www.tpj.com/ ) volume 3, #2. Reprinted with permission.
+( L<http://www.tpj.com/> ) volume 3, #2. Reprinted with permission.
The original title was I<Understand References Today>.
'e' may be specified multiple times. 'replacement' is interpreted
as a double quoted string unless a single-quote (C<'>) is the delimiter.
-C<?pattern?> is like C<m/pattern/> but matches only once. No alternate
+C<m?pattern?> is like C<m/pattern/> but matches only once. No alternate
delimiters can be used. Must be reset with reset().
=head2 SYNTAX
pos Return or set current match position
quotemeta Quote metacharacters
- reset Reset ?pattern? status
+ reset Reset m?pattern? status
study Analyze string for optimizing matching
split Use a regex to split a string into parts
=item *
I<Mastering Regular Expressions> by Jeffrey Friedl
-(F<http://oreilly.com/catalog/9780596528126/>) for a thorough grounding and
+(L<http://oreilly.com/catalog/9780596528126/>) for a thorough grounding and
reference on the topic.
=back
your shell before starting Perl). See the description of the B<-C>
switch for more information.
+=item PERL_USE_UNSAFE_INC
+X<PERL_USE_UNSAFE_INC>
+
+If perl has been configured to not have the current directory in
+L<C<@INC>|perlvar/@INC> by default, this variable can be set to C<"1">
+to reinstate it. It's primarily intended for use while building and
+testing modules that have not been updated to deal with "." not being in
+C<@INC> and should not be set in the environment for day-to-day use.
+
=item SYS$LOGIN (specific to the VMS port)
X<SYS$LOGIN>
Birrell, Andrew D. An Introduction to Programming with
Threads. Digital Equipment Corporation, 1989, DEC-SRC Research Report
#35 online as
-ftp://ftp.dec.com/pub/DEC/SRC/research-reports/SRC-035.pdf
+L<ftp://ftp.dec.com/pub/DEC/SRC/research-reports/SRC-035.pdf>
(highly recommended)
Robbins, Kay. A., and Steven Robbins. Practical Unix Programming: A
implement the Unicode standard or the accompanying technical reports
from cover to cover, Perl does support many Unicode features.
-Also, the use of Unicode may present security issues that aren't obvious.
-Read L<Unicode Security Considerations|http://www.unicode.org/reports/tr36>.
+Also, the use of Unicode may present security issues that aren't
+obvious, see L</Security Implications of Unicode>.
=over 4
identifier names). B<This is the only time when an explicit S<C<use
utf8>> is needed.> (See L<utf8>).
-=item C<BOM>-marked scripts and L<UTF-16|/Unicode Encodings> scripts autodetected
+If a Perl script begins with the bytes that form the UTF-8 encoding of
+the Unicode BYTE ORDER MARK (C<BOM>, see L</Unicode Encodings>), those
+bytes are completely ignored.
+
+=item L<UTF-16|/Unicode Encodings> scripts autodetected
If a Perl script begins with the Unicode C<BOM> (UTF-16LE,
-UTF16-BE, or UTF-8), or if the script looks like non-C<BOM>-marked
+UTF16-BE), or if the script looks like non-C<BOM>-marked
UTF-16 of either endianness, Perl will correctly read in the script as
-the appropriate Unicode encoding. (C<BOM>-less UTF-8 cannot be
-effectively recognized or differentiated from ISO 8859-1 or other
-eight-bit encodings.)
+the appropriate Unicode encoding.
=back
If you use a Unicode editor to edit your program, Unicode characters may
occur directly within the literal strings in UTF-8 encoding, or UTF-16.
-(The former requires a C<BOM> or C<use utf8>, the latter requires a C<BOM>.)
+(The former requires a C<use utf8>, the latter may require a C<BOM>.)
L<perluniintro/Creating Unicode> gives other ways to place non-ASCII
characters in your strings.
Before Unicode, when a character was a byte was a character,
Perl knew only about the 128 characters defined by ASCII, code points 0
-through 127 (except for under S<C<use locale>>). That left the code
+through 127 (except for under L<S<C<use locale>>|perllocale>). That
+left the code
points 128 to 255 as unassigned, and available for whatever use a
program might want. The only semantics they have is their ordinal
numbers, and that they are members of none of the non-negative character
Malformed UTF-8
-Unfortunately, the original specification of UTF-8 leaves some room for
-interpretation of how many bytes of encoded output one should generate
-from one input Unicode character. Strictly speaking, the shortest
-possible sequence of UTF-8 bytes should be generated,
-because otherwise there is potential for an input buffer overflow at
-the receiving end of a UTF-8 connection. Perl always generates the
-shortest length UTF-8, and with warnings on, Perl will warn about
-non-shortest length UTF-8 along with other malformations, such as the
-surrogates, which are not Unicode code points valid for interchange.
+UTF-8 is very structured, so many combinations of bytes are invalid. In
+the past, Perl tried to soldier on and make some sense of invalid
+combinations, but this can lead to security holes, so now, if the Perl
+core needs to process an invalid combination, it will either raise a
+fatal error, or will replace those bytes by the sequence that forms the
+Unicode REPLACEMENT CHARACTER, for which purpose Unicode created it.
+
+Every code point can be represented by more than one possible
+syntactically valid UTF-8 sequence. Early on, both Unicode and Perl
+considered any of these to be valid, but now, all sequences longer
+than the shortest possible one are considered to be malformed.
+
+Unicode considers many code points to be illegal, or to be avoided.
+Perl generally accepts them, once they have passed through any input
+filters that may try to exclude them. These have been discussed above
+(see "Surrogates" under UTF-16 in L</Unicode Encodings>,
+L</Noncharacter code points>, and L</Beyond Unicode code points>).
=item *
SV * const src = POPs;
const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET;
SV * ret;
- UV retuv = 0;
- STRLEN offset;
+ UV retuv;
+ STRLEN offset = 0;
+ char errflags = 0;
/* extract a STRLEN-ranged integer value from offsetsv into offset,
- * or die trying */
+ * or flag that its out of range */
{
IV iv = SvIV(offsetsv);
/* avoid a large UV being wrapped to a negative value */
- if (SvIOK_UV(offsetsv) && SvUVX(offsetsv) > (UV)IV_MAX) {
- if (!lvalue)
- goto return_val; /* out of range: return 0 */
- Perl_croak_nocontext("Out of memory!");
- }
-
- if (iv < 0) {
- if (!lvalue)
- goto return_val; /* out of range: return 0 */
- Perl_croak_nocontext("Negative offset to vec in lvalue context");
- }
-
+ if (SvIOK_UV(offsetsv) && SvUVX(offsetsv) > (UV)IV_MAX)
+ errflags = 4; /* out of range */
+ else if (iv < 0)
+ errflags = (1|4); /* negative offset, out of range */
#if PTRSIZE < IVSIZE
- if (iv > Size_t_MAX) {
- if (!lvalue)
- goto return_val; /* out of range: return 0 */
- Perl_croak_nocontext("Out of memory!");
- }
+ else if (iv > Size_t_MAX)
+ errflags = 4; /* out of range */
#endif
-
- offset = (STRLEN)iv;
+ else
+ offset = (STRLEN)iv;
}
- retuv = do_vecget(src, offset, size);
-
- return_val:
+ retuv = errflags ? 0 : do_vecget(src, offset, size);
if (lvalue) { /* it's an lvalue! */
ret = sv_2mortal(newSV_type(SVt_PVLV)); /* Not TARG RT#67838 */
LvTARG(ret) = SvREFCNT_inc_simple(src);
LvTARGOFF(ret) = offset;
LvTARGLEN(ret) = size;
+ LvFLAGS(ret) = errflags;
}
else {
dTARGET;
ret = TARG;
}
-
sv_setuv(ret, retuv);
if (!lvalue)
SvSETMAGIC(ret);
return TRUE;
}
+/* Return NULL if the file doesn't exist or isn't a file;
+ * else return PerlIO_openn().
+ */
STATIC PerlIO *
S_check_type_and_open(pTHX_ SV *name)
return retio;
}
+/* doopen_pm(): return the equivalent of PerlIO_openn() on the given name,
+ * but first check for bad names (\0) and non-files.
+ * Also if the filename ends in .pm and unless PERL_DISABLE_PMC,
+ * try loading Foo.pmc first.
+ */
#ifndef PERL_DISABLE_PMC
STATIC PerlIO *
S_doopen_pm(pTHX_ SV *name)
# define doopen_pm(name) check_type_and_open(name)
#endif /* !PERL_DISABLE_PMC */
-/* require doesn't search for absolute names, or when the name is
- explicitly relative the current directory */
+/* require doesn't search in @INC for absolute names, or when the name is
+ explicitly relative the current directory: i.e. ./, ../ */
PERL_STATIC_INLINE bool
S_path_is_searchable(const char *name)
{
int vms_unixname = 0;
char *unixdir;
#endif
+ /* tryname is the actual pathname (with @INC prefix) which was loaded.
+ * It's stored as a value in %INC, and used for error messages */
const char *tryname = NULL;
- SV *namesv = NULL;
+ SV *namesv = NULL; /* SV equivalent of tryname */
const U8 gimme = GIMME_V;
int filter_has_file = 0;
PerlIO *tryrsfp = NULL;
"Compilation failed in require", unixname);
}
+ /*XXX OPf_KIDS should always be true? -dapm 4/2017 */
if (PL_op->op_flags & OPf_KIDS) {
SVOP * const kid = (SVOP*)cUNOP->op_first;
if (kid->op_type == OP_CONST && (kid->op_private & OPpCONST_BARE)) {
- /* require foo (or use foo) with a bareword.
- Perl_load_module fakes up the identical optree, but its
- arguments aren't restricted by the parser to real barewords.
- */
+ /* Make sure that a bareword module name (e.g. ::Foo::Bar)
+ * doesn't map to a naughty pathname like /Foo/Bar.pm.
+ * Note that the parser will normally detect such errors
+ * at compile time before we reach here, but
+ * Perl_load_module() can fake up an identical optree
+ * without going near the parser, and being able to put
+ * anything as the bareword. So we include a duplicate set
+ * of checks here at runtime.
+ */
const STRLEN package_len = len - 3;
const char slashdot[2] = {'/', '.'};
#ifdef DOSISH
PERL_DTRACE_PROBE_FILE_LOADING(unixname);
- /* prepare to compile file */
+ /* Try to locate and open a file, possibly using @INC */
+ /* with "/foo/bar.pm", "./foo.pm" and "../foo/bar.pm", try to load
+ * the file directly rather than via @INC ... */
if (!path_searchable) {
/* At this point, name is SvPVX(sv) */
tryname = name;
tryrsfp = doopen_pm(sv);
}
+
+ /* ... but if we fail, still search @INC for code references;
+ * these are applied even on on-searchable paths (except
+ * if we got EACESS).
+ *
+ * For searchable paths, just search @INC normally
+ */
if (!tryrsfp && !(errno == EACCES && !path_searchable)) {
AV * const ar = GvAVn(PL_incgv);
SSize_t i;
filter_sub = NULL;
}
}
- else {
- if (path_searchable) {
+ else if (path_searchable) {
+ /* match against a plain @INC element (non-searchable
+ * paths are only matched against refs in @INC) */
const char *dir;
STRLEN dirlen;
*/
break;
}
- }
}
}
}
}
+
+ /* at this point we've ether opened a file (tryrsfp) or set errno */
+
saved_errno = errno; /* sv_2mortal can realloc things */
sv_2mortal(namesv);
if (!tryrsfp) {
+ /* we failed; croak if require() or return undef if do() */
if (op_is_require) {
if(saved_errno == EMFILE || saved_errno == EACCES) {
/* diag_listed_as: Can't locate %s */
DIE(aTHX_ "Can't locate %s: %s: %s",
name, tryname, Strerror(saved_errno));
} else {
- if (namesv) { /* did we lookup @INC? */
+ if (path_searchable) { /* did we lookup @INC? */
AV * const ar = GvAVn(PL_incgv);
SSize_t i;
SV *const msg = newSVpvs_flags("", SVs_TEMP);
SV *const inc = newSVpvs_flags("", SVs_TEMP);
+ const char *e = name + len - 3; /* possible .pm */
for (i = 0; i <= AvFILL(ar); i++) {
sv_catpvs(inc, " ");
sv_catsv(inc, *av_fetch(ar, i, TRUE));
}
- if (len >= 4 && memEQ(name + len - 3, ".pm", 4)) {
- const char *c, *e = name + len - 3;
- sv_catpv(msg, " (you may need to install the ");
- for (c = name; c < e; c++) {
- if (*c == '/') {
- sv_catpvs(msg, "::");
- }
- else {
- sv_catpvn(msg, c, 1);
- }
- }
- sv_catpv(msg, " module)");
+ if (e > name && _memEQs(e, ".pm")) {
+ const char *c;
+ bool utf8 = cBOOL(SvUTF8(sv));
+
+ /* if the filename, when converted from "Foo/Bar.pm"
+ * form back to Foo::Bar form, makes a valid
+ * package name (i.e. parseable by C<require
+ * Foo::Bar>), then emit a hint.
+ *
+ * this loop is modelled after the one in
+ S_parse_ident */
+ c = name;
+ while (c < e) {
+ if (utf8 && isIDFIRST_utf8_safe(c, e)) {
+ c += UTF8SKIP(c);
+ while (c < e && isIDCONT_utf8_safe(
+ (const U8*) c, (const U8*) e))
+ c += UTF8SKIP(c);
+ }
+ else if (isWORDCHAR_A(*c)) {
+ while (c < e && isWORDCHAR_A(*c))
+ c++;
+ }
+ else if (*c == '/')
+ c++;
+ else
+ break;
+ }
+
+ if (c == e && isIDFIRST_lazy_if_safe(name, e, utf8)) {
+ sv_catpv(msg, " (you may need to install the ");
+ for (c = name; c < e; c++) {
+ if (*c == '/') {
+ sv_catpvs(msg, "::");
+ }
+ else {
+ sv_catpvn(msg, c, 1);
+ }
+ }
+ sv_catpv(msg, " module)");
+ }
}
else if (len >= 2 && memEQ(name + len - 2, ".h", 3)) {
sv_catpv(msg, " (change .h to .ph maybe?) (did you run h2ph?)");
Stat_t st;
PerlIO *io = NULL;
dSAVE_ERRNO;
- /* the complication is to match the logic from doopen_pm() so we don't treat do "sda1" as
- a previously successful "do".
+ /* the complication is to match the logic from doopen_pm() so
+ * we don't treat do "sda1" as a previously successful "do".
*/
bool do_warn = namesv && ckWARN_d(WARN_DEPRECATED)
&& PerlLIO_stat(name, &st) == 0 && !S_ISDIR(st.st_mode) && !S_ISBLK(st.st_mode)
RESTORE_ERRNO;
if (do_warn) {
- Perl_warner(aTHX_ packWARN(WARN_DEPRECATED), "do \"%s\" failed, '.' is no longer in @INC", name);
+ Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
+ "do \"%s\" failed, '.' is no longer in @INC; "
+ "did you mean do \"./%s\"?",
+ name, name);
}
#endif
CLEAR_ERRSV();
else
SETERRNO(0, SS_NORMAL);
- /* Assume success here to prevent recursive requirement. */
+ /* Update %INC. Assume success here to prevent recursive requirement. */
/* name is never assigned to again, so len is still strlen(name) */
/* Check whether a hook in @INC has already filled %INC */
if (!hook_sv) {
unixname, unixlen, SvREFCNT_inc_simple(hook_sv), 0 );
}
+ /* Now parse the file */
+
old_savestack_ix = PL_savestack_ix;
SAVECOPFILE_FREE(&PL_compiling);
CopFILE_set(&PL_compiling, tryname);
* 79a7216aceb1d291f2857085545fdda289518bc540a09bc0a15cde105d76028d lib/unicore/mktables
* cdecb300baad839a6f62791229f551a4fa33f3cbdca08e378dc976466354e778 lib/unicore/version
* 913d2f93f3cb6cdf1664db888bf840bc4eb074eef824e082fceda24a9445e60c regen/charset_translations.pl
- * 1d27ae8b75d81a082b1fc594673e08540280f8169309a7b5047015c8091a2bfb regen/regcharclass.pl
+ * c468aea5062ef84422219d74e83b6f3216f2823544b445f53ee1af71deeb2044 regen/regcharclass.pl
* 393f8d882713a3ba227351ad0f00ea4839fda74fcf77dcd1cdf31519925adba5 regen/regcharclass_multi_char_folds.pl
* ex: set ro: */
* literal string, or when it's the first thing after
* something like "\b" */
if (len || (p > RExC_start && isALPHA_A(*(p -1)))) {
- RExC_parse = p + 1;
- vFAIL("Unescaped left brace in regex is illegal here");
+
+ /* GNU Autoconf is depended on by a lot of code, and
+ * can't seem to release a new version that avoids the
+ * deprecation now made fatal. (A commit to do so has
+ * been in its repository since early 2013; only one
+ * pattern is affected.) As a work-around, don't
+ * fatalize this if the pattern being compiled is the
+ * precise one that trips up Autoconf. See [perl
+ * #130497] for more details. */
+ if (memNEs(RExC_start, RExC_end - RExC_start,
+ "\\${[^\\}]*}"))
+ {
+ RExC_parse = p + 1;
+ vFAIL("Unescaped left brace in regex is "
+ "illegal here");
+ }
+ if (PASS2) {
+ ckWARNregdep(p + 1,
+ "Unescaped left brace in regex is "
+ "deprecated here (and will be fatal "
+ "in Perl 5.30), passed through");
+ }
}
goto normal_default;
case '}':
require './regen/regen_lib.pl';
require './regen/charset_translations.pl';
-require "regen/regcharclass_multi_char_folds.pl";
+require "./regen/regcharclass_multi_char_folds.pl";
=head1 NAME
The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
buffer, unlike C<undef $sv>.
-Introduced in perl 5.26.0.
+Introduced in perl 5.25.12.
=cut
*/
SV* xlv_targ;
char xlv_type; /* k=keys .=pos x=substr v=vec /=join/re
* y=alem/helem/iter t=tie T=tied HE */
- char xlv_flags; /* 1 = negative offset 2 = negative len */
+ char xlv_flags; /* 1 = negative offset 2 = negative len
+ 4 = out of range (vec) */
};
#define xlv_targoff xlv_targoff_u.xlvu_targoff
Like C<SvPV_nolen> but doesn't process magic.
=for apidoc Am|IV|SvIV|SV* sv
-Coerces the given SV to an integer and returns it. See C<L</SvIVx>> for a
-version which guarantees to evaluate C<sv> only once.
+Coerces the given SV to IV and returns it. The returned value in many
+circumstances will get stored in C<sv>'s IV slot, but not in all cases. (Use
+C<L</sv_setiv>> to make sure it does).
+
+See C<L</SvIVx>> for a version which guarantees to evaluate C<sv> only once.
=for apidoc Am|IV|SvIV_nomg|SV* sv
Like C<SvIV> but doesn't process magic.
=for apidoc Am|IV|SvIVx|SV* sv
-Coerces the given SV to an integer and returns it.
-Guarantees to evaluate C<sv> only once. Only use
-this if C<sv> is an expression with side effects,
-otherwise use the more efficient C<SvIV>.
+Coerces the given SV to IV and returns it. The returned value in many
+circumstances will get stored in C<sv>'s IV slot, but not in all cases. (Use
+C<L</sv_setiv>> to make sure it does).
+
+This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
+expression with side effects, otherwise use the more efficient C<SvIV>.
=for apidoc Am|NV|SvNV|SV* sv
-Coerce the given SV to a double and return it. See C<L</SvNVx>> for a version
-which guarantees to evaluate C<sv> only once.
+Coerces the given SV to NV and returns it. The returned value in many
+circumstances will get stored in C<sv>'s NV slot, but not in all cases. (Use
+C<L</sv_setnv>> to make sure it does).
+
+See C<L</SvNVx>> for a version which guarantees to evaluate C<sv> only once.
=for apidoc Am|NV|SvNV_nomg|SV* sv
Like C<SvNV> but doesn't process magic.
=for apidoc Am|NV|SvNVx|SV* sv
-Coerces the given SV to a double and returns it.
-Guarantees to evaluate C<sv> only once. Only use
-this if C<sv> is an expression with side effects,
-otherwise use the more efficient C<SvNV>.
+Coerces the given SV to NV and returns it. The returned value in many
+circumstances will get stored in C<sv>'s NV slot, but not in all cases. (Use
+C<L</sv_setnv>> to make sure it does).
+
+This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
+expression with side effects, otherwise use the more efficient C<SvNV>.
=for apidoc Am|UV|SvUV|SV* sv
-Coerces the given SV to an unsigned integer and returns it. See C<L</SvUVx>>
-for a version which guarantees to evaluate C<sv> only once.
+Coerces the given SV to UV and returns it. The returned value in many
+circumstances will get stored in C<sv>'s UV slot, but not in all cases. (Use
+C<L</sv_setuv>> to make sure it does).
+
+See C<L</SvUVx>> for a version which guarantees to evaluate C<sv> only once.
=for apidoc Am|UV|SvUV_nomg|SV* sv
Like C<SvUV> but doesn't process magic.
=for apidoc Am|UV|SvUVx|SV* sv
-Coerces the given SV to an unsigned integer and
-returns it. Guarantees to evaluate C<sv> only once. Only
-use this if C<sv> is an expression with side effects,
-otherwise use the more efficient C<SvUV>.
+Coerces the given SV to UV and returns it. The returned value in many
+circumstances will get stored in C<sv>'s UV slot, but not in all cases. (Use
+C<L</sv_setuv>> to make sure it does).
+
+This form guarantees to evaluate C<sv> only once. Only use this if C<sv> is an
+expression with side effects, otherwise use the more efficient C<SvUV>.
=for apidoc Am|bool|SvTRUE|SV* sv
Returns a boolean indicating whether Perl would evaluate the SV as true or
'../dist/Unicode-Normalize' => 1,
);
+# temporary workaround Apr 2017. These need '.' in @INC.
+# Ideally this # list will eventually be empty
+
+my %temp_needs_dot = map { $_ => 1 } qw(
+ ../cpan/ExtUtils-Install
+ ../cpan/Filter-Util-Call
+ ../cpan/libnet
+ ../cpan/Locale-Codes
+ ../cpan/Math-BigInt
+ ../cpan/Math-BigRat
+ ../cpan/Test-Harness
+ ../cpan/Test-Simple
+ ../cpan/version
+);
+
+
# delete env vars that may influence the results
# but allow override via *_TEST env var if wanted
# (e.g. PERL5OPT_TEST=-d:NYTProf)
if ($temp_no_core{$run_dir}) {
$testswitch = $testswitch . ',NC';
}
+ if($temp_needs_dot{$run_dir}) {
+ $testswitch = $testswitch . ',DOT';
+ }
}
} elsif ($test =~ m!^\.\./lib!) {
$testswitch = '-I.. -MTestInit=U1'; # -T will remove . from @INC
do "./dounknown";
unlink "dounknown";
EXPECT
-do "dounknown" failed, '.' is no longer in @INC at - line 3.
+do "dounknown" failed, '.' is no longer in @INC; did you mean do "./dounknown" at - line 3.
# Locales whose name differs if the utf8 bit is on are stored in these two
# files with appropriate encodings.
if ($^H & 0x08 || (${^OPEN} || "") =~ /:utf8/) {
- @Data = do "lib/locale/utf8";
+ @Data = do "./lib/locale/utf8";
} else {
- @Data = do "lib/locale/latin1";
+ @Data = do "./lib/locale/latin1";
}
# The rest of the locales are in this file.
# generating an extreme range triggered a croak, which if caught,
# left the temps stack small but with a very large PL_tmps_max
-fresh_perl_like(<<'EOF', qr/\Aok 1 ok 2\Z/, {}, "RT #130841");
+SKIP: {
+ skip 'mem wrap check disabled' unless $Config{usemallocwrap};
+ fresh_perl_like(<<'EOF', qr/\Aok 1 ok 2\Z/, {}, "RT #130841");
my $max_iv = (~0 >> 1);
eval {
my @range = 1..($max_iv - 1);
print " unexpected sum: [$sum]; expected: [$exp]";
}
EOF
-
+}
use strict;
use warnings;
-plan(tests => 27);
+plan(tests => 54);
my $nonfile = tempfile();
"correct error message for require '$file'";
}
-eval "require $nonfile";
+# Check that the "(you may need to install..) hint is included in the
+# error message where (and only where) appropriate.
+#
+# Basically the hint should be issued for any filename where converting
+# back from Foo/Bar.pm to Foo::Bar gives you a legal bare word which could
+# follow "require" in source code.
+
+{
+
+ # may be any letter of an identifier
+ my $I = "\x{393}"; # "\N{GREEK CAPITAL LETTER GAMMA}"
+ # Continuation char: may only be 2nd+ letter of an identifier
+ my $C = "\x{387}"; # "\N{GREEK ANO TELEIA}"
+
+ for my $test_data (
+ # thing to require pathname in err mesg err includes hint?
+ [ "No::Such::Module1", "No/Such/Module1.pm", 1 ],
+ [ "'No/Such/Module1.pm'", "No/Such/Module1.pm", 1 ],
+ [ "_No::Such::Module1", "_No/Such/Module1.pm", 1 ],
+ [ "'_No/Such/Module1.pm'", "_No/Such/Module1.pm", 1 ],
+ [ "'No/Such./Module.pm'", "No/Such./Module.pm", 0 ],
+ [ "No::1Such::Module", "No/1Such/Module.pm", 1 ],
+ [ "'No/1Such/Module.pm'", "No/1Such/Module.pm", 1 ],
+ [ "1No::Such::Module", undef, 0 ],
+ [ "'1No/Such/Module.pm'", "1No/Such/Module.pm", 0 ],
+
+ # utf8 variants
+ [ "No::Such${I}::Module1", "No/Such${I}/Module1.pm", 1 ],
+ [ "'No/Such${I}/Module1.pm'", "No/Such${I}/Module1.pm", 1 ],
+ [ "_No::Such${I}::Module1", "_No/Such${I}/Module1.pm", 1 ],
+ [ "'_No/Such${I}/Module1.pm'", "_No/Such${I}/Module1.pm", 1 ],
+ [ "'No/Such${I}./Module.pm'", "No/Such${I}./Module.pm", 0 ],
+ [ "No::1Such${I}::Module", "No/1Such${I}/Module.pm", 1 ],
+ [ "'No/1Such${I}/Module.pm'", "No/1Such${I}/Module.pm", 1 ],
+ [ "1No::Such${I}::Module", undef, 0 ],
+ [ "'1No/Such${I}/Module.pm'", "1No/Such${I}/Module.pm", 0 ],
+
+ # utf8 with continuation char in 1st position
+ [ "No::${C}Such::Module1", undef, 0 ],
+ [ "'No/${C}Such/Module1.pm'", "No/${C}Such/Module1.pm", 0 ],
+ [ "_No::${C}Such::Module1", undef, 0 ],
+ [ "'_No/${C}Such/Module1.pm'", "_No/${C}Such/Module1.pm", 0 ],
+ [ "'No/${C}Such./Module.pm'", "No/${C}Such./Module.pm", 0 ],
+ [ "No::${C}1Such::Module", undef, 0 ],
+ [ "'No/${C}1Such/Module.pm'", "No/${C}1Such/Module.pm", 0 ],
+ [ "1No::${C}Such::Module", undef, 0 ],
+ [ "'1No/${C}Such/Module.pm'", "1No/${C}Such/Module.pm", 0 ],
+
+ ) {
+ my ($require_arg, $err_path, $has_hint) = @$test_data;
+
+ my $exp;
+ if (defined $err_path) {
+ $exp = "Can't locate $err_path in \@INC";
+ if ($has_hint) {
+ my $hint = $err_path;
+ $hint =~ s{/}{::}g;
+ $hint =~ s/\.pm$//;
+ $exp .= " (you may need to install the $hint module)";
+ }
+ $exp .= " (\@INC contains: @INC) at";
+ }
+ else {
+ # undef implies a require which doesn't compile,
+ # rather than one which triggers a run-time error.
+ # We'll set exp to a suitable value later;
+ $exp = "";
+ }
+
+ my $err;
+ {
+ no warnings qw(syntax utf8);
+ if ($require_arg =~ /[^\x00-\xff]/) {
+ eval "require $require_arg";
+ $err = $@;
+ utf8::decode($err);
+ }
+ else {
+ eval "require $require_arg";
+ $err = $@;
+ }
+ }
+
+ for ($err, $exp, $require_arg) {
+ s/([^\x00-\xff])/sprintf"\\x{%x}",ord($1)/ge;
+ }
+ if (length $exp) {
+ $exp = qr/^\Q$exp\E/;
+ }
+ else {
+ $exp = qr/syntax error at|Unrecognized character/;
+ }
+ like $err, $exp,
+ "err for require $require_arg";
+ }
+}
+
-like $@, qr/^Can't locate $nonfile\.pm in \@INC \(you may need to install the $nonfile module\) \(\@INC contains: @INC\) at/,
- "correct error message for require $nonfile";
eval "require ::$nonfile";
eval { do "" };
like $@, qr/^Missing or undefined argument to do /;
+
+# non-searchable pathnames shouldn't mention @INC in the error
+
+my $nonsearch = "./no_such_file.pm";
+
+eval "require \"$nonsearch\"";
+
+like $@, qr/^Can't locate \Q$nonsearch\E at/,
+ "correct error message for require $nonsearch";
use Config;
-plan(tests => 74);
+plan(tests => 78);
is(vec($foo,0,1), 0);
}
}
}
+
+# RT #131083 maybe-lvalue out of range should only croak if assigned to
+
+{
+ sub RT131083 { if ($_[0]) { $_[1] = 1; } $_[1]; }
+ my $s = "abc";
+ my $off = -1;
+ my $v = RT131083(0, vec($s, $off, 8));
+ is($v, 0, "RT131083 rval -1");
+ $v = eval { RT131083(1, vec($s, $off, 8)); };
+ like($@, qr/Negative offset to vec in lvalue context/, "RT131083 lval -1");
+
+ $off = ~0;
+ my $v = RT131083(0, vec($s, $off, 8));
+ is($v, 0, "RT131083 rval ~0");
+ $v = eval { RT131083(1, vec($s, $off, 8)); };
+ like($@, qr/Out of memory!/, "RT131083 lval ~0");
+}
# run Porting/bench.pl's selftest
-BEGIN {
- @INC = '..' if -f '../TestInit.pm';
-}
-use TestInit qw(T A); # T is chdir to the top level, A makes paths absolute
use strict;
+chdir '..' if -f 'test.pl' && -f 'thread_it.pl';
require './t/test.pl';
-my $source = find_git_or_skip('all');
-chdir $source or die "Can't chdir to $source: $!";
-system "$^X Porting/bench.pl --action=selftest";
+system "$^X -I. -MTestInit Porting/bench.pl --action=selftest";
=cut
-BEGIN {
- unshift @INC, '.' if -f 'TestInit.pm';
-}
-use TestInit;
use strict;
use Config;
-BEGIN { require 'test.pl' }
+BEGIN { require './test.pl' }
if ( $Config{usecrosscompile} ) {
skip_all( "Not all files are available during cross-compilation" );
Test::Harness cpan/Test-Harness/lib/Test/Harness.pm da2d76ba673372da129060c9d0adb8cf0d91f9f7
Test::Simple cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t 59648b5745fda06177d81c2c21f55b09f6e129bb
autodie cpan/autodie/t/mkdir.t 9e70d2282a3cc7d76a78bf8144fccba20fb37dac
-base dist/base/lib/base.pm 9575442273694d41c8e86cb1d86fa1935a07c8a8
version cpan/version/lib/version.pm a032a751524bdd07a93c945d2a1703abe7ad8ef0
Algorithm::C3
Algorithm::Permute
AnyEvent
+Apache::DProf
Apache::MP3
+Apache::SmallProf
Archive::Extract
Array::Base
atan2(3)
DBIx::Profile
dbm(3)
dbm_open(3)
+Devel::Apache::Profiler
Devel::CallParser
Devel::Callsite
Devel::Cover
Devel::DTrace::Provider
Devel::InnerPackage
Devel::NYTProf
+Devel::NYTProf::Apache
Devel::PPPort
Devel::SawAmpersand
Devel::Spy
'/.{/' => 'Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through {#} m/.{{#}/',
'/[x]{/' => 'Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through {#} m/[x]{{#}/',
'/\p{Latin}{/' => 'Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through {#} m/\p{Latin}{{#}/',
+ '/\\${[^\\}]*}/' => 'Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through {#} m/\\${{#}[^\\}]*}/',
);
for my $strict ("", "use re 'strict';") {
BEGIN {@INC = '../lib'}
use strict;
require HTTP::Tiny;
- do "run/dtrace.pl";
+ do "./run/dtrace.pl";
PERL_SCRIPT
<< 'D_SCRIPT',
loading-file { printf("loading-file <%s>\n", copyinstr(arg0)) }
skip_all_without_config('d_fork');
}
-plan tests => 104;
+plan tests => 106;
my $STDOUT = tempfile();
my $STDERR = tempfile();
delete $ENV{PERLLIB};
delete $ENV{PERL5LIB};
delete $ENV{PERL5OPT};
+delete $ENV{PERL_USE_UNSAFE_INC};
# Run perl with specified environment and arguments, return (STDOUT, STDERR)
delete $ENV{PERLLIB};
delete $ENV{PERL5LIB};
delete $ENV{PERL5OPT};
+ delete $ENV{PERL_USE_UNSAFE_INC};
my $pid = fork;
return (0, "Couldn't fork: $!") unless defined $pid; # failure
if ($pid) { # parent
my @default_inc = split /\n/, $out;
+SKIP: {
+ skip_if_miniperl("under miniperl", 3);
if ($Config{default_inc_excludes_dot}) {
ok !(grep { $_ eq '.' } @default_inc), '. is not in @INC';
+ ($out, $err) = runperl_and_capture({ PERL_USE_UNSAFE_INC => 1 }, [@dump_inc]);
+
+ is ($err, '', 'No errors when determining unsafe @INC');
+
+ my @unsafe_inc = split /\n/, $out;
+
+ ok (eq_array([@unsafe_inc], [@default_inc, '.']), '. last in unsafe @INC')
+ or diag 'Unsafe @INC is: ', @unsafe_inc;
}
else {
is ($default_inc[-1], '.', '. is last in @INC');
+ skip('Not testing unsafe @INC when it includes . by default', 2);
+}
}
my $sep = $Config{path_sep};
die "Can't figure out which test to run from filename '$caller'"
unless $caller =~ m!((?:op|re)/[-_a-z0-9A-Z]+)_thr\.t\z!;
-my $file = "$1.t";
+my $file = "./$1.t";
$::running_as_thread = "running tests in a new thread";
require $file;
print("1..0 # miniperl: no Unicode::Normalize");
exit(0);
}
- require "uni/case.pl";
+ require "./uni/case.pl";
}
use feature 'unicode_strings';
print("1..0 # miniperl: no Unicode::Normalize");
exit(0);
}
- require "uni/case.pl";
+ require "./uni/case.pl";
}
use feature 'unicode_strings';
print("1..0 # miniperl: no Unicode::Normalize");
exit(0);
}
- require "uni/case.pl";
+ require "./uni/case.pl";
}
use feature 'unicode_strings';
*
*/
+#ifndef PERL_UTIL_H_
+#define PERL_UTIL_H_
+
+
#ifdef VMS
# define PERL_FILE_IS_ABSOLUTE(f) \
(*(f) == '/' \
((char *) memmem(big, bigend - big, little, lend - little))
#endif
+#endif /* PERL_UTIL_H_ */
+
/*
* ex: set ts=8 sts=4 sw=4 et:
*/
$Net::Config::CONFIGURE = 1; # Suppress load of user overrides
if( -f $libnet_cfg_in )
{
- %oldcfg = ( %{ do $libnet_cfg_in } );
+ %oldcfg = ( %{ local @INC = '.'; do $libnet_cfg_in } );
}
elsif (eval { require Net::Config })
{
extra.pods : miniperl
@ @extra_pods.com
-PERLDELTA_CURRENT = [.pod]perl52511delta.pod
+PERLDELTA_CURRENT = [.pod]perl52512delta.pod
$(PERLDELTA_CURRENT) : [.pod]perldelta.pod
Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER := \5.25.11
+#INST_VER := \5.25.12
#
# 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\perl52511delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl52512delta.pod
$(MINIPERL) -I..\lib $(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 \
- perl52511delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl52512delta.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 \
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER = \5.25.11
+#INST_VER = \5.25.12
#
# 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\perl52511delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl52512delta.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 \
- perl52511delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl52512delta.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 \
my $bs = $file;
$bs =~ s/(\.\w+)?(;\d*)?$/\.bs/;
if (-s $bs) { # only read file if it's not empty
+ local @INC = ('.');
do $bs;
warn "$bs: $@\n" if $@;
}
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER *= \5.25.11
+#INST_VER *= \5.25.12
#
# 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\perl52511delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl52512delta.pod
$(MINIPERL) -I..\lib $(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 \
- perl52511delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl52512delta.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 \
perl5250delta.pod \
perl52510delta.pod \
perl52511delta.pod \
+ perl52512delta.pod \
perl5251delta.pod \
perl5252delta.pod \
perl5253delta.pod \
perl5250delta.man \
perl52510delta.man \
perl52511delta.man \
+ perl52512delta.man \
perl5251delta.man \
perl5252delta.man \
perl5253delta.man \
perl5250delta.html \
perl52510delta.html \
perl52511delta.html \
+ perl52512delta.html \
perl5251delta.html \
perl5252delta.html \
perl5253delta.html \
perl5250delta.tex \
perl52510delta.tex \
perl52511delta.tex \
+ perl52512delta.tex \
perl5251delta.tex \
perl5252delta.tex \
perl5253delta.tex \