perl.perl5.changes http://www.nntp.perl.org/group/perl.perl5.changes/ ... Copyright 1998-2014 perl.org Thu, 21 Aug 2014 11:45:20 +0000 ask@perl.org [perl.git] branch blead, updated. v5.21.3-30-g1b66bb7 by Chris 'Bingos' Williams In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/1b66bb7481f41f0a02c43aaf233bbf0d74464732?hp=46a97ad77cd8b57de2b0ec11fe6248552fc7aa4f&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 1b66bb7481f41f0a02c43aaf233bbf0d74464732<br/>Author: Chris &#39;BinGOs&#39; Williams &lt;chris@bingosnet.co.uk&gt;<br/>Date: Thu Aug 21 10:50:39 2014 +0100<br/><br/> Module-CoreList CPAN version synchronisation<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> Porting/Maintainers.pl | 2 +-<br/> 1 file changed, 1 insertion(+), 1 deletion(-)<br/><br/>diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl<br/>index ef3efbc..8527987 100755<br/>--- a/Porting/Maintainers.pl<br/>+++ b/Porting/Maintainers.pl<br/>@@ -788,7 +788,7 @@ use File::Glob qw(:case);<br/> },<br/> <br/> &#39;Module::CoreList&#39; =&gt; {<br/>- &#39;DISTRIBUTION&#39; =&gt; &#39;BINGOS/Module-CoreList-5.021002.tar.gz&#39;,<br/>+ &#39;DISTRIBUTION&#39; =&gt; &#39;BINGOS/Module-CoreList-5.021003.tar.gz&#39;,<br/> &#39;FILES&#39; =&gt; q[dist/Module-CoreList],<br/> },<br/> <br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41684.html Thu, 21 Aug 2014 09:50:56 +0000 [perl.git] branch maint-5.20, updated. v5.20.0-122-g4a81ada by Steve Hay In perl.git, the branch maint-5.20 has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/4a81ada0571deb0bf7bdc13b487d9c64275e797a?hp=22b1fa3d1f05ba6fb151399c8dbc8a6e2d9be89c&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 4a81ada0571deb0bf7bdc13b487d9c64275e797a<br/>Author: Chris &#39;BinGOs&#39; Williams &lt;chris@bingosnet.co.uk&gt;<br/>Date: Wed Aug 13 22:39:19 2014 +0100<br/><br/> Remove compiler warning spam on dos-djgpp<br/> <br/> (cherry picked from commit 1d8d63dcc3ec46dd8a437dab18cca3fb42880079)<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> hints/dos_djgpp.sh | 6 +++---<br/> 1 file changed, 3 insertions(+), 3 deletions(-)<br/><br/>diff --git a/hints/dos_djgpp.sh b/hints/dos_djgpp.sh<br/>index 2b032cd..8f5fa33 100644<br/>--- a/hints/dos_djgpp.sh<br/>+++ b/hints/dos_djgpp.sh<br/>@@ -41,10 +41,10 @@ startperl=&#39;#!perl&#39;<br/> case &quot;X$optimize&quot; in<br/> X)<br/> case `gcc -v 2&gt;&amp;1|grep &quot;gcc version&quot;` in<br/>- &quot;gcc version 3.&quot;*)<br/>- optimize=&quot;-O2 -falign-loops=2 -falign-jumps=2 -falign-functions=2&quot; ;;<br/>- *)<br/>+ &quot;gcc version 1.&quot;*|&quot;gcc version 2.&quot;*)<br/> optimize=&quot;-O2 -malign-loops=2 -malign-jumps=2 -malign-functions=2&quot; ;;<br/>+ *)<br/>+ optimize=&quot;-O2 -falign-loops=2 -falign-jumps=2 -falign-functions=2&quot; ;;<br/> esac<br/> ldflags=&#39;-s&#39;<br/> ;;<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41683.html Thu, 21 Aug 2014 08:12:29 +0000 [perl.git] branch blead, updated. v5.21.3-29-g46a97ad by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/46a97ad77cd8b57de2b0ec11fe6248552fc7aa4f?hp=785ad2a807d699e19eeaa0991b88b07cc4a91bd4&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 46a97ad77cd8b57de2b0ec11fe6248552fc7aa4f<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Thu Aug 21 01:39:04 2014 -0400<br/><br/> Epigraph for 5.21.3<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> Porting/epigraphs.pod | 13 +++++++++++++<br/> 1 file changed, 13 insertions(+)<br/><br/>diff --git a/Porting/epigraphs.pod b/Porting/epigraphs.pod<br/>index 20f4230..1503486 100644<br/>--- a/Porting/epigraphs.pod<br/>+++ b/Porting/epigraphs.pod<br/>@@ -17,6 +17,19 @@ Consult your favorite dictionary for details.<br/> <br/> =head1 EPIGRAPHS<br/> <br/>+=head2 v5.21.3 - Robert Service, The Men that Don&#39;t Fit In<br/>+<br/>+L&lt;Announced on 2014-08-20 by Peter Martini|http://www.nntp.perl.org/group/perl.perl5.porters/2014/08/msg218826.html&gt;<br/>+<br/>+ If they just went straight they might go far,<br/>+ They are strong and brave and true;<br/>+ But they&#39;re always tired of the things that are,<br/>+ And they want the strange and new.<br/>+ They say: &quot;Could I find my proper groove,<br/>+ What a deep mark I would make!&quot;<br/>+ So they chop and change, and each fresh move<br/>+ Is only a fresh mistake.<br/>+<br/> =head2 v5.21.2 - Neil Armstrong, Buzz Aldrin, Charlie Duke, Final minutes of communication of the first manned moon landing, July 20, 1969.<br/> <br/> L&lt;Announced on 2014-07-20 by Abigail|http://www.nntp.perl.org/group/perl.perl5.porters/2014/07/msg217937.html&gt;<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41682.html Thu, 21 Aug 2014 05:47:10 +0000 [perl.git] annotated tag v5.21.3, created. v5.21.3 by Peter Martini In perl.git, the annotated tag v5.21.3 has been created<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/21c12d1b86e35e049571f658e86901ff9cc7f0a7?hp=0000000000000000000000000000000000000000&gt;<br/><br/> at 21c12d1b86e35e049571f658e86901ff9cc7f0a7 (tag)<br/> tagging 29a15389521f38a960299048333ebb1c0d68ad7f (commit)<br/> replaces v5.21.2<br/> tagged by Peter Martini<br/> on Thu Aug 21 01:27:19 2014 -0400<br/><br/>- Log -----------------------------------------------------------------<br/>Fourth release of the v5.21 series<br/><br/>Aaron Crane (3):<br/> t/op/coresubs.t: factor out an internal routine<br/> Fix bug in inlining some CORE::* subs<br/> Update B-Debug to CPAN version 1.20<br/><br/>Abigail (6):<br/> Merge branch &#39;release-5.21.2&#39; into blead<br/> Epigraph for 5.21.2<br/> Installing Inline no longer installs Inline::C.<br/> New perldelta.<br/> Bump version number from 5.21.2 to 5.21.3<br/> Upped version numbers for ModuleList<br/><br/>Alberto Sim&Atilde;&micro;es (1):<br/> perlexperiment mentions features a lot, refer to the feature module<br/><br/>Andy Dougherty (2):<br/> Only use setenv() on Solaris if it is available.<br/> Fix hint typo: No leading underscore in PERL_USE_SAFE_PUTENV<br/><br/>Brian Fraser (9):<br/> pp.c: Fixed a quotemeta bug on perls built without locale.<br/> t/re/subst.t: Proper skip for systems without locale<br/> Makefile.SH: Fix cross builds with -Uhostgenerate<br/> Makefile.SH: Add missing files for make test on cross builds<br/> t/op/taint.t: Accommodate for systems without an inbuilt echo (android, blackberry)<br/> Configure: Discard errors when testing for less -R<br/> Configure: Handle hyphens when searching cpp symbols<br/> ExtUtils::CBuilder: On Android, link to both -lperl and $Config{perllibs}<br/> When cross-compiling, copy cpan/Module-Metadata/<br/><br/>Chad Granum (4):<br/> Delay loading Test::More<br/> Fix ok() that should be a like()<br/> Update to include latest Test::Builder alpha<br/> Update blead to Test::Builder alpha 40<br/><br/>Chris &#39;BinGOs&#39; Williams (11):<br/> Sync Module-CoreList version after CPAN release<br/> Update CPAN-Meta to CPAN version 2.142060<br/> Update HTTP-Tiny to CPAN version 0.047<br/> Update CPAN-Meta-Requirements to CPAN version 2.126<br/> Update perlfaq to CPAN version 5.0150045<br/> Update B-Debug to CPAN version 1.21<br/> Move ExtUtils-Command to cpan/<br/> Move ExtUtils-Manifest to cpan/<br/> Move ExtUtils-Install to cpan/<br/> Update ExtUtils-Manifest to CPAN version 1.65<br/> Remove compiler warning spam on dos-djgpp<br/><br/>Craig A. Berry (5):<br/> Fix legacy VMS feature checking status.<br/> getenv() failed lookup need not set errno on VMS.<br/> Reverse order of environ tables under bash on VMS.<br/> Remove dead VMS code from ext/Sys-Hostname/Hostname.xs.<br/> Fix finite/finitel/isfinite in configure.com.<br/><br/>Dagfinn Ilmari Manns&Atilde;&yen;ker (1):<br/> Disallow importing functions from UNIVERSAL<br/><br/>Daniel Dragan (1):<br/> Open3.pm:spawn_with_handles remove alot of duplicate operators<br/><br/>David Mitchell (3):<br/> cpan/Time-HiRes/t/itimer.t: better diagnostics<br/> op/.stat.t: fix race condition<br/> fix fix for stat.t on win32<br/><br/>Father Chrysostomos (8):<br/> perldiag: rewrap for better splain output; clarifications<br/> Alphabetise perldiag<br/> Make &acirc;&#128;&#152;require $tied_undef&acirc;&#128;&#153; behave consistently<br/> [perl #122498] Odd error message from m/(?(??{}))/<br/> [perl #46947] Parse method-BLOCK arguments as a term<br/> Stop defined(aassign) from being an error<br/> Update exp_name in toke.c, following b5b6210a976<br/> perldelta for b5b6210a9/#46947<br/><br/>H.Merijn Brand (5):<br/> Simplify cppsym dash problem<br/> add --help to Porting/sync-with-cpan<br/> Sync Config::Perl::V to version 0.21<br/> Test file had been renamed. remove old cruft<br/> Update Config::Perl::V to version 0.22<br/><br/>James E Keenan (2):<br/> Move two variable assignments outside of parens.<br/> Correct double mention of winpid_to_pid.<br/><br/>Jan Dubois (1):<br/> Use %I64d instead of %lld for MinGW<br/><br/>Jarkko Hietaniemi (62):<br/> Expect sqrtl instead of sqrt if applicable.<br/> Comments for dlopen.<br/> Skip symbols for which Configure found no support.<br/> Warn against tmpfile, and mention perlclib.<br/> In FreeBSD memcmp symbol can disappear.<br/> Avoid undefined warnings.<br/> Mention libperl.t, and explain nm output some more.<br/> _LIB_VERSION scan was trying leading address twice.<br/> Implement grok_atou as safe/strict atoi replacement.<br/> Use grok_atou instead of atoi.<br/> Add tests for grok_atou.<br/> Add atoi to avoidables.<br/> Advertise grok_atou.<br/> Use grok_atou instead of strtoul (no explicit strtol uses).<br/> Document grok_atou as strtoul replacement.<br/> Add strtoul and strtol to avoidables.<br/> Atol can be strtol in disguise, so grok_atou.<br/> Introduce maxend for paranoia. Also, comments.<br/> apidoc fixes, comment tweaks.<br/> Use UV instead of Size_t.<br/> Share common constants as file statics.<br/> Unused dVARs found by g++ -DPERL_GLOBAL_STRUCT_PRIVATE.<br/> Make PERL_GLOBAL_STRUCT_PRIVATE visible in -V.<br/> readlink() result buffer is not zero-terminated.<br/> Skip ext/GDBM_File/t/fatal.t in Darwin, too flaky.<br/> Revert part of b844a53a to fix ./perl -Ilib t/io/fs.t<br/> Negatives as UVs: sign-extension intentional, add cast.<br/> NOTREACHED goes at/in the unreachable, not after it.<br/> Move return false out of switch default.<br/> grok_atou() is UV now, not Size_t.<br/> Add system to avoidables.<br/> Add atol, atoll, strtoq to avoidables.<br/> Mention sv_gets as the Perl-ish fgets-ish API.<br/> Newer Sun C compilers are not &#39;SUNwspro&#39;, but &#39;solstudio&#39;.<br/> Sun c99 ccversion.<br/> Sun c99 doesn&#39;t like bare -O.<br/> Sun c99 needs -Xa for many system interfaces.<br/> For older clang versions put back -Wno-unused-value.<br/> Configure scan for the kind of long double we have<br/> Configure scan for ldexpl<br/> Perl_ldexp is one of ldexpl, scalbnl, or ldexp<br/> Hexadecimal float sprintf, for perl #122219<br/> Hexadecimal float literals, for perl #122219<br/> Adjust need size for locale radix.<br/> Whitespace only: line breaks before elses.<br/> Zero is better longdblkind for &quot;no long double&quot; than -1.<br/> Use XDIGIT_VALUE().<br/> Comment tweaks.<br/> On literal hexadecimal floats use uquad, not UV.<br/> Big endian frexp+ldexp byte extraction was wrong.<br/> In frexp+ldexp path simply prefer Uquad_t to UV.<br/> Try preparing for weird UVSIZE or NV_MANT_DIG.<br/> 80-bit big-endian extraction was also wrong.<br/> Limit testing with 80-bit doubles.<br/> Make a wild guess at how to handle double-double.<br/> Socket 2.015<br/> Separate the extraction of hex values.<br/> Add quadruple precision tests, verified by Craig Berry.<br/> Little-endian double-double detection was wrong.<br/> Comment tweaks.<br/> Include longdblkind in perl -V output.<br/> perldelta for hexadecimal floats.<br/><br/>Karen Etheridge (2):<br/> document what version \K was added in<br/> spelling: till -&gt; until<br/><br/>Karl Williamson (20):<br/> perlop: Grammatical nit.<br/> Regen podcheck db for new long verbatims in perlepigraph<br/> utf8_heavy.pl: Fix nit in comment<br/> sv.h: Document SVt_INVLIST fields<br/> perlop: Update text to reflect code changes<br/> perlop: Nits<br/> perlop: Update to reflect 5.20 changes<br/> utf8.c: Use slightly more efficient macro<br/> regcomp.c: Don&#39;t read outside array bound<br/> t/run/locale.t: Skip environment test on Win32<br/> PATCH: [perl #122460] Regression with (?{})(?=...) and pos<br/> regcomp.c: White space only<br/> PATCH: [perl #121930] Bleadperl breaks MDOOTSON/Wx<br/> t/run/locale.t: Improve skip message<br/> locale.c: Use PERL_UNUSED_RESULT<br/> locale.c: Clarify comment<br/> perldata: Fix too long verbatim lines<br/> Add sync_locale()<br/> perldelta: Add entry for sync_locale()<br/> reg_posixcc.t: display chr(\\xXX) should be chr(0xXX)<br/><br/>Lukas Mai (1):<br/> POSIX.pod: Document correct redirect for &#39;atexit&#39;.<br/><br/>Peter Martini (31):<br/> Revert Test::Builder changes in prep for 5.21.3<br/> perldelta typo fix: change a &#39;,&#39; to a &#39;.&#39;<br/> perldelta for 3699825258c<br/> perldelta for 4cedf205aa6e<br/> perldelta for jhi double/float work<br/> perldelta for 438f0014a812<br/> perldelta for 438f0014a812, revised<br/> perldelta for 54b7cb3<br/> perldelta for 5f8324b<br/> perldelta for 60df683<br/> perldelta for f4ef132<br/> perldelta for 57d69a4<br/> perldelta for Safe changes<br/> perldelta remove (most) boilerplate<br/> perldelta: Added documentation changes<br/> perldelta for f57000b<br/> perldelta: document grok_atou<br/> perldelta: platform specific notes<br/> perldelta for 842a9d2, [perl #122460]<br/> perldelta: No deprecations or perf enhancements<br/> perldelta: put fatal perldiags in the right spot<br/> perldelta for f04d2c3<br/> perldelta for 7e0dd61, MurmurHash64[AB]<br/> perldelta: finished the stragglers<br/> perldelta: fix my bad pod<br/> perldelta: document the ExtUtils move to cpan/<br/> perldelta suggested by Module-CoreList<br/> Update Module::CoreList for 5.21.3<br/> Final perldelta change for 5.21.3<br/> Add new release to perlhist<br/> perldelta: cleanup per JHI&#39;s comment<br/><br/>Rafael Garcia-Suarez (7):<br/> Remove flagging OP_READLINE with OPf_SPECIAL<br/> Fix tabs in MANIFEST<br/> Avoid pack/unpack to produce the binary form of a utf8 string<br/> Fix MANIFEST and Safe&#39;s changelog<br/> Regenerate local Safe MANIFEST<br/> Add syber to AUTHORS<br/> Documentation typo fix<br/><br/>Tony Cook (14):<br/> Chad Granum is now a perl author<br/> bump $XS::APItest::VERSION for the grok_atou() merge<br/> Vladimir Marek is now a perl author<br/> spell &quot;SSize_t&quot; correctly<br/> avoid passing large backreference numbers back as negative numbers<br/> [perl #121404] tied hashes are different<br/> [perl #122107] test that BEGIN blocks with errors don&#39;t remain named subs<br/> [perl #122107] ensure that BEGIN blocks with errors don&#39;t remain named subs<br/> perldelta for 2806bfd899e5, 3969ff3f8e4b<br/> fix debugger y command scope level<br/> perldelta for 496f5ba57a43<br/> [perl #122476] TODO test for isfoo() crash on Win32 with threads<br/> [perl #122476] use a hash instead of a ptr_table<br/> perldelta for 5c45bbe050f6<br/><br/>Vladimir Marek (1):<br/> use setenv() on Solaris<br/><br/>Yves Orton (2):<br/> make &quot;require&quot; handle no argument more gracefully, and add tests<br/> Add MurmurHash64A and MurmurHash64B to hv_func.h<br/><br/>syber (1):<br/> Critical bugfix in module Safe (Opcode). Version increased, changelog and test added.<br/><br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41681.html Thu, 21 Aug 2014 05:30:22 +0000 [perl.git] branch blead, updated. v5.21.2-231-g785ad2a by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/785ad2a807d699e19eeaa0991b88b07cc4a91bd4?hp=3bccb21e69f750efbe75806e53e2f921ee717de7&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 785ad2a807d699e19eeaa0991b88b07cc4a91bd4<br/>Merge: 3bccb21 29a1538<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Thu Aug 21 01:17:36 2014 -0400<br/><br/> Merge branch &#39;release-5.21.3&#39; into blead<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> dist/Module-CoreList/Changes | 3 ++<br/> dist/Module-CoreList/lib/Module/CoreList.pm | 53 +++++++++++++++++++++-<br/> pod/perldelta.pod | 70 +++++++++++++++++++++++++++--<br/> pod/perlhist.pod | 1 +<br/> 4 files changed, 122 insertions(+), 5 deletions(-)<br/><br/>diff --git a/dist/Module-CoreList/Changes b/dist/Module-CoreList/Changes<br/>index fcd153e..b95dca2 100644<br/>--- a/dist/Module-CoreList/Changes<br/>+++ b/dist/Module-CoreList/Changes<br/>@@ -1,3 +1,6 @@<br/>+5.021003<br/>+ - Prepared for v5.21.3<br/>+<br/> 5.021002<br/> - Prepared for v5.21.2<br/> <br/>diff --git a/dist/Module-CoreList/lib/Module/CoreList.pm b/dist/Module-CoreList/lib/Module/CoreList.pm<br/>index 0b1f201..4fec3e9 100644<br/>--- a/dist/Module-CoreList/lib/Module/CoreList.pm<br/>+++ b/dist/Module-CoreList/lib/Module/CoreList.pm<br/>@@ -252,7 +252,7 @@ sub changes_between {<br/> 5.021000 =&gt; &#39;2014-05-27&#39;,<br/> 5.021001 =&gt; &#39;2014-06-20&#39;,<br/> 5.021002 =&gt; &#39;2014-07-20&#39;,<br/>- 5.021003 =&gt; &#39;????-??-??&#39;,<br/>+ 5.021003 =&gt; &#39;2014-08-20&#39;,<br/> );<br/> <br/> for my $version ( sort { $a &lt;=&gt; $b } keys %released ) {<br/>@@ -10086,7 +10086,46 @@ for my $version ( sort { $a &lt;=&gt; $b } keys %released ) {<br/> 5.021003 =&gt; {<br/> delta_from =&gt; 5.021002,<br/> changed =&gt; {<br/>+ &#39;B::Debug&#39; =&gt; &#39;1.21&#39;,<br/>+ &#39;CPAN::Meta&#39; =&gt; &#39;2.142060&#39;,<br/>+ &#39;CPAN::Meta::Converter&#39; =&gt; &#39;2.142060&#39;,<br/>+ &#39;CPAN::Meta::Feature&#39; =&gt; &#39;2.142060&#39;,<br/>+ &#39;CPAN::Meta::History&#39; =&gt; &#39;2.142060&#39;,<br/>+ &#39;CPAN::Meta::Merge&#39; =&gt; &#39;2.142060&#39;,<br/>+ &#39;CPAN::Meta::Prereqs&#39; =&gt; &#39;2.142060&#39;,<br/>+ &#39;CPAN::Meta::Requirements&#39;=&gt; &#39;2.126&#39;,<br/>+ &#39;CPAN::Meta::Spec&#39; =&gt; &#39;2.142060&#39;,<br/>+ &#39;CPAN::Meta::Validator&#39; =&gt; &#39;2.142060&#39;,<br/> &#39;Config&#39; =&gt; &#39;5.021003&#39;,<br/>+ &#39;Config::Perl::V&#39; =&gt; &#39;0.22&#39;,<br/>+ &#39;ExtUtils::CBuilder&#39; =&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Base&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::Unix&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::VMS&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::Windows&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::Windows::BCC&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::Windows::GCC&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::Windows::MSVC&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::aix&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::android&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::cygwin&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::darwin&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::dec_osf&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::CBuilder::Platform::os2&#39;=&gt; &#39;0.280217&#39;,<br/>+ &#39;ExtUtils::Manifest&#39; =&gt; &#39;1.65&#39;,<br/>+ &#39;HTTP::Tiny&#39; =&gt; &#39;0.047&#39;,<br/>+ &#39;IPC::Open3&#39; =&gt; &#39;1.18&#39;,<br/>+ &#39;Module::CoreList&#39; =&gt; &#39;5.021003&#39;,<br/>+ &#39;Module::CoreList::TieHashDelta&#39;=&gt; &#39;5.021003&#39;,<br/>+ &#39;Module::CoreList::Utils&#39;=&gt; &#39;5.021003&#39;,<br/>+ &#39;Opcode&#39; =&gt; &#39;1.28&#39;,<br/>+ &#39;POSIX&#39; =&gt; &#39;1.42&#39;,<br/>+ &#39;Safe&#39; =&gt; &#39;2.38&#39;,<br/>+ &#39;Socket&#39; =&gt; &#39;2.015&#39;,<br/>+ &#39;Sys::Hostname&#39; =&gt; &#39;1.19&#39;,<br/>+ &#39;UNIVERSAL&#39; =&gt; &#39;1.12&#39;,<br/>+ &#39;XS::APItest&#39; =&gt; &#39;0.63&#39;,<br/>+ &#39;perlfaq&#39; =&gt; &#39;5.0150045&#39;,<br/> },<br/> removed =&gt; {<br/> }<br/>@@ -10570,6 +10609,7 @@ for my $version (sort { $a &lt;=&gt; $b } keys %deprecated) {<br/> &#39;CPAN::Meta::Converter&#39; =&gt; &#39;cpan&#39;,<br/> &#39;CPAN::Meta::Feature&#39; =&gt; &#39;cpan&#39;,<br/> &#39;CPAN::Meta::History&#39; =&gt; &#39;cpan&#39;,<br/>+ &#39;CPAN::Meta::Merge&#39; =&gt; &#39;cpan&#39;,<br/> &#39;CPAN::Meta::Prereqs&#39; =&gt; &#39;cpan&#39;,<br/> &#39;CPAN::Meta::Requirements&#39;=&gt; &#39;cpan&#39;,<br/> &#39;CPAN::Meta::Spec&#39; =&gt; &#39;cpan&#39;,<br/>@@ -10619,12 +10659,15 @@ for my $version (sort { $a &lt;=&gt; $b } keys %deprecated) {<br/> &#39;Encode::TW&#39; =&gt; &#39;cpan&#39;,<br/> &#39;Encode::Unicode&#39; =&gt; &#39;cpan&#39;,<br/> &#39;Encode::Unicode::UTF7&#39; =&gt; &#39;cpan&#39;,<br/>+ &#39;ExtUtils::Command&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Command::MM&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Constant&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Constant::Base&#39;=&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Constant::ProxySubs&#39;=&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Constant::Utils&#39;=&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Constant::XS&#39;=&gt; &#39;cpan&#39;,<br/>+ &#39;ExtUtils::Install&#39; =&gt; &#39;cpan&#39;,<br/>+ &#39;ExtUtils::Installed&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Liblist&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Liblist::Kid&#39;=&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::MM&#39; =&gt; &#39;cpan&#39;,<br/>@@ -10647,8 +10690,10 @@ for my $version (sort { $a &lt;=&gt; $b } keys %deprecated) {<br/> &#39;ExtUtils::MY&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::MakeMaker&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::MakeMaker::Config&#39;=&gt; &#39;cpan&#39;,<br/>+ &#39;ExtUtils::Manifest&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Mkbootstrap&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::Mksymlists&#39; =&gt; &#39;cpan&#39;,<br/>+ &#39;ExtUtils::Packlist&#39; =&gt; &#39;cpan&#39;,<br/> &#39;ExtUtils::testlib&#39; =&gt; &#39;cpan&#39;,<br/> &#39;Fatal&#39; =&gt; &#39;cpan&#39;,<br/> &#39;File::Fetch&#39; =&gt; &#39;cpan&#39;,<br/>@@ -10951,6 +10996,7 @@ for my $version (sort { $a &lt;=&gt; $b } keys %deprecated) {<br/> &#39;CPAN::Meta::Converter&#39; =&gt; &#39;https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues&#39;,<br/> &#39;CPAN::Meta::Feature&#39; =&gt; &#39;https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues&#39;,<br/> &#39;CPAN::Meta::History&#39; =&gt; &#39;https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues&#39;,<br/>+ &#39;CPAN::Meta::Merge&#39; =&gt; &#39;https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues&#39;,<br/> &#39;CPAN::Meta::Prereqs&#39; =&gt; &#39;https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues&#39;,<br/> &#39;CPAN::Meta::Requirements&#39;=&gt; &#39;https://github.com/dagolden/CPAN-Meta-Requirements/issues&#39;,<br/> &#39;CPAN::Meta::Spec&#39; =&gt; &#39;https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues&#39;,<br/>@@ -11000,12 +11046,15 @@ for my $version (sort { $a &lt;=&gt; $b } keys %deprecated) {<br/> &#39;Encode::TW&#39; =&gt; undef,<br/> &#39;Encode::Unicode&#39; =&gt; undef,<br/> &#39;Encode::Unicode::UTF7&#39; =&gt; undef,<br/>+ &#39;ExtUtils::Command&#39; =&gt; &#39;http://rt.perl.org/rt3/&#39;,<br/> &#39;ExtUtils::Command::MM&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/> &#39;ExtUtils::Constant&#39; =&gt; undef,<br/> &#39;ExtUtils::Constant::Base&#39;=&gt; undef,<br/> &#39;ExtUtils::Constant::ProxySubs&#39;=&gt; undef,<br/> &#39;ExtUtils::Constant::Utils&#39;=&gt; undef,<br/> &#39;ExtUtils::Constant::XS&#39;=&gt; undef,<br/>+ &#39;ExtUtils::Install&#39; =&gt; &#39;http://rt.perl.org/rt3/&#39;,<br/>+ &#39;ExtUtils::Installed&#39; =&gt; &#39;http://rt.perl.org/rt3/&#39;,<br/> &#39;ExtUtils::Liblist&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/> &#39;ExtUtils::Liblist::Kid&#39;=&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/> &#39;ExtUtils::MM&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/>@@ -11028,8 +11077,10 @@ for my $version (sort { $a &lt;=&gt; $b } keys %deprecated) {<br/> &#39;ExtUtils::MY&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/> &#39;ExtUtils::MakeMaker&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/> &#39;ExtUtils::MakeMaker::Config&#39;=&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/>+ &#39;ExtUtils::Manifest&#39; =&gt; &#39;http://rt.perl.org/rt3/&#39;,<br/> &#39;ExtUtils::Mkbootstrap&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/> &#39;ExtUtils::Mksymlists&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/>+ &#39;ExtUtils::Packlist&#39; =&gt; &#39;http://rt.perl.org/rt3/&#39;,<br/> &#39;ExtUtils::testlib&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker&#39;,<br/> &#39;Fatal&#39; =&gt; &#39;http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie&#39;,<br/> &#39;File::Fetch&#39; =&gt; undef,<br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index 6b9a4d5..8ed52b7 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -19,10 +19,9 @@ L&lt;perl5212delta&gt;, which describes differences between 5.21.1 and 5.21.2.<br/> In 5.21.1, C&lt;defined(@array)&gt; was made fatal. This has been relaxed<br/> to not die if the argument is assigning to an array.<br/> <br/>-=head2 Floating point handling and parsing has been improved<br/>+=head2 Floating point parsing has been improved<br/> <br/> Parsing and printing of floating point values has been improved.<br/>-XXX what in addition to hexadecimal floats? if nothing, change the head2.<br/> <br/> As a completely new feature, hexadecimal floating point literals<br/> (like 0x1.23p-4) are now supported, and they can be output with<br/>@@ -67,7 +66,20 @@ L&lt;CPAN::Meta::Requirements&gt; has been upgraded from version 2.125 to 2.126.<br/> <br/> =item *<br/> <br/>+L&lt;ExtUtils::CBuilder&gt; was moved from F&lt;dist&gt; to F&lt;cpan&gt;.<br/>+<br/>+=item *<br/>+<br/>+L&lt;ExtUtils::CBuilder&gt; has been upgraded from version 0.280216 to 0.280217.<br/>+<br/>+=item *<br/>+<br/>+L&lt;ExtUtils::Install&gt; was moved from F&lt;dist&gt; to F&lt;cpan&gt;.<br/>+<br/>+=item *<br/>+<br/> L&lt;ExtUtils::Manifest&gt; has been upgraded from version 1.64 to 1.65.<br/>+It was also moved from F&lt;dist&gt; to F&lt;cpan&gt;.<br/> <br/> =item *<br/> <br/>@@ -75,10 +87,26 @@ L&lt;HTTP::Tiny&gt; has been upgraded from version 0.043 to 0.047.<br/> <br/> =item *<br/> <br/>+L&lt;IPC::Open3&gt; has been upgraded from version 1.17 to 1.18.<br/>+<br/>+=item *<br/>+<br/>+L&lt;Module::CoreList&gt; has been upgraded from version 5.021002 to 5.021003.<br/>+<br/>+=item *<br/>+<br/>+L&lt;Opcode&gt; has been upgraded from version 1.27 to 1.28.<br/>+<br/>+=item *<br/>+<br/> L&lt;perl5db.pl&gt; has been upgraded from version 1.45 to 1.46.<br/> <br/> =item *<br/> <br/>+L&lt;perlfaq&gt; has been upgraded from version 5.0150044 to 5.0150045.<br/>+<br/>+=item *<br/>+<br/> L&lt;POSIX&gt; has been upgraded from version 1.41 to 1.42.<br/> <br/> =item *<br/>@@ -89,6 +117,14 @@ L&lt;Safe&gt; has been upgraded from version 2.37 to 2.38.<br/> <br/> L&lt;Socket&gt; has been upgraded from version 2.014 to 2.015.<br/> <br/>+=item *<br/>+<br/>+L&lt;Sys::Hostname&gt; has been upgraded from version 1.18 to 1.19<br/>+<br/>+=item *<br/>+<br/>+L&lt;UNIVERSAL&gt; has been upgraded from version 1.11 to 1.12.<br/>+<br/> =back<br/> <br/> =head1 Documentation<br/>@@ -320,9 +356,35 @@ regex could cause C&lt;pos&gt; to see an incorrect value. [perl #122460]<br/> <br/> =head1 Acknowledgements<br/> <br/>-XXX Generate this with:<br/>+Perl 5.21.3 represents approximately 4 weeks of development since Perl 5.21.2<br/>+and contains approximately 21,000 lines of changes across 250 files from 25<br/>+authors.<br/>+<br/>+Excluding auto-generated files, documentation and release tools, there were<br/>+approximately 18,000 lines of changes to 160 .pm, .t, .c and .h files.<br/>+<br/>+Perl continues to flourish into its third decade thanks to a vibrant community<br/>+of users and developers. The following people are known to have contributed the<br/>+improvements that became Perl 5.21.3:<br/>+<br/>+Aaron Crane, Abigail, Alberto Sim&Atilde;&micro;es, Andy Dougherty, Brian Fraser, Chad<br/>+Granum, Chris &#39;BinGOs&#39; Williams, Craig A. Berry, Dagfinn Ilmari Manns&Atilde;&yen;ker,<br/>+Daniel Dragan, David Mitchell, Father Chrysostomos, H.Merijn Brand, James E<br/>+Keenan, Jan Dubois, Jarkko Hietaniemi, Karen Etheridge, Karl Williamson, Lukas<br/>+Mai, Peter Martini, Rafael Garcia-Suarez, syber, Tony Cook, Vladimir Marek,<br/>+Yves Orton.<br/>+<br/>+The list above is almost certainly incomplete as it is automatically generated<br/>+from version control history. In particular, it does not include the names of<br/>+the (very much appreciated) contributors who reported issues to the Perl bug<br/>+tracker.<br/>+<br/>+Many of the changes included in this version originated in the CPAN modules<br/>+included in Perl&#39;s core. We&#39;re grateful to the entire CPAN community for<br/>+helping Perl to flourish.<br/> <br/>- perl Porting/acknowledgements.pl v5.21.2..HEAD<br/>+For a more complete list of all of Perl&#39;s historical contributors, please see<br/>+the F&lt;AUTHORS&gt; file in the Perl source distribution.<br/> <br/> =head1 Reporting Bugs<br/> <br/>diff --git a/pod/perlhist.pod b/pod/perlhist.pod<br/>index de4737c..230db66 100644<br/>--- a/pod/perlhist.pod<br/>+++ b/pod/perlhist.pod<br/>@@ -534,6 +534,7 @@ the strings?).<br/> Ricardo 5.21.0 2014-May-27 The 5.21 development track<br/> Matthew H 5.21.1 2014-Jun-20<br/> Abigail 5.21.2 2014-Jul-20<br/>+ Peter 5.21.3 2014-Aug-20<br/> <br/> =head2 SELECTED RELEASE SIZES<br/> <br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41680.html Thu, 21 Aug 2014 05:21:23 +0000 [perl.git] branch blead, updated. v5.21.2-222-g3bccb21 by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/3bccb21e69f750efbe75806e53e2f921ee717de7?hp=fca083c47fa8011629d991516dc59e068cbf6234&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 3bccb21e69f750efbe75806e53e2f921ee717de7<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 22:47:01 2014 -0400<br/><br/> Scowl. 19 should have been &#39;[VERSION]&#39;<br/> <br/> And I should have noticed that before I hit &#39;send&#39;!<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> Porting/release_announcement_template.txt | 2 +-<br/> 1 file changed, 1 insertion(+), 1 deletion(-)<br/><br/>diff --git a/Porting/release_announcement_template.txt b/Porting/release_announcement_template.txt<br/>index fbd8d22..d6a1ffd 100644<br/>--- a/Porting/release_announcement_template.txt<br/>+++ b/Porting/release_announcement_template.txt<br/>@@ -3,7 +3,7 @@<br/> -- [ATTRIBUTION]<br/> <br/> We are [SYNONYM FOR &#39;pleased&#39;] to announce version [VERSION.SUBVERSION],<br/>-the [N-TH] development release of version 19 of Perl 5.<br/>+the [N-TH] development release of version [VERSION] of Perl 5.<br/> <br/> You will soon be able to download Perl 5.[VERSION.SUBVERSION] from your<br/> favorite CPAN mirror or find it at:<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41679.html Thu, 21 Aug 2014 02:48:08 +0000 [perl.git] branch smoke-me/khw-5.21, created. v5.21.2-229-gb7215f2 by Karl Williamson In perl.git, the branch smoke-me/khw-5.21 has been created<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/b7215f2572b9613923164563a82785c6e4ecc2c5?hp=0000000000000000000000000000000000000000&gt;<br/><br/> at b7215f2572b9613923164563a82785c6e4ecc2c5 (commit)<br/><br/>- Log -----------------------------------------------------------------<br/>commit b7215f2572b9613923164563a82785c6e4ecc2c5<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Wed Aug 20 14:33:28 2014 -0600<br/><br/> more_smoke<br/><br/>M regcomp.c<br/><br/>commit 3889766347f13b1d484399bc6dabb5f8b77da378<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Wed Aug 20 10:57:07 2014 -0600<br/><br/> smoke<br/><br/>M pp_sys.c<br/>M regen/unicode_constants.pl<br/>M unicode_constants.h<br/><br/>commit c79bc91cfa31d35330d771c093012445f2301954<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Sat Aug 9 18:07:48 2014 -0600<br/><br/> regcomp.c: Avoid function call overhead<br/> <br/> We don&#39;t need to call a function to convert from UTF-8 when the value is<br/> invariant in and out of UTF-8.<br/><br/>M regcomp.c<br/><br/>commit 58fb696ae8427c1a82a841dea5f9031726c89adc<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Sat Aug 9 17:47:02 2014 -0600<br/><br/> regcomp.c: Swap &#39;else&#39; clauses.<br/> <br/> It&#39;s easier to comprehend a tiny else clause followed by a large one and<br/> vice-versa. This is in preparation for further changes in future<br/> commits.<br/><br/>M regcomp.c<br/><br/>commit 7c17fb83c08d3c88109c8e244061bd8932b74770<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Tue Aug 5 08:51:34 2014 -0600<br/><br/> smoke<br/><br/>M embed.fnc<br/>M embed.h<br/>M ext/re/t/regop.t<br/>M proto.h<br/>M regcomp.c<br/>M regen/unicode_constants.pl<br/>M unicode_constants.h<br/><br/>commit 00c2f97a9022680f0ef59c3123b00a243eb0ca1b<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Fri Aug 1 10:04:16 2014 -0600<br/><br/> Avoid redundant test -in -Dr output<br/> <br/> There is an optimization in regcomp.c which saves memory when used, but<br/> which caused -Dr output to display the same code points twice.<br/> I didn&#39;t add a test to ext/re/t/regop.t because this only happens for a<br/> Unicode property, under certain circumstances, and that triggers a lot<br/> of other regex patterns to be compiled which are subject to change, so<br/> the test would frequently have to be updated. This only affects<br/> debugging output anyway.<br/><br/>M embed.fnc<br/>M embed.h<br/>M proto.h<br/>M regcomp.c<br/>M regexec.c<br/><br/>commit 3a35139db2e81a08dc093f351854fedc489d2cb3<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Fri Aug 1 09:58:02 2014 -0600<br/><br/> regcomp.c: Reorder cases: in switch<br/> <br/> This makes it slightly more reader-friendly<br/><br/>M regcomp.c<br/><br/>commit 253ec6b1b68040375b631519277256ed6833188d<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Fri Aug 1 09:46:12 2014 -0600<br/><br/> Add ESC to unicode_constants.h<br/> <br/> This avoids a runtime translation.<br/><br/>M regcomp.c<br/>M regen/unicode_constants.pl<br/>M toke.c<br/>M unicode_constants.h<br/><br/>commit a4fd62d308f0062ff6ee7106543827226779c0d3<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Fri Aug 1 09:09:41 2014 -0600<br/><br/> Move _get_regclass_nonbitmap_data() to regcomp.c<br/> <br/> This function, though mostly used by regexec.c and previously contained<br/> therein, relies on the particular data structure in regcomp.c, so it<br/> makes sense to move it adjacent to the code that generates the<br/> structure. Future commits will add function calls to this function that<br/> are (currently) only in regcomp.c, and so will tie it tighter to that<br/> file.<br/> <br/> This just moves the code with surrounding #ifdef, adds a couple of blank<br/> lines and adjusts the comments. No other changes were made.<br/><br/>M regcomp.c<br/>M regexec.c<br/><br/>commit 7f3f3070e3920ee572f4127d7d6f93443e996b13<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Mon Jun 30 15:03:14 2014 -0600<br/><br/> regex: Use #define for number of bits in ANYOF<br/> <br/> ANYOF nodes (for bracketed character classes) currently are for code<br/> points 0-255. This is the first step in the eventual making that size<br/> configurable<br/><br/>M regcomp.c<br/>M regcomp.h<br/>M regexec.c<br/><br/>commit 275884b6e998b3f925357a315f9e8a4b9b19cf3f<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Tue Jun 17 18:49:53 2014 -0600<br/><br/> XXX partial perlapi text<br/><br/>M perlvars.h<br/><br/>commit a55e20c17ba0bc6fe113da808c6a3f942e026b51<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Sat May 17 19:37:06 2014 -0600<br/><br/> XXX Don&#39;t push. attempt to tell tries everything at compile time<br/> <br/> But, it appears this is thrown away, have to consult with Yves to see if<br/> is worth pursuing<br/><br/>M embed.fnc<br/>M embed.h<br/>M perl.h<br/>M proto.h<br/>M regcomp.c<br/>M regcomp.h<br/>M regcomp.sym<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41678.html Wed, 20 Aug 2014 20:33:57 +0000 [perl.git] branch smoke-me/khw-5.21, deleted. v5.21.2-228-g3889766 by Karl Williamson In perl.git, the branch smoke-me/khw-5.21 has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=3889766347f13b1d484399bc6dabb5f8b77da378&gt;<br/><br/> was 3889766347f13b1d484399bc6dabb5f8b77da378<br/><br/>-----------------------------------------------------------------------<br/>3889766347f13b1d484399bc6dabb5f8b77da378 smoke<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41677.html Wed, 20 Aug 2014 20:33:47 +0000 [perl.git] branch release-5.21.3, created. v5.21.2-203-g29a1538 by Peter Martini In perl.git, the branch release-5.21.3 has been created<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/29a15389521f38a960299048333ebb1c0d68ad7f?hp=0000000000000000000000000000000000000000&gt;<br/><br/> at 29a15389521f38a960299048333ebb1c0d68ad7f (commit)<br/><br/>- Log -----------------------------------------------------------------<br/>commit 29a15389521f38a960299048333ebb1c0d68ad7f<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 16:20:05 2014 -0400<br/><br/> perldelta: cleanup per JHI&#39;s comment<br/><br/>M pod/perldelta.pod<br/><br/>commit 36719686e209d3a2120ac01da5207598078e07a7<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 04:23:26 2014 -0400<br/><br/> Add new release to perlhist<br/><br/>M pod/perlhist.pod<br/><br/>commit ff433f2ddc77b55891a65dba73aab925160d9327<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 04:21:39 2014 -0400<br/><br/> Final perldelta change for 5.21.3<br/><br/>M pod/perldelta.pod<br/><br/>commit 46e588907ff561f0b5ebb923f1a81423645845e7<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 04:21:14 2014 -0400<br/><br/> Update Module::CoreList for 5.21.3<br/><br/>M dist/Module-CoreList/Changes<br/>M dist/Module-CoreList/lib/Module/CoreList.pm<br/><br/>commit d99849aee93b3076ce975166cb2533b7929e73c6<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 03:49:31 2014 -0400<br/><br/> perldelta suggested by Module-CoreList<br/><br/>M pod/perldelta.pod<br/><br/>commit 134f90c258f9dc75d06b2572ff387538f2754733<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 03:40:53 2014 -0400<br/><br/> perldelta: document the ExtUtils move to cpan/<br/><br/>M pod/perldelta.pod<br/><br/>commit 0f4a583be5d18cc77b58c3ed1e74ff71ee9ee3a6<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 03:15:28 2014 -0400<br/><br/> perldelta: fix my bad pod<br/><br/>M pod/perldelta.pod<br/><br/>commit 21f3b41e42dce4ee2da8739ba42887336609168a<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Wed Aug 20 09:45:50 2014 -0400<br/><br/> perldelta for hexadecimal floats.<br/><br/>M pod/perldelta.pod<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41676.html Wed, 20 Aug 2014 20:22:23 +0000 [perl.git] branch blead, updated. v5.21.2-221-gfca083c by Brian Fraser In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/fca083c47fa8011629d991516dc59e068cbf6234?hp=42b5146c146a72ef7462ac4ca82888f5ab3cbcfe&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit fca083c47fa8011629d991516dc59e068cbf6234<br/>Author: Alexandre (Midnite) Jousset &lt;mid@gtmp.org&gt;<br/>Date: Wed Aug 20 21:24:21 2014 +0200<br/><br/> magic.t: android: bypass two $0 tests and add one<br/> <br/> &quot;ps&quot; on Android has different syntaxes depending on the tool used.<br/> It can be toolbox or busybox. Bypass the &quot;ps&quot; tests and enable<br/> the /proc/$$/cmdline one.<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> AUTHORS | 1 +<br/> t/op/magic.t | 5 +++--<br/> 2 files changed, 4 insertions(+), 2 deletions(-)<br/><br/>diff --git a/AUTHORS b/AUTHORS<br/>index 934c50c..b9038dc 100644<br/>--- a/AUTHORS<br/>+++ b/AUTHORS<br/>@@ -48,6 +48,7 @@ Albert Chin-A-Young &lt;china@thewrittenword.com&gt;<br/> Albert Dvornik &lt;bert@alum.mit.edu&gt;<br/> Alberto Sim&Atilde;&micro;es &lt;ambs@cpan.org&gt;<br/> Alessandro Forghieri &lt;alf@orion.it&gt;<br/>+Alexandre (Midnite) Jousset &lt;mid@gtmp.org&gt;<br/> Alexander Alekseev &lt;alex@alemate.ru&gt;<br/> Alexander Hartmaier &lt;abraxxa@cpan.org&gt;<br/> Alexander Voronov &lt;alexander-voronov@yandex.ru&gt;<br/>diff --git a/t/op/magic.t b/t/op/magic.t<br/>index 015d41b..afc99c5 100644<br/>--- a/t/op/magic.t<br/>+++ b/t/op/magic.t<br/>@@ -407,7 +407,7 @@ EOP<br/> # argv[0] assignment and by calling prctl()<br/> {<br/> SKIP: {<br/>- skip &quot;We don&#39;t have prctl() here&quot;, 2 unless $Config{d_prctl_set_name};<br/>+ skip &quot;We don&#39;t have prctl() here, or we&#39;re on Android&quot;, 2 unless $Config{d_prctl_set_name} &amp;&amp; $^O ne &#39;android&#39;;<br/> <br/> # We don&#39;t really need these tests. prctl() is tested in the<br/> # Kernel, but test it anyway for our sanity. If something doesn&#39;t<br/>@@ -755,13 +755,14 @@ SKIP: {<br/> <br/> SKIP: {<br/> skip(&quot;\$0 check only on Linux and FreeBSD&quot;, 2)<br/>- unless $^O =~ /^(linux|freebsd)$/<br/>+ unless $^O =~ /^(linux|android|freebsd)$/<br/> &amp;&amp; open CMDLINE, &quot;/proc/$$/cmdline&quot;;<br/> <br/> chomp(my $line = scalar &lt;CMDLINE&gt;);<br/> my $me = (split /\0/, $line)[0];<br/> is $me, $0, &#39;altering $0 is effective (testing with /proc/)&#39;;<br/> close CMDLINE;<br/>+ skip(&quot;\$0 check with &#39;ps&#39; only on Linux (but not Android) and FreeBSD&quot;, 1) if $^O eq &#39;android&#39;;<br/> # perlbug #22811<br/> my $mydollarzero = sub {<br/> my($arg) = shift;<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41675.html Wed, 20 Aug 2014 20:06:02 +0000 [perl.git] branch blead, updated. v5.21.2-220-g42b5146 by Brian Fraser In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/42b5146c146a72ef7462ac4ca82888f5ab3cbcfe?hp=60aaad768dfe37227c05b00666ee7694ef9c0488&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 42b5146c146a72ef7462ac4ca82888f5ab3cbcfe<br/>Author: Brian Fraser &lt;fraserbn@gmail.com&gt;<br/>Date: Wed Aug 20 20:25:18 2014 +0200<br/><br/> Android hints: Always append /system/lib and /vendor/lib in libpth<br/> <br/> These are the canonical directories for libraries on Android.<br/> This is only mildly important for native builds, since<br/> whatever toolchain was installed will likely provide<br/> their own /lib, but is quite important for cross builds.<br/><br/>M hints/linux-android.sh<br/><br/>commit ff44ff0cff6fd900c7ab2c2483f4f54d6652d1ab<br/>Author: Brian Fraser &lt;fraserbn@gmail.com&gt;<br/>Date: Wed Aug 20 19:21:30 2014 +0200<br/><br/> Android hints: define d_procselfexe and procselfexe if needed<br/> <br/> Only affects cross-compile builds; currently the tests<br/> in Configure for this feature will be run on the host,<br/> not the target system, which makes the detection of the<br/> feature unreliable.<br/> <br/> Since we know that /proc/self/exe exists, just define it<br/> and set $procselfexe to that.<br/><br/>M hints/linux-android.sh<br/><br/>commit 1b190a66c0446de78472717686002533bc9a9707<br/>Author: Brian Fraser &lt;fraserbn@gmail.com&gt;<br/>Date: Wed Aug 20 19:19:13 2014 +0200<br/><br/> Configure: Improve the d_prctl_set_name detection for Android<br/> <br/> On some versions of Android (e.g., 4.2.2, API level 17)<br/> the header that defines the constants used for this test<br/> will not work if unistd.h isn&#39;t already included.<br/><br/>M Configure<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> Configure | 3 +++<br/> hints/linux-android.sh | 12 +++++++++++-<br/> 2 files changed, 14 insertions(+), 1 deletion(-)<br/><br/>diff --git a/Configure b/Configure<br/>index a67a2c9..23b47df 100755<br/>--- a/Configure<br/>+++ b/Configure<br/>@@ -16541,6 +16541,9 @@ d_prctl_set_name=$undef<br/> case $d_prctl in<br/> $define)<br/> $cat &gt;try.c &lt;&lt;EOM<br/>+#ifdef __ANDROID__<br/>+#include &lt;unistd.h&gt;<br/>+#endif<br/> #include &lt;sys/prctl.h&gt;<br/> <br/> int main (int argc, char *argv[])<br/>diff --git a/hints/linux-android.sh b/hints/linux-android.sh<br/>index 76cfceb..fdfe64a 100644<br/>--- a/hints/linux-android.sh<br/>+++ b/hints/linux-android.sh<br/>@@ -251,6 +251,9 @@ fi # Cross-compiling with adb<br/> <br/> case &quot;$usecrosscompile&quot; in<br/> define)<br/>+# The tests for this in Configure doesn&#39;t play nicely with<br/>+# cross-compiling<br/>+d_procselfexe=&quot;define&quot;<br/> if $test &quot;X$hostosname&quot; = &quot;Xdarwin&quot;; then<br/> firstmakefile=GNUmakefile;<br/> fi<br/>@@ -280,9 +283,16 @@ case &quot;$src&quot; in<br/> ;;<br/> esac<br/> <br/>-$cat &lt;&lt;EOO &gt;&gt; $pwd/config.arch<br/>+$cat &lt;&lt;&#39;EOO&#39; &gt;&gt; $pwd/config.arch<br/> <br/> osname=&#39;android&#39;<br/>+eval &quot;libpth=&#39;$libpth /system/lib /vendor/lib&#39;&quot;<br/>+<br/>+if $test &quot;X$procselfexe&quot; = X; then<br/>+ case &quot;$d_procselfexe&quot; in<br/>+ define) procselfexe=&#39;&quot;/proc/self/exe&quot;&#39;;;<br/>+ esac<br/>+fi<br/> EOO<br/> <br/> # Android is a linux variant, so run those hints.<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41674.html Wed, 20 Aug 2014 18:35:45 +0000 [perl.git] branch smoke-me/khw-5.21, created. v5.21.2-228-g3889766 by Karl Williamson In perl.git, the branch smoke-me/khw-5.21 has been created<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/3889766347f13b1d484399bc6dabb5f8b77da378?hp=0000000000000000000000000000000000000000&gt;<br/><br/> at 3889766347f13b1d484399bc6dabb5f8b77da378 (commit)<br/><br/>- Log -----------------------------------------------------------------<br/>commit 3889766347f13b1d484399bc6dabb5f8b77da378<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Wed Aug 20 10:57:07 2014 -0600<br/><br/> smoke<br/><br/>M pp_sys.c<br/>M regen/unicode_constants.pl<br/>M unicode_constants.h<br/><br/>commit c79bc91cfa31d35330d771c093012445f2301954<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Sat Aug 9 18:07:48 2014 -0600<br/><br/> regcomp.c: Avoid function call overhead<br/> <br/> We don&#39;t need to call a function to convert from UTF-8 when the value is<br/> invariant in and out of UTF-8.<br/><br/>M regcomp.c<br/><br/>commit 58fb696ae8427c1a82a841dea5f9031726c89adc<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Sat Aug 9 17:47:02 2014 -0600<br/><br/> regcomp.c: Swap &#39;else&#39; clauses.<br/> <br/> It&#39;s easier to comprehend a tiny else clause followed by a large one and<br/> vice-versa. This is in preparation for further changes in future<br/> commits.<br/><br/>M regcomp.c<br/><br/>commit 7c17fb83c08d3c88109c8e244061bd8932b74770<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Tue Aug 5 08:51:34 2014 -0600<br/><br/> smoke<br/><br/>M embed.fnc<br/>M embed.h<br/>M ext/re/t/regop.t<br/>M proto.h<br/>M regcomp.c<br/>M regen/unicode_constants.pl<br/>M unicode_constants.h<br/><br/>commit 00c2f97a9022680f0ef59c3123b00a243eb0ca1b<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Fri Aug 1 10:04:16 2014 -0600<br/><br/> Avoid redundant test -in -Dr output<br/> <br/> There is an optimization in regcomp.c which saves memory when used, but<br/> which caused -Dr output to display the same code points twice.<br/> I didn&#39;t add a test to ext/re/t/regop.t because this only happens for a<br/> Unicode property, under certain circumstances, and that triggers a lot<br/> of other regex patterns to be compiled which are subject to change, so<br/> the test would frequently have to be updated. This only affects<br/> debugging output anyway.<br/><br/>M embed.fnc<br/>M embed.h<br/>M proto.h<br/>M regcomp.c<br/>M regexec.c<br/><br/>commit 3a35139db2e81a08dc093f351854fedc489d2cb3<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Fri Aug 1 09:58:02 2014 -0600<br/><br/> regcomp.c: Reorder cases: in switch<br/> <br/> This makes it slightly more reader-friendly<br/><br/>M regcomp.c<br/><br/>commit 253ec6b1b68040375b631519277256ed6833188d<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Fri Aug 1 09:46:12 2014 -0600<br/><br/> Add ESC to unicode_constants.h<br/> <br/> This avoids a runtime translation.<br/><br/>M regcomp.c<br/>M regen/unicode_constants.pl<br/>M toke.c<br/>M unicode_constants.h<br/><br/>commit a4fd62d308f0062ff6ee7106543827226779c0d3<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Fri Aug 1 09:09:41 2014 -0600<br/><br/> Move _get_regclass_nonbitmap_data() to regcomp.c<br/> <br/> This function, though mostly used by regexec.c and previously contained<br/> therein, relies on the particular data structure in regcomp.c, so it<br/> makes sense to move it adjacent to the code that generates the<br/> structure. Future commits will add function calls to this function that<br/> are (currently) only in regcomp.c, and so will tie it tighter to that<br/> file.<br/> <br/> This just moves the code with surrounding #ifdef, adds a couple of blank<br/> lines and adjusts the comments. No other changes were made.<br/><br/>M regcomp.c<br/>M regexec.c<br/><br/>commit 7f3f3070e3920ee572f4127d7d6f93443e996b13<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Mon Jun 30 15:03:14 2014 -0600<br/><br/> regex: Use #define for number of bits in ANYOF<br/> <br/> ANYOF nodes (for bracketed character classes) currently are for code<br/> points 0-255. This is the first step in the eventual making that size<br/> configurable<br/><br/>M regcomp.c<br/>M regcomp.h<br/>M regexec.c<br/><br/>commit 275884b6e998b3f925357a315f9e8a4b9b19cf3f<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Tue Jun 17 18:49:53 2014 -0600<br/><br/> XXX partial perlapi text<br/><br/>M perlvars.h<br/><br/>commit a55e20c17ba0bc6fe113da808c6a3f942e026b51<br/>Author: Karl Williamson &lt;khw@cpan.org&gt;<br/>Date: Sat May 17 19:37:06 2014 -0600<br/><br/> XXX Don&#39;t push. attempt to tell tries everything at compile time<br/> <br/> But, it appears this is thrown away, have to consult with Yves to see if<br/> is worth pursuing<br/><br/>M embed.fnc<br/>M embed.h<br/>M perl.h<br/>M proto.h<br/>M regcomp.c<br/>M regcomp.h<br/>M regcomp.sym<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41673.html Wed, 20 Aug 2014 17:03:24 +0000 [perl.git] branch smoke-me/khw-5.21, deleted. v5.21.2-99-g2f75ab1 by Karl Williamson In perl.git, the branch smoke-me/khw-5.21 has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=2f75ab11f7cef85f0a2dfe252d15157dde357183&gt;<br/><br/> was 2f75ab11f7cef85f0a2dfe252d15157dde357183<br/><br/>-----------------------------------------------------------------------<br/>2f75ab11f7cef85f0a2dfe252d15157dde357183 smoke<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41672.html Wed, 20 Aug 2014 17:03:18 +0000 [perl.git] branch blead, updated. v5.21.2-217-g60aaad7 by Jarkko Hietaniemi In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/60aaad768dfe37227c05b00666ee7694ef9c0488?hp=640eedb9ffcac7a9c2793689044e84bfd9af3045&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 60aaad768dfe37227c05b00666ee7694ef9c0488<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Wed Aug 20 11:31:15 2014 -0400<br/><br/> Mention the possibility of fp rounding modes&#39; effects.<br/><br/>M pod/perldata.pod<br/><br/>commit 61b5c6185cc0aebfbd823e601ee6c8023c6aea0d<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Wed Aug 20 11:19:39 2014 -0400<br/><br/> Try addressing perl #122578, low-order fp diffs.<br/><br/>M t/op/sprintf2.t<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldata.pod | 5 ++++-<br/> t/op/sprintf2.t | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-<br/> 2 files changed, 63 insertions(+), 2 deletions(-)<br/><br/>diff --git a/pod/perldata.pod b/pod/perldata.pod<br/>index 52921ca..c490b63 100644<br/>--- a/pod/perldata.pod<br/>+++ b/pod/perldata.pod<br/>@@ -432,7 +432,10 @@ but it must be followed by C&lt;p&gt;, an optional sign, and a power of two.<br/> The format is useful for accurately presenting floating point values,<br/> avoiding conversions to or from decimal floating point, and therefore<br/> avoiding possible loss in precision. Notice that while most current<br/>-platforms use the 64-bit IEEE 754 floating point, not all do.<br/>+platforms use the 64-bit IEEE 754 floating point, not all do. Another<br/>+potential source of (low-order) differences are the floating point<br/>+rounding modes, which can differ between CPUs, operating systems,<br/>+and compilers, and which Perl doesn&#39;t control.<br/> <br/> You can also embed newlines directly in your strings, i.e., they can end<br/> on a different line than they begin. This is nice, but if you forget<br/>diff --git a/t/op/sprintf2.t b/t/op/sprintf2.t<br/>index 4969abf..49a9e55 100644<br/>--- a/t/op/sprintf2.t<br/>+++ b/t/op/sprintf2.t<br/>@@ -572,5 +572,63 @@ for my $t (@hexfloat) {<br/> my ($format, $arg, $expected) = @$t;<br/> $arg = eval $arg;<br/> my $result = sprintf($format, $arg);<br/>- is($result, $expected, &quot;&#39;$format&#39; &#39;$arg&#39; -&gt; &#39;$result&#39; cf &#39;$expected&#39;&quot;);<br/>+ my $ok = $result eq $expected;<br/>+ unless ($ok) {<br/>+ # It seems that there can be difference in the last bits:<br/>+ # [perl #122578]<br/>+ # got &quot;0x1.5bf0a8b14576ap+1&quot;<br/>+ # expected &quot;0x1.5bf0a8b145769p+1&quot;<br/>+ # (Android on ARM)<br/>+ #<br/>+ # Exact cause unknown but suspecting different fp rounding modes,<br/>+ # (towards zero? towards +inf? towards -inf?) about which Perl<br/>+ # is blissfully unaware.<br/>+ #<br/>+ # Try extracting one (or sometimes two) last mantissa<br/>+ # hexdigits, and see if they differ in value by one.<br/>+ my ($rh, $eh) = ($result, $expected);<br/>+ sub extract_prefix {<br/>+ ($_[0] =~ s/^(-?0x[0-9a-fA-F]+\.)//) &amp;&amp; return $1;<br/>+ }<br/>+ my $rp = extract_prefix($rh);<br/>+ my $ep = extract_prefix($eh);<br/>+ print &quot;# rp = $rp, ep = $ep (rh $rh, eh $eh)\n&quot;;<br/>+ if ($rp eq $ep) { # If prefixes match.<br/>+ sub extract_exponent {<br/>+ ($_[0] =~ s/([pP][+-]?\d+)$//) &amp;&amp; return $1;<br/>+ }<br/>+ my $re = extract_exponent($rh);<br/>+ my $ee = extract_exponent($eh);<br/>+ print &quot;# re = $re, ee = $ee (rh $rh, eh $eh)\n&quot;;<br/>+ if ($re eq $ee) { # If exponents match.<br/>+ # Remove the common prefix of the mantissa bits.<br/>+ my $la = length($rh);<br/>+ my $lb = length($eh);<br/>+ my $i;<br/>+ for ($i = 0; $i &lt; $la &amp;&amp; $i &lt; $lb; $i++) {<br/>+ last if substr($rh, $i, 1) ne substr($eh, $i, 1);<br/>+ }<br/>+ $rh = substr($rh, $i);<br/>+ $eh = substr($eh, $i);<br/>+ print &quot;# (rh $rh, eh $eh)\n&quot;;<br/>+ if ($rh ne $eh) {<br/>+ # If necessary, pad the shorter one on the right<br/>+ # with one zero (for example &quot;...1f&quot; vs &quot;...2&quot;,<br/>+ # we want to compare &quot;1f&quot; to &quot;20&quot;).<br/>+ if (length $rh &lt; length $eh) {<br/>+ $rh .= &#39;0&#39;;<br/>+ } elsif (length $eh &lt; length $rh) {<br/>+ $eh .= &#39;0&#39;;<br/>+ }<br/>+ print &quot;# (rh $rh, eh $eh)\n&quot;;<br/>+ if (length $eh == length $rh) {<br/>+ if (abs(hex($eh) - hex($rh)) == 1) {<br/>+ $ok = 1;<br/>+ }<br/>+ }<br/>+ }<br/>+ }<br/>+ }<br/>+ }<br/>+ ok($ok, &quot;&#39;$format&#39; &#39;$arg&#39; -&gt; &#39;$result&#39; cf &#39;$expected&#39;&quot;);<br/> }<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41671.html Wed, 20 Aug 2014 15:33:50 +0000 [perl.git] branch blead, updated. v5.21.2-215-g640eedb by Jarkko Hietaniemi In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/640eedb9ffcac7a9c2793689044e84bfd9af3045?hp=ff4eb3984da9fdf3cec4f01cf752e4e7da44139f&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 640eedb9ffcac7a9c2793689044e84bfd9af3045<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Wed Aug 20 09:48:26 2014 -0400<br/><br/> Pass $ENV{HARNESS_TIMER} to Test::Harness from t/harness.<br/> <br/> (One would think it worked as-is, but didn&#39;t. Maybe T::H resets it somehow.)<br/><br/>M t/harness<br/><br/>commit 90597398e07c6a6526f1f15f52df741194b31628<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Wed Aug 20 09:45:50 2014 -0400<br/><br/> perldelta for hexadecimal floats.<br/><br/>M pod/perldelta.pod<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 8 ++++++--<br/> t/harness | 1 +<br/> 2 files changed, 7 insertions(+), 2 deletions(-)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index 4156cb6..6b9a4d5 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -21,8 +21,12 @@ to not die if the argument is assigning to an array.<br/> <br/> =head2 Floating point handling and parsing has been improved<br/> <br/>-A number of area in the core that handle the parsing and printing<br/>-of floating point values have been improved.<br/>+Parsing and printing of floating point values has been improved.<br/>+XXX what in addition to hexadecimal floats? if nothing, change the head2.<br/>+<br/>+As a completely new feature, hexadecimal floating point literals<br/>+(like 0x1.23p-4) are now supported, and they can be output with<br/>+C&lt;printf %a&gt;.<br/> <br/> =head1 Security<br/> <br/>diff --git a/t/harness b/t/harness<br/>index 2b47313..a8a8d9a 100644<br/>--- a/t/harness<br/>+++ b/t/harness<br/>@@ -219,6 +219,7 @@ my $h = TAP::Harness-&gt;new({<br/> color =&gt; $color,<br/> jobs =&gt; $jobs,<br/> verbosity =&gt; $Verbose,<br/>+ timer =&gt; $ENV{HARNESS_TIMER},<br/> exec =&gt; sub {<br/> my ($harness, $test) = @_;<br/> <br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41670.html Wed, 20 Aug 2014 13:50:05 +0000 [perl.git] branch blead, updated. v5.21.2-213-gff4eb39 by Jarkko Hietaniemi In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/ff4eb3984da9fdf3cec4f01cf752e4e7da44139f?hp=2bb3725dfe9edb3ec056dbc691826cda14d85a48&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit ff4eb3984da9fdf3cec4f01cf752e4e7da44139f<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 12:41:41 2014 -0400<br/><br/> Separate grok_infnan() from grok_number().<br/> <br/> Remaining issues:<br/> <br/> (1) would need tests, but there are two problems: [a] generating inf/nan<br/> reliably and testing for it from Perl level is hard (see items (2) and<br/> (3) below), and [b] the behavior of various systems with especially NaN<br/> differs (some platforms might throw SIGFPEs).<br/> <br/> (2) toke.c:scan_number() will not call this code (via grok_number)<br/> because &quot;NaN&quot; or &quot;Inf&quot; do not look at all like floats to it.<br/> <br/> (3) Even as we now recognize these forms, the native strtod()<br/> might not (problem of cross-portability of these exceptional<br/> forms: Win32 outputs e.g. &quot;1.#INF&quot;, what Linux reading this should do,<br/> or conversely Linux outputs &quot;Inf&quot;, what should Win32 do?)<br/><br/>M embed.fnc<br/>M embed.h<br/>M numeric.c<br/>M proto.h<br/><br/>commit 8b7fad815cf65ab870e666844e22045c74803f64<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 11:31:50 2014 -0400<br/><br/> Perl_signbit should return non-zero for -0.<br/><br/>M numeric.c<br/><br/>commit 796ea9eaccedab99893280ca6440b2b90d30d79a<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 10:55:13 2014 -0400<br/><br/> Win32 apparently has _isnan() and _finite(), and _fpclass().<br/> <br/> (At least, if one believes the Oracle of Google.)<br/><br/>M perl.h<br/><br/>commit c6d2504ab80fdcbcb0f6fde4293d40802200ac54<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 09:12:09 2014 -0400<br/><br/> Use Perl_isfinite().<br/> <br/> Also kill obsolete/wrong comment: Perl_frexp is not casting its<br/> argument to NV, and if USE_LONG_DOUBLE Perl_frexp is frexpl.<br/> And if we do have long double and don&#39;t have frexpl, it is unclear<br/> what should we do? (in this particular case, casting to double might<br/> be the best possible thing to do anyway.)<br/><br/>M sv.c<br/><br/>commit d06fe7d139b7c70395a8c63ea1f519132ed4226a<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:23:17 2014 -0400<br/><br/> Perl_isinf enhancements.<br/> <br/> Try isfinitel first, and require Perl_isnan.<br/><br/>M perl.h<br/><br/>commit 4c20d4c935c843f71412e6763e9c2c32c8e0c576<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:56:48 2014 -0400<br/><br/> OSX does have isfinite(), and 10.9+ prefers it over finite().<br/> <br/> isfinite() is a macro+inline while Configure tests it as a library symbol.<br/><br/>M hints/darwin.sh<br/><br/>commit 4efd38a49acddd858e6fa57ad6f55eca523d0829<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:55:23 2014 -0400<br/><br/> Perl_isfinite() enhancements.<br/> <br/> Use isfinitel() if available, prefer C99 isfinite() over BSD finite().<br/><br/>M perl.h<br/><br/>commit fa484e6086b60c4cc6a365098cfb23e1c00d69a9<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 09:57:06 2014 -0400<br/><br/> Configure for isfinitel / isinfl.<br/><br/>M Configure<br/>M Cross/config.sh-arm-linux<br/>M NetWare/config.wc<br/>M Porting/Glossary<br/>M Porting/config.sh<br/>M config_h.SH<br/>M configure.com<br/>M plan9/config_sh.sample<br/>M symbian/config.sh<br/>M uconfig.h<br/>M uconfig.sh<br/>M uconfig64.sh<br/>M win32/config.ce<br/>M win32/config.gc<br/>M win32/config.vc<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> Configure | 12 ++++<br/> Cross/config.sh-arm-linux | 2 +<br/> NetWare/config.wc | 2 +<br/> Porting/Glossary | 8 +++<br/> Porting/config.sh | 2 +<br/> config_h.SH | 13 +++++<br/> configure.com | 2 +<br/> embed.fnc | 1 +<br/> embed.h | 1 +<br/> hints/darwin.sh | 9 +++<br/> numeric.c | 145 +++++++++++++++++++++++++++++++++++++---------<br/> perl.h | 64 +++++++++++++++-----<br/> plan9/config_sh.sample | 2 +<br/> proto.h | 6 ++<br/> sv.c | 8 +--<br/> symbian/config.sh | 2 +<br/> uconfig.h | 17 +++++-<br/> uconfig.sh | 2 +<br/> uconfig64.sh | 2 +<br/> win32/config.ce | 2 +<br/> win32/config.gc | 2 +<br/> win32/config.vc | 2 +<br/> 22 files changed, 259 insertions(+), 47 deletions(-)<br/><br/>diff --git a/Configure b/Configure<br/>index 0d45e13..a67a2c9 100755<br/>--- a/Configure<br/>+++ b/Configure<br/>@@ -579,7 +579,9 @@ d_int64_t=&#39;&#39;<br/> d_isascii=&#39;&#39;<br/> d_isblank=&#39;&#39;<br/> d_isfinite=&#39;&#39;<br/>+d_isfinitel=&#39;&#39;<br/> d_isinf=&#39;&#39;<br/>+d_isinfl=&#39;&#39;<br/> d_isnan=&#39;&#39;<br/> d_isnanl=&#39;&#39;<br/> d_killpg=&#39;&#39;<br/>@@ -15439,10 +15441,18 @@ $rm -f isblank*<br/> set isfinite d_isfinite<br/> eval $inlibc<br/> <br/>+: see if isfinitel exists<br/>+set isfinitel d_isfinitel<br/>+eval $inlibc<br/>+<br/> : see if isinf exists<br/> set isinf d_isinf<br/> eval $inlibc<br/> <br/>+: see if isinfl exists<br/>+set isinfl d_isinfl<br/>+eval $inlibc<br/>+<br/> : see if isnan exists<br/> set isnan d_isnan<br/> eval $inlibc<br/>@@ -23308,7 +23318,9 @@ d_ipv6_mreq_source=&#39;$d_ipv6_mreq_source&#39;<br/> d_isascii=&#39;$d_isascii&#39;<br/> d_isblank=&#39;$d_isblank&#39;<br/> d_isfinite=&#39;$d_isfinite&#39;<br/>+d_isfinitel=&#39;$d_isfinitel&#39;<br/> d_isinf=&#39;$d_isinf&#39;<br/>+d_isinfl=&#39;$d_isinfl&#39;<br/> d_isnan=&#39;$d_isnan&#39;<br/> d_isnanl=&#39;$d_isnanl&#39;<br/> d_killpg=&#39;$d_killpg&#39;<br/>diff --git a/Cross/config.sh-arm-linux b/Cross/config.sh-arm-linux<br/>index abccb2c..b7a33fd 100644<br/>--- a/Cross/config.sh-arm-linux<br/>+++ b/Cross/config.sh-arm-linux<br/>@@ -294,7 +294,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;define&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;define&#39;<br/>+d_isinfl=&#39;define&#39;<br/> d_isnan=&#39;define&#39;<br/> d_isnanl=&#39;define&#39;<br/> d_killpg=&#39;define&#39;<br/>diff --git a/NetWare/config.wc b/NetWare/config.wc<br/>index fde25b1..a8fa036 100644<br/>--- a/NetWare/config.wc<br/>+++ b/NetWare/config.wc<br/>@@ -283,7 +283,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;define&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;undef&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;undef&#39;<br/> d_isnanl=&#39;undef&#39;<br/> d_killpg=&#39;undef&#39;<br/>diff --git a/Porting/Glossary b/Porting/Glossary<br/>index 04d112f..7bd9a40 100644<br/>--- a/Porting/Glossary<br/>+++ b/Porting/Glossary<br/>@@ -1309,10 +1309,18 @@ d_isfinite (d_isfinite.U):<br/> This variable conditionally defines the HAS_ISFINITE symbol, which<br/> indicates to the C program that the isfinite() routine is available.<br/> <br/>+d_isfinitel (d_isfinitel.U):<br/>+ This variable conditionally defines the HAS_ISFINITEL symbol, which<br/>+ indicates to the C program that the isfinitel() routine is available.<br/>+<br/> d_isinf (d_isinf.U):<br/> This variable conditionally defines the HAS_ISINF symbol, which<br/> indicates to the C program that the isinf() routine is available.<br/> <br/>+d_isinfl (d_isinfl.U):<br/>+ This variable conditionally defines the HAS_ISINFL symbol, which<br/>+ indicates to the C program that the isinfl() routine is available.<br/>+<br/> d_isnan (d_isnan.U):<br/> This variable conditionally defines the HAS_ISNAN symbol, which<br/> indicates to the C program that the isnan() routine is available.<br/>diff --git a/Porting/config.sh b/Porting/config.sh<br/>index 6f76268..0004af2 100644<br/>--- a/Porting/config.sh<br/>+++ b/Porting/config.sh<br/>@@ -303,7 +303,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;define&#39;<br/> d_isblank=&#39;define&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;define&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;define&#39;<br/> d_isnanl=&#39;define&#39;<br/> d_killpg=&#39;define&#39;<br/>diff --git a/config_h.SH b/config_h.SH<br/>index 5dad556..f8c4fed 100755<br/>--- a/config_h.SH<br/>+++ b/config_h.SH<br/>@@ -3763,12 +3763,25 @@ sed &lt;&lt;!GROK!THIS! &gt;$CONFIG_H -e &#39;s!^#undef\(.*/\)\*!/\*#define\1 \*!&#39; -e &#39;s!^#un<br/> */<br/> #$d_isfinite HAS_ISFINITE /**/<br/> <br/>+/* HAS_ISFINITEL:<br/>+ * This symbol, if defined, indicates that the isfinite routine is<br/>+ * available to check whether a long double is finitel<br/>+ * (non-infinity non-NaN).<br/>+ */<br/>+#$d_isfinitel HAS_ISFINITEL /**/<br/>+<br/> /* HAS_ISINF:<br/> * This symbol, if defined, indicates that the isinf routine is<br/> * available to check whether a double is an infinity.<br/> */<br/> #$d_isinf HAS_ISINF /**/<br/> <br/>+/* HAS_ISINF:<br/>+ * This symbol, if defined, indicates that the isinf routine is<br/>+ * available to check whether a long double is an infinity.<br/>+ */<br/>+#$d_isinfl HAS_ISINFL /**/<br/>+<br/> /* HAS_ISNAN:<br/> * This symbol, if defined, indicates that the isnan routine is<br/> * available to check whether a double is a NaN.<br/>diff --git a/configure.com b/configure.com<br/>index 1fb5fb3..26d0ee8 100644<br/>--- a/configure.com<br/>+++ b/configure.com<br/>@@ -6070,7 +6070,9 @@ $ WC &quot;d_isfinite=&#39;define&#39;&quot;<br/> $ ELSE<br/> $ WC &quot;d_isfinite=&#39;undef&#39;&quot;<br/> $ ENDIF<br/>+$ WC &quot;d_isfinitel=&#39;undef&#39;&quot;<br/> $ WC &quot;d_isinf=&#39;undef&#39;&quot;<br/>+$ WC &quot;d_isinfl=&#39;undef&#39;&quot;<br/> $ WC &quot;d_isnan=&#39;&quot; + d_isnan + &quot;&#39;&quot;<br/> $ WC &quot;d_isnanl=&#39;&quot; + d_isnanl + &quot;&#39;&quot;<br/> $ WC &quot;d_killpg=&#39;undef&#39;&quot;<br/>diff --git a/embed.fnc b/embed.fnc<br/>index 0bde316..97d0d99 100644<br/>--- a/embed.fnc<br/>+++ b/embed.fnc<br/>@@ -803,6 +803,7 @@ EMsPR |char*|form_short_octal_warning|NN const char * const s \<br/> |const STRLEN len<br/> #endif<br/> Apd |UV |grok_hex |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result<br/>+Apdn |int |grok_infnan |NN const char** sp|NN const char *send<br/> Apd |int |grok_number |NN const char *pv|STRLEN len|NULLOK UV *valuep<br/> Apd |int |grok_number_flags|NN const char *pv|STRLEN len|NULLOK UV *valuep|U32 flags<br/> ApdR |bool |grok_numeric_radix|NN const char **sp|NN const char *send<br/>diff --git a/embed.h b/embed.h<br/>index 7b8d471..be519f2 100644<br/>--- a/embed.h<br/>+++ b/embed.h<br/>@@ -173,6 +173,7 @@<br/> #define grok_atou Perl_grok_atou<br/> #define grok_bin(a,b,c,d) Perl_grok_bin(aTHX_ a,b,c,d)<br/> #define grok_hex(a,b,c,d) Perl_grok_hex(aTHX_ a,b,c,d)<br/>+#define grok_infnan Perl_grok_infnan<br/> #define grok_number(a,b,c) Perl_grok_number(aTHX_ a,b,c)<br/> #define grok_number_flags(a,b,c,d) Perl_grok_number_flags(aTHX_ a,b,c,d)<br/> #define grok_numeric_radix(a,b) Perl_grok_numeric_radix(aTHX_ a,b)<br/>diff --git a/hints/darwin.sh b/hints/darwin.sh<br/>index 7c3f818..724fb36 100644<br/>--- a/hints/darwin.sh<br/>+++ b/hints/darwin.sh<br/>@@ -24,6 +24,15 @@ case &quot;$osvers&quot; in<br/> ;;<br/> esac<br/> <br/>+# finite() deprecated in 10.9, use isfinite() instead.<br/>+case &quot;$osvers&quot; in<br/>+[1-8].*) ;;<br/>+*) d_finite=&#39;undef&#39; ;;<br/>+esac<br/>+<br/>+# The Configure checks isfinite as libc symbol, but it is a macro+inline.<br/>+d_isfinite=&#39;define&#39;<br/>+<br/> # This was previously used in all but causes three cases<br/> # (no -Ddprefix=, -Dprefix=/usr, -Dprefix=/some/thing/else)<br/> # but that caused too much grief.<br/>diff --git a/numeric.c b/numeric.c<br/>index a203bf5..f179503 100644<br/>--- a/numeric.c<br/>+++ b/numeric.c<br/>@@ -586,6 +586,103 @@ Perl_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep)<br/> return grok_number_flags(pv, len, valuep, 0);<br/> }<br/> <br/>+/*<br/>+=for apidoc grok_infnan<br/>+<br/>+Helper for grok_number(), accepts various ways of spelling &quot;infinity&quot;<br/>+or &quot;not a number&quot;, and returns one of the following flag combinations:<br/>+<br/>+ IS_NUMBER_INFINITE<br/>+ IS_NUMBER_NAN<br/>+ IS_NUMBER_INFINITE | IS_NUMBER_NEG<br/>+ IS_NUMBER_NAN | IS_NUMBER_NEG<br/>+ 0<br/>+<br/>+If an infinity or not-a-number is recognized, the *sp will point to<br/>+one past the end of the recognized string. If the recognition fails,<br/>+zero is returned, and the *sp will not move.<br/>+<br/>+=cut<br/>+*/<br/>+<br/>+int<br/>+Perl_grok_infnan(const char** sp, const char* send)<br/>+{<br/>+ const char* s = *sp;<br/>+ int flags = 0;<br/>+<br/>+ PERL_ARGS_ASSERT_GROK_INFNAN;<br/>+<br/>+ if (*s == &#39;-&#39;) {<br/>+ flags |= IS_NUMBER_NEG; /* Yes, -NaN happens. Incorrect but happens. */<br/>+ s++; if (s == send) return 0;<br/>+ }<br/>+<br/>+ if (*s == &#39;1&#39;) {<br/>+ /* Visual C: 1.#SNAN, -1.#QNAN, 1#INF, 1#.IND (maybe also 1.#NAN) */<br/>+ s++; if (s == send) return 0;<br/>+ if (*s == &#39;.&#39;) {<br/>+ s++; if (s == send) return 0;<br/>+ }<br/>+ if (*s == &#39;#&#39;) {<br/>+ s++; if (s == send) return 0;<br/>+ } else<br/>+ return 0;<br/>+ }<br/>+<br/>+ if (*s == &#39;I&#39; || *s == &#39;i&#39;) {<br/>+ /* INF or IND (1.#IND is indeterminate, a certain type of NAN) */<br/>+ s++; if (s == send || (*s != &#39;N&#39; &amp;&amp; *s != &#39;n&#39;)) return 0;<br/>+ s++; if (s == send) return 0;<br/>+ if (*s == &#39;F&#39; || *s == &#39;f&#39;) {<br/>+ s++;<br/>+ if (s &lt; send &amp;&amp; (*s == &#39;I&#39; || *s == &#39;i&#39;)) {<br/>+ s++; if (s == send || (*s != &#39;N&#39; &amp;&amp; *s != &#39;n&#39;)) return 0;<br/>+ s++; if (s == send || (*s != &#39;I&#39; &amp;&amp; *s != &#39;i&#39;)) return 0;<br/>+ s++; if (s == send || (*s != &#39;T&#39; &amp;&amp; *s != &#39;t&#39;)) return 0;<br/>+ /* XXX maybe also grok &quot;infinite&quot;? */<br/>+ s++; if (s == send || (*s != &#39;Y&#39; &amp;&amp; *s != &#39;y&#39;)) return 0;<br/>+ s++;<br/>+ } else if (*s)<br/>+ return 0;<br/>+ flags |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;<br/>+ }<br/>+ else if (*s == &#39;D&#39; || *s == &#39;d&#39;) {<br/>+ s++;<br/>+ flags |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;<br/>+ } else<br/>+ return 0;<br/>+<br/>+ *sp = s;<br/>+ return flags;<br/>+ }<br/>+ else {<br/>+ /* NAN */<br/>+ if (*s == &#39;S&#39; || *s == &#39;s&#39; || *s == &#39;Q&#39; || *s == &#39;q&#39;) {<br/>+ /* snan, qNaN */<br/>+ /* XXX do something with the snan/qnan difference */<br/>+ s++; if (s == send || (*s != &#39;N&#39; &amp;&amp; *s != &#39;n&#39;)) return 0;<br/>+ }<br/>+<br/>+ if (*s == &#39;N&#39; || *s == &#39;n&#39;) {<br/>+ s++; if (s == send || (*s != &#39;A&#39; &amp;&amp; *s != &#39;a&#39;)) return 0;<br/>+ s++; if (s == send || (*s != &#39;N&#39; &amp;&amp; *s != &#39;n&#39;)) return 0;<br/>+ s++;<br/>+<br/>+ /* NaN can be followed by various stuff since there are<br/>+ * multiple different NaN values, and some implementations<br/>+ * output the &quot;payload&quot; values, e.g. NaN123. */<br/>+<br/>+ flags |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;<br/>+ }<br/>+<br/>+ *sp = s;<br/>+ return flags;<br/>+ }<br/>+<br/>+ return 0;<br/>+}<br/>+<br/> static const UV uv_max_div_10 = UV_MAX / 10;<br/> static const U8 uv_max_mod_10 = UV_MAX % 10;<br/> <br/>@@ -724,31 +821,25 @@ Perl_grok_number_flags(pTHX_ const char *pv, STRLEN len, UV *valuep, U32 flags)<br/> }<br/> else<br/> return 0;<br/>- } else if (*s == &#39;I&#39; || *s == &#39;i&#39;) {<br/>- s++; if (s == send || (*s != &#39;N&#39; &amp;&amp; *s != &#39;n&#39;)) return 0;<br/>- s++; if (s == send || (*s != &#39;F&#39; &amp;&amp; *s != &#39;f&#39;)) return 0;<br/>- s++; if (s &lt; send &amp;&amp; (*s == &#39;I&#39; || *s == &#39;i&#39;)) {<br/>- s++; if (s == send || (*s != &#39;N&#39; &amp;&amp; *s != &#39;n&#39;)) return 0;<br/>- s++; if (s == send || (*s != &#39;I&#39; &amp;&amp; *s != &#39;i&#39;)) return 0;<br/>- s++; if (s == send || (*s != &#39;T&#39; &amp;&amp; *s != &#39;t&#39;)) return 0;<br/>- s++; if (s == send || (*s != &#39;Y&#39; &amp;&amp; *s != &#39;y&#39;)) return 0;<br/>- s++;<br/>- }<br/>- sawinf = 1;<br/>- } else if (*s == &#39;N&#39; || *s == &#39;n&#39;) {<br/>- /* XXX TODO: There are signaling NaNs and quiet NaNs. */<br/>- s++; if (s == send || (*s != &#39;A&#39; &amp;&amp; *s != &#39;a&#39;)) return 0;<br/>- s++; if (s == send || (*s != &#39;N&#39; &amp;&amp; *s != &#39;n&#39;)) return 0;<br/>- s++;<br/>- sawnan = 1;<br/>- } else<br/>- return 0;<br/>+ }<br/>+ else {<br/>+ int infnan_flags = Perl_grok_infnan(&amp;s, send);<br/>+ if ((infnan_flags &amp; IS_NUMBER_INFINITY)) {<br/>+ numtype |= infnan_flags;<br/>+ sawinf = 1;<br/>+ }<br/>+ else if ((infnan_flags &amp; IS_NUMBER_NAN)) {<br/>+ numtype |= infnan_flags;<br/>+ sawnan = 1;<br/>+ } else<br/>+ return 0;<br/>+ }<br/> <br/> if (sawinf) {<br/>- numtype &amp;= IS_NUMBER_NEG; /* Keep track of sign */<br/>+ /* Keep the sign for infinity. */<br/> numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;<br/> } else if (sawnan) {<br/>- numtype &amp;= IS_NUMBER_NEG; /* Keep track of sign */<br/>+ numtype &amp;= IS_NUMBER_NEG; /* Clear sign for nan. */<br/> numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;<br/> } else if (s &lt; send) {<br/> /* we can have an optional exponent part */<br/>@@ -1204,11 +1295,8 @@ it is not.<br/> <br/> If Configure detects this system has a signbit() that will work with<br/> our NVs, then we just use it via the #define in perl.h. Otherwise,<br/>-fall back on this implementation. As a first pass, this gets everything<br/>-right except -0.0. Alas, catching -0.0 is the main use for this function,<br/>-so this is not too helpful yet. Still, at least we have the scaffolding<br/>-in place to support other systems, should that prove useful.<br/>-<br/>+fall back on this implementation. The main use of this function<br/>+is catching -0.0.<br/> <br/> Configure notes: This function is called &#39;Perl_signbit&#39; instead of a<br/> plain &#39;signbit&#39; because it is easy to imagine a system having a signbit()<br/>@@ -1224,7 +1312,12 @@ Users should just always call Perl_signbit().<br/> #if !defined(HAS_SIGNBIT)<br/> int<br/> Perl_signbit(NV x) {<br/>+# ifdef Perl_fp_class_nzero<br/>+ if (x == 0)<br/>+ return Perl_fp_class_nzero(x);<br/>+# else<br/> return (x &lt; 0.0) ? 1 : 0;<br/>+# endif<br/> }<br/> #endif<br/> <br/>diff --git a/perl.h b/perl.h<br/>index ece022d..31cb581 100644<br/>--- a/perl.h<br/>+++ b/perl.h<br/>@@ -1922,10 +1922,22 @@ EXTERN_C long double modfl(long double, long double *);<br/> # endif<br/> # endif<br/> # ifndef Perl_isinf<br/>-# ifdef HAS_FINITEL<br/>+# if defined(HAS_ISFINITEL) &amp;&amp; defined(Perl_isnan)<br/>+# define Perl_isinf(x) !(isfinitel(x)||Perl_isnan(x))<br/>+# endif<br/>+# endif<br/>+# ifndef Perl_isinf<br/>+# if defined(HAS_FINITEL) &amp;&amp; defined(Perl_isnan)<br/> # define Perl_isinf(x) !(finitel(x)||Perl_isnan(x))<br/> # endif<br/> # endif<br/>+# ifndef Perl_isfinite<br/>+# ifdef HAS_ISFINITEL<br/>+# define Perl_isfinite(x) isfinitel(x)<br/>+# elif defined(HAS_FINITEL)<br/>+# define Perl_isfinite(x) finitel(x)<br/>+# endif<br/>+# endif<br/> #else<br/> # define NV_DIG DBL_DIG<br/> # ifdef DBL_MANT_DIG<br/>@@ -1975,8 +1987,6 @@ EXTERN_C long double modfl(long double, long double *);<br/> # define Perl_ldexp(x,y) ldexp(x,y)<br/> #endif<br/> <br/>-/* rumor has it that Win32 has _fpclass() */<br/>-<br/> /* SGI has fpclassl... but not with the same result values,<br/> * and it&#39;s via a typedef (not via #define), so will need to redo Configure<br/> * to use. Not worth the trouble, IMO, at least until the below is used<br/>@@ -2070,7 +2080,34 @@ EXTERN_C long double modfl(long double, long double *);<br/> # define Perl_fp_class_zero(x) (Perl_fp_class(x)==FP_MINUS_ZERO||Perl_fp_class(x)==FP_PLUS_ZERO)<br/> #endif<br/> <br/>-/* rumor has it that Win32 has _isnan() */<br/>+#ifdef WIN32<br/>+# ifndef Perl_isnan<br/>+# define Perl_isnan(x) _isnan(x)<br/>+# endif<br/>+# ifndef Perl_isfinite<br/>+# define Perl_isfinite(x) _finite(x)<br/>+# endif<br/>+# ifndef Perl_fp_class_snan<br/>+# define Perl_fp_class_snan(x) (_fpclass(x) &amp; _FPCLASS_SNAN)<br/>+# define Perl_fp_class_qnan(x) (_fpclass(x) &amp; _FPCLASS_QNAN)<br/>+# define Perl_fp_class_nan(x) (_fpclass(x) &amp; (_FPCLASS_QNAN|_FPCLASS_QNAN))<br/>+# define Perl_fp_class_ninf(x) (_fpclass(x) &amp; _FPCLASS_NINF))<br/>+# define Perl_fp_class_pinf(x) (_fpclass(x) &amp; _FPCLASS_PINF))<br/>+# define Perl_fp_class_inf(x) (_fpclass(x) &amp; (_FPCLASS_NINF|_FPCLASS_PINF))<br/>+# define Perl_fp_class_nnorm(x) (_fpclass(x) &amp; _FPCLASS_NN)<br/>+# define Perl_fp_class_pnorm(x) (_fpclass(x) &amp; _FPCLASS_PN)<br/>+# define Perl_fp_class_norm(x) (_fpclass(x) &amp; (_FPCLASS_NN|_FPCLASS_PN))<br/>+# define Perl_fp_class_ndenorm(x) (_fpclass(x) &amp; _FPCLASS_ND)<br/>+# define Perl_fp_class_pdenorm(x) (_fpclass(x) &amp; _FPCLASS_PD)<br/>+# define Perl_fp_class_denorm(x) (_fpclass(x) &amp; (_FPCLASS_ND|_FPCLASS_PD))<br/>+# define Perl_fp_class_nzero(x) (_fpclass(x) &amp; _FPCLASS_NZ)<br/>+# define Perl_fp_class_pzero(x) (_fpclass(x) &amp; _FPCLASS_PZ)<br/>+# define Perl_fp_class_zero(x) (_fpclass(x) &amp; (_FPCLASS_NZ|_FPCLASS_PZ))<br/>+# endif<br/>+# ifndef Perl_isinf<br/>+# define Perl_isinf(x) Perl_fp_class_inf(x)<br/>+# endif<br/>+#endif<br/> <br/> #ifndef Perl_isnan<br/> # ifdef HAS_ISNAN<br/>@@ -2105,18 +2142,17 @@ int isnan(double d);<br/> #endif<br/> <br/> #ifndef Perl_isfinite<br/>-# ifdef HAS_FINITE<br/>+# ifdef HAS_ISFINITE<br/>+# define Perl_isfinite(x) isfinite((NV)x)<br/>+# elif defined(HAS_FINITE)<br/> # define Perl_isfinite(x) finite((NV)x)<br/>+# elif defined(Perl_fp_class_finite)<br/>+# define Perl_isfinite(x) Perl_fp_class_finite(x)<br/>+# elif defined(Perl_is_inf) &amp;&amp; defined(Perl_is_nan)<br/>+# define Perl_isfinite(x) !(Perl_is_inf(x)||Perl_is_nan(x))<br/> # else<br/>-# ifdef HAS_ISFINITE<br/>-# define Perl_isfinite(x) isfinite(x)<br/>-# else<br/>-# ifdef Perl_fp_class_finite<br/>-# define Perl_isfinite(x) Perl_fp_class_finite(x)<br/>-# else<br/>-# define Perl_isfinite(x) !(Perl_is_inf(x)||Perl_is_nan(x))<br/>-# endif<br/>-# endif<br/>+/* NaN*0 is NaN, [+-]Inf*0 is NaN, zero for anything else. */<br/>+# define Perl_isfinite(x) (((x) * 0) == 0)<br/> # endif<br/> #endif<br/> <br/>diff --git a/plan9/config_sh.sample b/plan9/config_sh.sample<br/>index bbe15af..8632ccc 100644<br/>--- a/plan9/config_sh.sample<br/>+++ b/plan9/config_sh.sample<br/>@@ -294,7 +294,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;undef&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;undef&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;undef&#39;<br/> d_isnanl=&#39;undef&#39;<br/> d_killpg=&#39;undef&#39;<br/>diff --git a/proto.h b/proto.h<br/>index 19ec194..df4b9e2 100644<br/>--- a/proto.h<br/>+++ b/proto.h<br/>@@ -1308,6 +1308,12 @@ PERL_CALLCONV UV Perl_grok_hex(pTHX_ const char* start, STRLEN* len_p, I32* flag<br/> #define PERL_ARGS_ASSERT_GROK_HEX \<br/> assert(start); assert(len_p); assert(flags)<br/> <br/>+PERL_CALLCONV int Perl_grok_infnan(const char** sp, const char *send)<br/>+ __attribute__nonnull__(1)<br/>+ __attribute__nonnull__(2);<br/>+#define PERL_ARGS_ASSERT_GROK_INFNAN \<br/>+ assert(sp); assert(send)<br/>+<br/> PERL_CALLCONV int Perl_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep)<br/> __attribute__nonnull__(pTHX_1);<br/> #define PERL_ARGS_ASSERT_GROK_NUMBER \<br/>diff --git a/sv.c b/sv.c<br/>index 92c34a8..8f208be 100644<br/>--- a/sv.c<br/>+++ b/sv.c<br/>@@ -11701,12 +11701,10 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p<br/> : SvNV(argsv);<br/> <br/> need = 0;<br/>- /* nv * 0 will be NaN for NaN, +Inf and -Inf, and 0 for anything<br/>- else. frexp() has some unspecified behaviour for those three */<br/>- if (c != &#39;e&#39; &amp;&amp; c != &#39;E&#39; &amp;&amp; (nv * 0) == 0) {<br/>+ /* frexp() has some unspecified behaviour for nan/inf,<br/>+ * so let&#39;s avoid calling that. */<br/>+ if (c != &#39;e&#39; &amp;&amp; c != &#39;E&#39; &amp;&amp; Perl_isfinite(nv)) {<br/> i = PERL_INT_MIN;<br/>- /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this<br/>- will cast our (long double) to (double) */<br/> (void)Perl_frexp(nv, &amp;i);<br/> if (i == PERL_INT_MIN)<br/> Perl_die(aTHX_ &quot;panic: frexp&quot;);<br/>diff --git a/symbian/config.sh b/symbian/config.sh<br/>index 27f5a5b..52cae85 100644<br/>--- a/symbian/config.sh<br/>+++ b/symbian/config.sh<br/>@@ -240,7 +240,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;undef&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;undef&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;undef&#39;<br/> d_isnanl=&#39;undef&#39;<br/> d_killpg=&#39;undef&#39;<br/>diff --git a/uconfig.h b/uconfig.h<br/>index 17a7630..522e960 100644<br/>--- a/uconfig.h<br/>+++ b/uconfig.h<br/>@@ -3728,12 +3728,25 @@<br/> */<br/> /*#define HAS_ISFINITE / **/<br/> <br/>+/* HAS_ISFINITEL:<br/>+ * This symbol, if defined, indicates that the isfinite routine is<br/>+ * available to check whether a long double is finitel<br/>+ * (non-infinity non-NaN).<br/>+ */<br/>+/*#define HAS_ISFINITEL / **/<br/>+<br/> /* HAS_ISINF:<br/> * This symbol, if defined, indicates that the isinf routine is<br/> * available to check whether a double is an infinity.<br/> */<br/> /*#define HAS_ISINF / **/<br/> <br/>+/* HAS_ISINF:<br/>+ * This symbol, if defined, indicates that the isinf routine is<br/>+ * available to check whether a long double is an infinity.<br/>+ */<br/>+/*#define HAS_ISINFL / **/<br/>+<br/> /* HAS_ISNAN:<br/> * This symbol, if defined, indicates that the isnan routine is<br/> * available to check whether a double is a NaN.<br/>@@ -4769,6 +4782,6 @@<br/> #endif<br/> <br/> /* Generated from:<br/>- * 394b82a122b70b8af04c1a412f13b605c9c555b2d3ac7701aa3ef78debe46e6b config_h.SH<br/>- * 98397a7d818a024628d6b34e5903a8f408da96601a2a19471c480511f3c8d914 uconfig.sh<br/>+ * 3a8b6e52ff62682a65ae8226490afb36ea008df0a79fd0d937208d700652f767 config_h.SH<br/>+ * 3d7a2b8d30cfcbe1bd9cc89f0f87458c63713edef6604af2eb999f63eb6db629 uconfig.sh<br/> * ex: set ro: */<br/>diff --git a/uconfig.sh b/uconfig.sh<br/>index 15fd327..8245138 100644<br/>--- a/uconfig.sh<br/>+++ b/uconfig.sh<br/>@@ -233,7 +233,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;undef&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;undef&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;undef&#39;<br/> d_isnanl=&#39;undef&#39;<br/> d_killpg=&#39;undef&#39;<br/>diff --git a/uconfig64.sh b/uconfig64.sh<br/>index 06537c3..2d4b7e4 100644<br/>--- a/uconfig64.sh<br/>+++ b/uconfig64.sh<br/>@@ -234,7 +234,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;undef&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;undef&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;undef&#39;<br/> d_isnanl=&#39;undef&#39;<br/> d_killpg=&#39;undef&#39;<br/>diff --git a/win32/config.ce b/win32/config.ce<br/>index 78254ee..eef6ea8 100644<br/>--- a/win32/config.ce<br/>+++ b/win32/config.ce<br/>@@ -281,7 +281,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;define&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;undef&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;define&#39;<br/> d_isnanl=&#39;undef&#39;<br/> d_killpg=&#39;undef&#39;<br/>diff --git a/win32/config.gc b/win32/config.gc<br/>index 94e3596..e772c77 100644<br/>--- a/win32/config.gc<br/>+++ b/win32/config.gc<br/>@@ -281,7 +281,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;define&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;undef&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;define&#39;<br/> d_isnanl=&#39;undef&#39;<br/> d_killpg=&#39;define&#39;<br/>diff --git a/win32/config.vc b/win32/config.vc<br/>index a4ef314..66c5ec7 100644<br/>--- a/win32/config.vc<br/>+++ b/win32/config.vc<br/>@@ -281,7 +281,9 @@ d_ipv6_mreq_source=&#39;undef&#39;<br/> d_isascii=&#39;define&#39;<br/> d_isblank=&#39;undef&#39;<br/> d_isfinite=&#39;undef&#39;<br/>+d_isfinitel=&#39;undef&#39;<br/> d_isinf=&#39;undef&#39;<br/>+d_isinfl=&#39;undef&#39;<br/> d_isnan=&#39;define&#39;<br/> d_isnanl=&#39;undef&#39;<br/> d_killpg=&#39;define&#39;<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41669.html Wed, 20 Aug 2014 13:35:10 +0000 [perl.git] branch smoke-me/jhi/hexfp, deleted. v5.21.2-175-ga34ceeb by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/hexfp has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=a34ceebf323b37aeec07c3e53410f6e42d511e7b&gt;<br/><br/> was a34ceebf323b37aeec07c3e53410f6e42d511e7b<br/><br/>-----------------------------------------------------------------------<br/>a34ceebf323b37aeec07c3e53410f6e42d511e7b Add comment about special hexfp values to-do.<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41668.html Wed, 20 Aug 2014 12:23:47 +0000 [perl.git] branch smoke-me/jhi/floats, deleted. v5.21.2-177-g217c5bc by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/floats has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=217c5bcd4b991574335d8fad99d033073bbf11f8&gt;<br/><br/> was 217c5bcd4b991574335d8fad99d033073bbf11f8<br/><br/>-----------------------------------------------------------------------<br/>217c5bcd4b991574335d8fad99d033073bbf11f8 Separate grok_infnan() from grok_number().<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41667.html Wed, 20 Aug 2014 12:23:25 +0000 [perl.git] branch blead, updated. v5.21.2-205-g2bb3725 by Jarkko Hietaniemi In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/2bb3725dfe9edb3ec056dbc691826cda14d85a48?hp=db8b8c75c9ae410a0e47828e501550fa4f47e811&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 2bb3725dfe9edb3ec056dbc691826cda14d85a48<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Tue Aug 19 18:44:30 2014 -0400<br/><br/> Add todo comment about special hexfp values.<br/><br/>M sv.c<br/><br/>commit 6094cb95350921efd1cc9550c3c5dfedefa580cb<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Tue Aug 19 22:16:54 2014 -0400<br/><br/> Quadruple float BE test triggering had a typo.<br/><br/>M t/op/sprintf2.t<br/><br/>commit 0096dfabfd24cd5a57ff81d61186b2ffc50dbb6d<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 12:56:51 2014 -0400<br/><br/> Reduce double-double %a to single-double for now.<br/> <br/> How to exactly handle the second double is unknown, so for<br/> now extract the mantissa bits only from the first double.<br/> (Known platforms aix-ppc and linux-ppc.)<br/><br/>M sv.c<br/>M t/op/sprintf2.t<br/><br/>commit 288741806892d643315f5aac944e9ca60aad2171<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 17:04:06 2014 -0400<br/><br/> double-double needs the first mantissa bits of doubles.<br/><br/>M sv.c<br/><br/>commit e85ae363ea55e756d30efca06216f575419e9b9c<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 15:27:58 2014 -0400<br/><br/> Modify the hexfp exponent explicitly in each long double case.<br/><br/>M sv.c<br/><br/>commit 08780b356b3dfd25eb8df7d19c3f4af4a3511cb6<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:13:18 2014 -0400<br/><br/> Comment: scan_num also handles hexadecimal floats now.<br/><br/>M toke.c<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> sv.c | 119 ++++++++++++++++++++++++++++++++++++--------------------<br/> t/op/sprintf2.t | 52 ++++++++++++-------------<br/> toke.c | 7 ++--<br/> 3 files changed, 106 insertions(+), 72 deletions(-)<br/><br/>diff --git a/sv.c b/sv.c<br/>index 44f816b..92c34a8 100644<br/>--- a/sv.c<br/>+++ b/sv.c<br/>@@ -10610,14 +10610,16 @@ S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)<br/> * repetitions below, but usually only one (or sometimes two)<br/> * of them is really being used. */<br/> /* HEXTRACT_OUTPUT() extracts the high nybble first. */<br/>-#define HEXTRACT_OUTPUT() \<br/>+#define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] &gt;&gt; 4)<br/>+#define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] &amp; 0xF)<br/>+#define HEXTRACT_OUTPUT(ix) \<br/> STMT_START { \<br/>- *v++ = nvp[ix] &gt;&gt; 4; \<br/>- *v++ = nvp[ix] &amp; 0xF; \<br/>+ HEXTRACT_OUTPUT_HI(ix); \<br/>+ HEXTRACT_OUTPUT_LO(ix); \<br/> } STMT_END<br/>-#define HEXTRACT_COUNT() \<br/>+#define HEXTRACT_COUNT(ix, c) \<br/> STMT_START { \<br/>- v += 2; \<br/>+ v += c; \<br/> if (ix &lt; ixmin) \<br/> ixmin = ix; \<br/> else if (ix &gt; ixmax) \<br/>@@ -10644,10 +10646,11 @@ S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)<br/> HEXTRACT_IMPLICIT_BIT();<br/> for (ix = 13; ix &gt;= 0; ix--) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/>+ *exponent -= 4;<br/> # elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN<br/> /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:<br/> * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */<br/>@@ -10656,10 +10659,11 @@ S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)<br/> HEXTRACT_IMPLICIT_BIT();<br/> for (ix = 2; ix &lt;= 15; ix++) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/>+ *exponent -= 4;<br/> # elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN<br/> /* x86 80-bit &quot;extended precision&quot;, 64 bits of mantissa / fraction /<br/> * significand, 15 bits of exponent, 1 bit of sign. NVSIZE can<br/>@@ -10669,64 +10673,86 @@ S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)<br/> /* There explicitly is *no* implicit bit in this case. */<br/> for (ix = 7; ix &gt;= 0; ix--) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/>+ *exponent -= 4;<br/> # elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN<br/> /* The last 8 bytes are the mantissa/fraction.<br/> * (does this format ever happen?) */<br/> /* There explicitly is *no* implicit bit in this case. */<br/> for (ix = LONGDBLSIZE - 8; ix &lt; LONGDBLSIZE; ix++) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/>+ *exponent -= 4;<br/> # elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN<br/> /* Where is this used?<br/>- *<br/>- * Guessing that the format would be the reverse<br/>- * of big endian, i.e. for -0.1L:<br/>- * 9a 99 99 99 99 99 59 3c 9a 99 99 99 99 99 b9 bf */<br/>+ * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f */<br/> HEXTRACT_IMPLICIT_BIT();<br/>+ if (vend)<br/>+ HEXTRACT_OUTPUT_LO(14);<br/>+ else<br/>+ HEXTRACT_COUNT(14, 1);<br/> for (ix = 13; ix &gt;= 8; ix--) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/>+ /* XXX not extracting from the second double -- see the discussion<br/>+ * below for the big endian double double. */<br/>+# if 0<br/>+ if (vend)<br/>+ HEXTRACT_OUTPUT_LO(6);<br/>+ else<br/>+ HEXTRACT_COUNT(6, 1);<br/> for (ix = 5; ix &gt;= 0; ix--) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/>+# endif<br/>+ (*exponent)--;<br/> # elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN<br/> /* Used in e.g. PPC/Power (AIX) and MIPS.<br/> *<br/>- * The mantissa bits are in two separate stretches,<br/>- * e.g. for -0.1L:<br/>- * bf b9 99 99 99 99 99 9a 3c 59 99 99 99 99 99 9a<br/>- *<br/>- * Note that this blind copying might be considered not to be<br/>- * the right thing, since the first double already does<br/>- * rounding (0x9A as opposed to 0x99). But then again, we<br/>- * probably should just copy the bits as they are?<br/>+ * The mantissa bits are in two separate stretches, e.g. for -0.1L:<br/>+ * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a<br/> */<br/> HEXTRACT_IMPLICIT_BIT();<br/>+ if (vend)<br/>+ HEXTRACT_OUTPUT_LO(1);<br/>+ else<br/>+ HEXTRACT_COUNT(1, 1);<br/> for (ix = 2; ix &lt; 8; ix++) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>- }<br/>+ HEXTRACT_COUNT(ix, 2);<br/>+ }<br/>+ /* XXX not extracting the second double mantissa bits- this is not<br/>+ * right nor ideal (we effectively reduce the output format to<br/>+ * that of a &quot;single double&quot;, only 53 bits), but we do not know<br/>+ * exactly how to do the extraction correctly so that it matches<br/>+ * the semantics of, say, the IEEE quadruple float. */<br/>+# if 0<br/>+ if (vend)<br/>+ HEXTRACT_OUTPUT_LO(9);<br/>+ else<br/>+ HEXTRACT_COUNT(9, 1);<br/> for (ix = 10; ix &lt; 16; ix++) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/>+# endif<br/>+ (*exponent)--;<br/> # else<br/> Perl_croak(aTHX_<br/> &quot;Hexadecimal float: unsupported long double format&quot;);<br/>@@ -10777,17 +10803,17 @@ S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)<br/> /* Little endian. */<br/> for (ix = limit_byte; ix &gt;= 0; ix--) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/> # else<br/> /* Big endian. */<br/> for (ix = MANTISSASIZE - 1 - limit_byte; ix &lt; MANTISSASIZE; ix++) {<br/> if (vend)<br/>- HEXTRACT_OUTPUT();<br/>+ HEXTRACT_OUTPUT(ix);<br/> else<br/>- HEXTRACT_COUNT();<br/>+ HEXTRACT_COUNT(ix, 2);<br/> }<br/> # endif<br/> /* If there are not enough bits in MANTISSATYPE, we couldn&#39;t get<br/>@@ -11825,7 +11851,15 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p<br/> * human-readable xdigits. */<br/> const char* xdig = PL_hexdigit;<br/> int zerotail = 0; /* how many extra zeros to append */<br/>- int exponent; /* exponent of the floating point input */<br/>+ int exponent = 0; /* exponent of the floating point input */<br/>+<br/>+ /* XXX: denormals, NaN, Inf.<br/>+ *<br/>+ * For example with denormals, (assuming the vanilla<br/>+ * 64-bit double): the exponent is zero. 1xp-1074 is<br/>+ * the smallest denormal and the smallest double, it<br/>+ * should be output as 0x0.0000000000001p-1022 to<br/>+ * match its internal structure. */<br/> <br/> vend = S_hextract(aTHX_ nv, &amp;exponent, vhex, NULL);<br/> S_hextract(aTHX_ nv, &amp;exponent, vhex, vend);<br/>@@ -11862,9 +11896,10 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p<br/> }<br/> }<br/> <br/>- /* Adjust the exponent so that the first output<br/>- * xdigit aligns with the 4-bit nybbles. */<br/>- exponent -= NV_MANT_DIG % 4 ? NV_MANT_DIG % 4 : 4;<br/>+#if NVSIZE == DOUBLESIZE<br/>+ /* For long doubles S_hextract() took care of this. */<br/>+ exponent--;<br/>+#endif<br/> <br/> if (precis &gt; 0) {<br/> v = vhex + precis + 1;<br/>diff --git a/t/op/sprintf2.t b/t/op/sprintf2.t<br/>index 0969d58..4969abf 100644<br/>--- a/t/op/sprintf2.t<br/>+++ b/t/op/sprintf2.t<br/>@@ -132,9 +132,8 @@ if ($Config{nvsize} == 8 &amp;&amp;<br/> # IEEE 754 128-bit (&quot;quadruple precision&quot;), e.g. IA-64 (Itanium) in VMS<br/> $Config{nvsize} == 16 &amp;&amp;<br/> # 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f (LE), pack F is the NV<br/>- # (compare this with &quot;double-double&quot;)<br/> (pack(&quot;F&quot;, 0.1) =~ /^\x9A\x99{6}/ || # LE<br/>- pack(&quot;F&quot;, 0.1) =~ /\x99{6}x9A$/) # BE<br/>+ pack(&quot;F&quot;, 0.1) =~ /\x99{6}\x9A$/) # BE<br/> ) {<br/> @hexfloat = (<br/> [ &#39;%a&#39;, &#39;0&#39;, &#39;0x1p-1&#39; ],<br/>@@ -186,14 +185,13 @@ if ($Config{nvsize} == 8 &amp;&amp;<br/> } elsif (<br/> # &quot;double-double&quot;, two 64-bit doubles end to end<br/> $Config{nvsize} == 16 &amp;&amp;<br/>- # bf b9 99 99 99 99 99 9a 3c 59 99 99 99 99 99 9a (BE), pack F is the NV<br/>- # (compare this with &quot;quadruple precision&quot;)<br/>- (pack(&quot;F&quot;, 0.1) =~ /^\x9A\x99{5}\x59\x3C/ || # LE<br/>- pack(&quot;F&quot;, 0.1) =~ /\x3C\x59\x99{5}\x9A$/) # BE<br/>+ # bf b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE), pack F is the NV<br/>+ (pack(&quot;F&quot;, 0.1) =~ /^\x9A\x99{5}\x59\xBC/ || # LE<br/>+ pack(&quot;F&quot;, 0.1) =~ /\xBC\x59\x99{5}\x9A$/) # BE<br/> ) {<br/>- # XXX these values are probably slightly wrong, even if<br/>- # the double-double extraction code gets fixed, the exact<br/>- # truncation/rounding effects are unknown.<br/>+ # XXX these values are actually only &quot;single-double&quot; since<br/>+ # we currently do not know how to exactly handle the second<br/>+ # double. See the discussion in sv.c:S_hextract().<br/> @hexfloat = (<br/> [ &#39;%a&#39;, &#39;0&#39;, &#39;0x1p-1&#39; ],<br/> [ &#39;%a&#39;, &#39;1&#39;, &#39;0x1p+0&#39; ],<br/>@@ -201,16 +199,16 @@ if ($Config{nvsize} == 8 &amp;&amp;<br/> [ &#39;%a&#39;, &#39;0.5&#39;, &#39;0x1p-1&#39; ],<br/> [ &#39;%a&#39;, &#39;0.25&#39;, &#39;0x1p-2&#39; ],<br/> [ &#39;%a&#39;, &#39;0.75&#39;, &#39;0x1.8p-1&#39; ],<br/>- [ &#39;%a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>+ [ &#39;%a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851fp+1&#39; ],<br/> [ &#39;%a&#39;, &#39;-1&#39;, &#39;-0x1p+0&#39; ],<br/>- [ &#39;%a&#39;, &#39;-3.14&#39;, &#39;-0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>- [ &#39;%a&#39;, &#39;0.1&#39;, &#39;0x1.99999999999999999999999999ap-4&#39; ],<br/>- [ &#39;%a&#39;, &#39;1/7&#39;, &#39;0x1.249249249249249249249249249p-3&#39; ],<br/>- [ &#39;%a&#39;, &#39;sqrt(2)&#39;, &#39;0x1.6a09e667f3bcc908b2fb1366ea9p+0&#39; ],<br/>- [ &#39;%a&#39;, &#39;exp(1)&#39;, &#39;0x1.5bf0a8b1457695355fb8ac404e8p+1&#39; ],<br/>+ [ &#39;%a&#39;, &#39;-3.14&#39;, &#39;-0x1.91eb851eb851fp+1&#39; ],<br/>+ [ &#39;%a&#39;, &#39;0.1&#39;, &#39;0x1.999999999999ap-4&#39; ],<br/>+ [ &#39;%a&#39;, &#39;1/7&#39;, &#39;0x1.2492492492492p-3&#39; ],<br/>+ [ &#39;%a&#39;, &#39;sqrt(2)&#39;, &#39;0x1.6a09e661366ebp+0&#39; ],<br/>+ [ &#39;%a&#39;, &#39;exp(1)&#39;, &#39;0x1.5bf0a8b145769p+1&#39; ],<br/> [ &#39;%a&#39;, &#39;2**-10&#39;, &#39;0x1p-10&#39; ],<br/> [ &#39;%a&#39;, &#39;2**10&#39;, &#39;0x1p+10&#39; ],<br/>- [ &#39;%a&#39;, &#39;1e-09&#39;, &#39;0x1.12e0be826d694b2e62d01511f13p-30&#39; ],<br/>+ [ &#39;%a&#39;, &#39;1e-09&#39;, &#39;0x1.12e0be826d695p-30&#39; ],<br/> [ &#39;%a&#39;, &#39;1e9&#39;, &#39;0x1.dcd65p+29&#39; ],<br/> <br/> [ &#39;%#a&#39;, &#39;1&#39;, &#39;0x1.p+0&#39; ],<br/>@@ -219,27 +217,27 @@ if ($Config{nvsize} == 8 &amp;&amp;<br/> [ &#39;% a&#39;, &#39;1&#39;, &#39; 0x1p+0&#39; ],<br/> [ &#39;% a&#39;, &#39;-1&#39;, &#39;-0x1p+0&#39; ],<br/> <br/>- [ &#39;%8a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>- [ &#39;%13a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>- [ &#39;%20a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>+ [ &#39;%8a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851fp+1&#39; ],<br/>+ [ &#39;%13a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851fp+1&#39; ],<br/>+ [ &#39;%20a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851fp+1&#39; ],<br/> [ &#39;%.4a&#39;, &#39;3.14&#39;, &#39;0x1.91ecp+1&#39; ],<br/> [ &#39;%.5a&#39;, &#39;3.14&#39;, &#39;0x1.91eb8p+1&#39; ],<br/> [ &#39;%.6a&#39;, &#39;3.14&#39;, &#39;0x1.91eb85p+1&#39; ],<br/>- [ &#39;%.20a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb8p+1&#39; ],<br/>+ [ &#39;%.20a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851f0000000p+1&#39; ],<br/> [ &#39;%20.10a&#39;, &#39;3.14&#39;, &#39; 0x1.91eb851eb8p+1&#39; ],<br/>- [ &#39;%20.15a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb8p+1&#39; ],<br/>+ [ &#39;%20.15a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851f00p+1&#39; ],<br/> [ &#39;% 20.10a&#39;, &#39;3.14&#39;, &#39; 0x1.91eb851eb8p+1&#39; ],<br/> [ &#39;%020.10a&#39;, &#39;3.14&#39;, &#39;0x0001.91eb851eb8p+1&#39; ],<br/> <br/>- [ &#39;%30a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>- [ &#39;%-30a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>- [ &#39;%030a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>- [ &#39;%-030a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851eb851eb851eb852p+1&#39; ],<br/>+ [ &#39;%30a&#39;, &#39;3.14&#39;, &#39; 0x1.91eb851eb851fp+1&#39; ],<br/>+ [ &#39;%-30a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851fp+1 &#39; ],<br/>+ [ &#39;%030a&#39;, &#39;3.14&#39;, &#39;0x00000000001.91eb851eb851fp+1&#39; ],<br/>+ [ &#39;%-030a&#39;, &#39;3.14&#39;, &#39;0x1.91eb851eb851fp+1 &#39; ],<br/> <br/> [ &#39;%.40a&#39;, &#39;3.14&#39;,<br/>- &#39;0x1.91eb851eb851eb851eb851eb8520000000000000p+1&#39; ],<br/>+ &#39;0x1.91eb851eb851f000000000000000000000000000p+1&#39; ],<br/> <br/>- [ &#39;%A&#39;, &#39;3.14&#39;, &#39;0X1.91EB851EB851EB851EB851EB852P+1&#39; ],<br/>+ [ &#39;%A&#39;, &#39;3.14&#39;, &#39;0X1.91EB851EB851FP+1&#39; ],<br/> );<br/> } else {<br/> print &quot;# no hexfloat tests\n&quot;;<br/>diff --git a/toke.c b/toke.c<br/>index 0f0641f..be4c8a5 100644<br/>--- a/toke.c<br/>+++ b/toke.c<br/>@@ -9781,9 +9781,10 @@ S_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int re<br/> <br/> \d(_?\d)*(\.(\d(_?\d)*)?)?[Ee][\+\-]?(\d(_?\d)*) 12 12.34 12.<br/> \.\d(_?\d)*[Ee][\+\-]?(\d(_?\d)*) .34<br/>- 0b[01](_?[01])*<br/>- 0[0-7](_?[0-7])*<br/>- 0x[0-9A-Fa-f](_?[0-9A-Fa-f])*<br/>+ 0b[01](_?[01])* binary integers<br/>+ 0[0-7](_?[0-7])* octal integers<br/>+ 0x[0-9A-Fa-f](_?[0-9A-Fa-f])* hexadecimal integers<br/>+ 0x[0-9A-Fa-f](_?[0-9A-Fa-f])*(?:\.\d*)?p[+-]?[0-9]+ hexadecimal floats<br/> <br/> Like most scan_ routines, it uses the PL_tokenbuf buffer to hold the<br/> thing it reads.<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41666.html Wed, 20 Aug 2014 12:21:35 +0000 [perl.git] branch smueller/oleg_oop, deleted. v5.21.2-155-g12affbb by Steffen Mueller In perl.git, the branch smueller/oleg_oop has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=12affbb5785380e61b7205d24b631b2beb8e3fa8&gt;<br/><br/> was 12affbb5785380e61b7205d24b631b2beb8e3fa8<br/><br/>-----------------------------------------------------------------------<br/>12affbb5785380e61b7205d24b631b2beb8e3fa8 Remove useless if(PL_stashcache) checks<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41665.html Wed, 20 Aug 2014 09:19:03 +0000 [perl.git] branch blead, updated. v5.21.2-199-gdb8b8c7 by H.Merijn Brand In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/db8b8c75c9ae410a0e47828e501550fa4f47e811?hp=d77056b91a9b53a2805eb7e4266c5de49c8eebc4&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit db8b8c75c9ae410a0e47828e501550fa4f47e811<br/>Author: H.Merijn Brand &lt;h.m.brand@xs4all.nl&gt;<br/>Date: Wed Aug 20 11:07:25 2014 +0200<br/><br/> Configure backports cause reorder<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> Configure | 3413 +++++++++++++++++++++++++++---------------------------<br/> Porting/Glossary | 4 +-<br/> config_h.SH | 13 +-<br/> uconfig.h | 15 +-<br/> 4 files changed, 1720 insertions(+), 1725 deletions(-)<br/><br/>diff --git a/Configure b/Configure<br/>index aab3f03..0d45e13 100755<br/>--- a/Configure<br/>+++ b/Configure<br/>@@ -585,7 +585,6 @@ d_isnanl=&#39;&#39;<br/> d_killpg=&#39;&#39;<br/> d_lchown=&#39;&#39;<br/> d_ldbl_dig=&#39;&#39;<br/>-d_ldexpl=&#39;&#39;<br/> d_libm_lib_version=&#39;&#39;<br/> d_link=&#39;&#39;<br/> d_localtime_r=&#39;&#39;<br/>@@ -593,6 +592,7 @@ d_localtime_r_needs_tzset=&#39;&#39;<br/> localtime_r_proto=&#39;&#39;<br/> d_locconv=&#39;&#39;<br/> d_lockf=&#39;&#39;<br/>+d_ldexpl=&#39;&#39;<br/> d_longdbl=&#39;&#39;<br/> longdblkind=&#39;&#39;<br/> longdblsize=&#39;&#39;<br/>@@ -6192,1858 +6192,1948 @@ EOF<br/> ;;<br/> esac<br/> <br/>-: check for length of double<br/>+: Check if we are using the GNU C library<br/> echo &quot; &quot;<br/>-case &quot;$doublesize&quot; in<br/>-&#39;&#39;)<br/>- echo &quot;Checking to see how big your double precision numbers are...&quot; &gt;&amp;4<br/>- $cat &gt;try.c &lt;&lt;EOCP<br/>+echo &quot;Checking for GNU C Library...&quot; &gt;&amp;4<br/>+cat &gt;try.c &lt;&lt;&#39;EOCP&#39;<br/>+/* Find out version of GNU C library. __GLIBC__ and __GLIBC_MINOR__<br/>+ alone are insufficient to distinguish different versions, such as<br/>+ 2.0.6 and 2.0.7. The function gnu_get_libc_version() appeared in<br/>+ libc version 2.1.0. A. Dougherty, June 3, 2002.<br/>+*/<br/> #include &lt;stdio.h&gt;<br/>-#$i_stdlib I_STDLIB<br/>-#ifdef I_STDLIB<br/>-#include &lt;stdlib.h&gt;<br/>-#endif<br/>-int main()<br/>+int main(void)<br/> {<br/>- printf(&quot;%d\n&quot;, (int)sizeof(double));<br/>- exit(0);<br/>+#ifdef __GLIBC__<br/>+# ifdef __GLIBC_MINOR__<br/>+# if __GLIBC__ &gt;= 2 &amp;&amp; __GLIBC_MINOR__ &gt;= 1 &amp;&amp; !defined(__cplusplus)<br/>+# include &lt;gnu/libc-version.h&gt;<br/>+ printf(&quot;%s\n&quot;, gnu_get_libc_version());<br/>+# else<br/>+ printf(&quot;%d.%d\n&quot;, __GLIBC__, __GLIBC_MINOR__);<br/>+# endif<br/>+# else<br/>+ printf(&quot;%d\n&quot;, __GLIBC__);<br/>+# endif<br/>+ return 0;<br/>+#else<br/>+ return 1;<br/>+#endif<br/> }<br/> EOCP<br/>- set try<br/>- if eval $compile_ok; then<br/>- doublesize=`$run ./try`<br/>- echo &quot;Your double is $doublesize bytes long.&quot;<br/>- else<br/>- dflt=&#39;8&#39;<br/>- echo &quot;(I can&#39;t seem to compile the test program. Guessing...)&quot;<br/>- rp=&quot;What is the size of a double precision number (in bytes)?&quot;<br/>- . ./myread<br/>- doublesize=&quot;$ans&quot;<br/>- fi<br/>- ;;<br/>-esac<br/>-$rm_try<br/>-<br/>-: check for long doubles<br/>-echo &quot; &quot;<br/>-echo &quot;Checking to see if you have long double...&quot; &gt;&amp;4<br/>-echo &#39;int main() { long double x = 7.0; }&#39; &gt; try.c<br/> set try<br/>-if eval $compile; then<br/>+if eval $compile_ok &amp;&amp; $run ./try &gt; glibc.ver; then<br/> val=&quot;$define&quot;<br/>- echo &quot;You have long double.&quot;<br/>+ gnulibc_version=`$cat glibc.ver`<br/>+ echo &quot;You are using the GNU C Library version $gnulibc_version&quot;<br/> else<br/> val=&quot;$undef&quot;<br/>- echo &quot;You do not have long double.&quot;<br/>+ gnulibc_version=&#39;&#39;<br/>+ echo &quot;You are not using the GNU C Library&quot;<br/> fi<br/>-$rm_try<br/>-set d_longdbl<br/>+$rm_try glibc.ver<br/>+set d_gnulibc<br/> eval $setvar<br/> <br/>-: check for length of long double<br/>-case &quot;${d_longdbl}${longdblsize}&quot; in<br/>-$define)<br/>- echo &quot; &quot;<br/>- echo &quot;Checking to see how big your long doubles are...&quot; &gt;&amp;4<br/>- $cat &gt;try.c &lt;&lt;&#39;EOCP&#39;<br/>-#include &lt;stdio.h&gt;<br/>-int main()<br/>-{<br/>- printf(&quot;%d\n&quot;, sizeof(long double));<br/>-}<br/>-EOCP<br/>- set try<br/>- set try<br/>- if eval $compile; then<br/>- longdblsize=`$run ./try`<br/>- echo &quot;Your long doubles are $longdblsize bytes long.&quot;<br/>- else<br/>- dflt=&#39;8&#39;<br/>+: see if nm is to be used to determine whether a symbol is defined or not<br/>+case &quot;$usenm&quot; in<br/>+&#39;&#39;)<br/>+ dflt=&#39;&#39;<br/>+ case &quot;$d_gnulibc&quot; in<br/>+ &quot;$define&quot;)<br/> echo &quot; &quot;<br/>- echo &quot;(I can&#39;t seem to compile the test program. Guessing...)&quot; &gt;&amp;4<br/>- rp=&quot;What is the size of a long double (in bytes)?&quot;<br/>- . ./myread<br/>- longdblsize=&quot;$ans&quot;<br/>- fi<br/>- if $test &quot;X$doublesize&quot; = &quot;X$longdblsize&quot;; then<br/>- echo &quot;That isn&#39;t any different from an ordinary double.&quot;<br/>- echo &quot;I&#39;ll keep your setting anyway, but you may see some&quot;<br/>- echo &quot;harmless compilation warnings.&quot;<br/>- fi<br/>+ echo &quot;nm probably won&#39;t work on the GNU C Library.&quot; &gt;&amp;4<br/>+ dflt=n<br/>+ ;;<br/>+ esac<br/>+ case &quot;$dflt&quot; in<br/>+ &#39;&#39;)<br/>+ if $test &quot;$osname&quot; = aix -a &quot;X$PASE&quot; != &quot;Xdefine&quot; -a ! -f /lib/syscalls.exp; then<br/>+ echo &quot; &quot;<br/>+ echo &quot;Whoops! This is an AIX system without /lib/syscalls.exp!&quot; &gt;&amp;4<br/>+ echo &quot;&#39;nm&#39; won&#39;t be sufficient on this system.&quot; &gt;&amp;4<br/>+ dflt=n<br/>+ fi<br/>+ ;;<br/>+ esac<br/>+ case &quot;$dflt&quot; in<br/>+ &#39;&#39;) dflt=`$egrep &#39;inlibc|csym&#39; $rsrc/Configure | wc -l 2&gt;/dev/null`<br/>+ if $test $dflt -gt 20; then<br/>+ dflt=y<br/>+ else<br/>+ dflt=n<br/>+ fi<br/>+ ;;<br/>+ esac<br/> ;;<br/>-esac<br/>-$rm_try<br/>-<br/>-: determine the architecture name<br/>-echo &quot; &quot;<br/>-if xxx=`./loc arch blurfl $pth`; $test -f &quot;$xxx&quot;; then<br/>- tarch=`arch`&quot;-$osname&quot;<br/>-elif xxx=`./loc uname blurfl $pth`; $test -f &quot;$xxx&quot; ; then<br/>- if uname -m &gt; tmparch 2&gt;&amp;1 ; then<br/>- tarch=`$sed -e &#39;s/ *$//&#39; -e &#39;s/ /_/g&#39; \<br/>- -e &#39;s/$/&#39;&quot;-$osname/&quot; tmparch`<br/>- else<br/>- tarch=&quot;$osname&quot;<br/>- fi<br/>- $rm -f tmparch<br/>-else<br/>- tarch=&quot;$osname&quot;<br/>-fi<br/>-case &quot;$myarchname&quot; in<br/>-&#39;&#39;|&quot;$tarch&quot;) ;;<br/> *)<br/>- echo &quot;(Your architecture name used to be $myarchname.)&quot;<br/>- archname=&#39;&#39;<br/>+ case &quot;$usenm&quot; in<br/>+ true|$define) dflt=y;;<br/>+ *) dflt=n;;<br/>+ esac<br/> ;;<br/> esac<br/>-case &quot;$targetarch&quot; in<br/>-&#39;&#39;) ;;<br/>-*) archname=`echo $targetarch|sed &#39;s,^[^-]*-,,&#39;` ;;<br/>-esac<br/>-myarchname=&quot;$tarch&quot;<br/>-case &quot;$archname&quot; in<br/>-&#39;&#39;) dflt=&quot;$tarch&quot;;;<br/>-*) dflt=&quot;$archname&quot;;;<br/>-esac<br/>-rp=&#39;What is your architecture name&#39;<br/>-. ./myread<br/>-archname=&quot;$ans&quot;<br/>+$cat &lt;&lt;EOM<br/> <br/>-: optionally add API version to the architecture for versioned archlibs<br/>-case &quot;$useversionedarchname&quot; in<br/>-$define|true|[yY]*) dflt=&#39;y&#39;;;<br/>-*) dflt=&#39;n&#39;;;<br/>-esac<br/>-rp=&#39;Add the Perl API version to your archname?&#39;<br/>+I can use $nm to extract the symbols from your C libraries. This<br/>+is a time consuming task which may generate huge output on the disk (up<br/>+to 3 megabytes) but that should make the symbols extraction faster. The<br/>+alternative is to skip the &#39;nm&#39; extraction part and to compile a small<br/>+test program instead to determine whether each symbol is present. If<br/>+you have a fast C compiler and/or if your &#39;nm&#39; output cannot be parsed,<br/>+this may be the best solution.<br/>+<br/>+You probably shouldn&#39;t let me use &#39;nm&#39; if you are using the GNU C Library.<br/>+<br/>+EOM<br/>+rp=&quot;Shall I use $nm to extract C symbols from the libraries?&quot;<br/> . ./myread<br/> case &quot;$ans&quot; in<br/>-y|Y) useversionedarchname=&quot;$define&quot; ;;<br/>-*) useversionedarchname=&quot;$undef&quot; ;;<br/>+[Nn]*) usenm=false;;<br/>+*) usenm=true;;<br/> esac<br/>-case &quot;$useversionedarchname&quot; in<br/>-$define)<br/>- case &quot;$archname&quot; in<br/>- *-$api_versionstring)<br/>- echo &quot;...and architecture name already has -$api_versionstring&quot; &gt;&amp;4<br/>- ;;<br/>- *)<br/>- archname=&quot;$archname-$api_versionstring&quot;<br/>- echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>- ;;<br/>- esac<br/>- ;;<br/>+<br/>+runnm=$usenm<br/>+case &quot;$reuseval&quot; in<br/>+true) runnm=false;;<br/> esac<br/> <br/>-case &quot;$usethreads&quot; in<br/>-$define)<br/>- echo &quot;Threads selected.&quot; &gt;&amp;4<br/>- case &quot;$archname&quot; in<br/>- *-thread*) echo &quot;...and architecture name already has -thread.&quot; &gt;&amp;4<br/>- ;;<br/>- *) archname=&quot;$archname-thread&quot;<br/>- echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>- ;;<br/>- esac<br/>- ;;<br/>+: nm options which may be necessary<br/>+case &quot;$nm_opt&quot; in<br/>+&#39;&#39;) if $test -f /mach_boot; then<br/>+ nm_opt=&#39;&#39; # Mach<br/>+ elif $test -d /usr/ccs/lib; then<br/>+ nm_opt=&#39;-p&#39; # Solaris (and SunOS?)<br/>+ elif $test -f /dgux; then<br/>+ nm_opt=&#39;-p&#39; # DG-UX<br/>+ elif $test -f /lib64/rld; then<br/>+ nm_opt=&#39;-p&#39; # 64-bit Irix<br/>+ else<br/>+ nm_opt=&#39;&#39;<br/>+ fi;;<br/> esac<br/>-case &quot;$usemultiplicity&quot; in<br/>-$define)<br/>- echo &quot;Multiplicity selected.&quot; &gt;&amp;4<br/>- case &quot;$archname&quot; in<br/>- *-multi*) echo &quot;...and architecture name already has -multi.&quot; &gt;&amp;4<br/>- ;;<br/>- *) archname=&quot;$archname-multi&quot;<br/>- echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>- ;;<br/>- esac<br/>+<br/>+: nm options which may be necessary for shared libraries but illegal<br/>+: for archive libraries. Thank you, Linux.<br/>+case &quot;$nm_so_opt&quot; in<br/>+&#39;&#39;) case &quot;$myuname&quot; in<br/>+ *linux*|gnu*)<br/>+ if $nm --help | $grep &#39;dynamic&#39; &gt; /dev/null 2&gt;&amp;1; then<br/>+ nm_so_opt=&#39;--dynamic&#39;<br/>+ fi<br/>+ ;;<br/>+ esac<br/> ;;<br/> esac<br/>-case &quot;$use64bitint$use64bitall&quot; in<br/>-*&quot;$define&quot;*)<br/>- case &quot;$archname64&quot; in<br/>- &#39;&#39;)<br/>- echo &quot;This architecture is naturally 64-bit, not changing architecture name.&quot; &gt;&amp;4<br/>- ;;<br/>- *)<br/>- case &quot;$use64bitint&quot; in<br/>- &quot;$define&quot;) echo &quot;64 bit integers selected.&quot; &gt;&amp;4 ;;<br/>- esac<br/>- case &quot;$use64bitall&quot; in<br/>- &quot;$define&quot;) echo &quot;Maximal 64 bitness selected.&quot; &gt;&amp;4 ;;<br/>- esac<br/>- case &quot;$archname&quot; in<br/>- *-$archname64*) echo &quot;...and architecture name already has $archname64.&quot; &gt;&amp;4<br/>- ;;<br/>- *) archname=&quot;$archname-$archname64&quot;<br/>- echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>- ;;<br/>- esac<br/>- ;;<br/>+<br/>+: Figure out where the libc is located<br/>+case &quot;$runnm&quot; in<br/>+true)<br/>+: get list of predefined functions in a handy place<br/>+echo &quot; &quot;<br/>+case &quot;$libc&quot; in<br/>+&#39;&#39;) libc=unknown<br/>+ case &quot;$libs&quot; in<br/>+ *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`<br/> esac<br/>+ ;;<br/> esac<br/>-case &quot;$uselongdouble&quot; in<br/>-$define)<br/>- echo &quot;Long doubles selected.&quot; &gt;&amp;4<br/>- case &quot;$longdblsize&quot; in<br/>- $doublesize)<br/>- echo &quot;...but long doubles are equal to doubles, not changing architecture name.&quot; &gt;&amp;4<br/>+case &quot;$libs&quot; in<br/>+&#39;&#39;) ;;<br/>+*) for thislib in $libs; do<br/>+ case &quot;$thislib&quot; in<br/>+ -lc|-lc_s)<br/>+ : Handle C library specially below.<br/> ;;<br/>- *)<br/>- case &quot;$archname&quot; in<br/>- *-ld*) echo &quot;...and architecture name already has -ld.&quot; &gt;&amp;4<br/>- ;;<br/>- *) archname=&quot;$archname-ld&quot;<br/>- echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>- ;;<br/>- esac<br/>+ -l*)<br/>+ thislib=`echo $thislib | $sed -e &#39;s/^-l//&#39;`<br/>+ if try=`./loc lib$thislib.$so.&#39;*&#39; X $libpth`; $test -f &quot;$try&quot;; then<br/>+ :<br/>+ elif try=`./loc lib$thislib.$so X $libpth`; $test -f &quot;$try&quot;; then<br/>+ :<br/>+ elif try=`./loc lib$thislib$_a X $libpth`; $test -f &quot;$try&quot;; then<br/>+ :<br/>+ elif try=`./loc $thislib$_a X $libpth`; $test -f &quot;$try&quot;; then<br/>+ :<br/>+ elif try=`./loc lib$thislib X $libpth`; $test -f &quot;$try&quot;; then<br/>+ :<br/>+ elif try=`./loc $thislib X $libpth`; $test -f &quot;$try&quot;; then<br/>+ :<br/>+ elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f &quot;$try&quot;; then<br/>+ :<br/>+ else<br/>+ try=&#39;&#39;<br/>+ fi<br/>+ libnames=&quot;$libnames $try&quot;<br/> ;;<br/>+ *) libnames=&quot;$libnames $thislib&quot; ;;<br/> esac<br/>+ done<br/> ;;<br/> esac<br/>-if $test -f archname.cbu; then<br/>- echo &quot;Your platform has some specific hints for architecture name, using them...&quot;<br/>- . ./archname.cbu<br/>-fi<br/>-<br/>-: set the prefixit variable, to compute a suitable default value<br/>-prefixit=&#39;case &quot;$3&quot; in<br/>-&quot;&quot;|none)<br/>- case &quot;$oldprefix&quot; in<br/>- &quot;&quot;) eval &quot;$1=\&quot;\$$2\&quot;&quot;;;<br/>- *)<br/>- case &quot;$3&quot; in<br/>- &quot;&quot;) eval &quot;$1=&quot;;;<br/>- none)<br/>- eval &quot;tp=\&quot;\$$2\&quot;&quot;;<br/>- case &quot;$tp&quot; in<br/>- &quot;&quot;|&quot; &quot;) eval &quot;$1=\&quot;\$$2\&quot;&quot;;;<br/>- *) eval &quot;$1=&quot;;;<br/>- esac;;<br/>- esac;;<br/>- esac;;<br/>+xxx=normal<br/>+case &quot;$libc&quot; in<br/>+unknown)<br/>+ set /lib/libc.$so<br/>+ for xxx in $libpth; do<br/>+ $test -r $1 || set $xxx/libc.$so<br/>+ : The messy sed command sorts on library version numbers.<br/>+ $test -r $1 || \<br/>+ set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \<br/>+ tr &#39; &#39; $trnl | egrep -v &#39;\.[A-Za-z]*$&#39; | $sed -e &#39;<br/>+ h<br/>+ s/[0-9][0-9]*/0000&amp;/g<br/>+ s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g<br/>+ G<br/>+ s/\n/ /&#39; | \<br/>+ $sort | $sed -e &#39;s/^.* //&#39;`<br/>+ eval set \$$#<br/>+ done<br/>+ $test -r $1 || set $sysroot/usr/ccs/lib/libc.$so<br/>+ $test -r $1 || set $sysroot/lib/libsys_s$_a<br/>+ ;;<br/> *)<br/>- eval &quot;tp=\&quot;$oldprefix-\$$2-\&quot;&quot;; eval &quot;tp=\&quot;$tp\&quot;&quot;;<br/>- case &quot;$tp&quot; in<br/>- --|/*--|\~*--) eval &quot;$1=\&quot;$prefix/$3\&quot;&quot;;;<br/>- /*-$oldprefix/*|\~*-$oldprefix/*)<br/>- eval &quot;$1=\`echo \$$2 | sed \&quot;s,^$oldprefix,$prefix,\&quot;\`&quot;;;<br/>- *) eval &quot;$1=\&quot;\$$2\&quot;&quot;;;<br/>- esac;;<br/>-esac&#39;<br/>-<br/>-: determine installation style<br/>-: For now, try to deduce it from prefix unless it is already set.<br/>-: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.<br/>-case &quot;$installstyle&quot; in<br/>-&#39;&#39;) case &quot;$prefix&quot; in<br/>- *perl*) dflt=&#39;lib&#39;;;<br/>- *) dflt=&#39;lib/perl5&#39; ;;<br/>- esac<br/>+ set blurfl<br/> ;;<br/>-*) dflt=&quot;$installstyle&quot; ;;<br/> esac<br/>-: Probably not worth prompting for this since we prompt for all<br/>-: the directories individually, and the prompt would be too long and<br/>-: confusing anyway.<br/>-installstyle=$dflt<br/>-<br/>-: determine where public executables go<br/>-echo &quot; &quot;<br/>-set dflt bin bin<br/>-eval $prefixit<br/>-fn=d~<br/>-rp=&#39;Pathname where the public executables will reside?&#39;<br/>-. ./getfile<br/>-if $test &quot;X$ansexp&quot; != &quot;X$binexp&quot;; then<br/>- installbin=&#39;&#39;<br/>+if $test -r &quot;$1&quot;; then<br/>+ echo &quot;Your (shared) C library seems to be in $1.&quot;<br/>+ libc=&quot;$1&quot;<br/>+elif $test -r /lib/libc &amp;&amp; $test -r /lib/clib; then<br/>+ echo &quot;Your C library seems to be in both /lib/clib and /lib/libc.&quot;<br/>+ xxx=apollo<br/>+ libc=&#39;/lib/clib /lib/libc&#39;<br/>+ if $test -r /lib/syslib; then<br/>+ echo &quot;(Your math library is in /lib/syslib.)&quot;<br/>+ libc=&quot;$libc /lib/syslib&quot;<br/>+ fi<br/>+elif $test -r &quot;$libc&quot; || (test -h &quot;$libc&quot;) &gt;/dev/null 2&gt;&amp;1; then<br/>+ echo &quot;Your C library seems to be in $libc, as you said before.&quot;<br/>+elif $test -r $incpath/usr/lib/libc$_a; then<br/>+ libc=$incpath/usr/lib/libc$_a;<br/>+ echo &quot;Your C library seems to be in $libc. That&#39;s fine.&quot;<br/>+elif $test -r /lib/libc$_a; then<br/>+ libc=/lib/libc$_a;<br/>+ echo &quot;Your C library seems to be in $libc. You&#39;re normal.&quot;<br/>+else<br/>+ if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r &quot;$tans&quot;; then<br/>+ :<br/>+ elif tans=`./loc libc blurfl/dyick $libpth`; $test -r &quot;$tans&quot;; then<br/>+ libnames=&quot;$libnames &quot;`./loc clib blurfl/dyick $libpth`<br/>+ elif tans=`./loc clib blurfl/dyick $libpth`; $test -r &quot;$tans&quot;; then<br/>+ :<br/>+ elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r &quot;$tans&quot;; then<br/>+ :<br/>+ elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r &quot;$tans&quot;; then<br/>+ :<br/>+ else<br/>+ tans=`./loc Llibc$_a blurfl/dyick $xlibpth`<br/>+ fi<br/>+ if $test -r &quot;$tans&quot;; then<br/>+ echo &quot;Your C library seems to be in $tans, of all places.&quot;<br/>+ libc=$tans<br/>+ else<br/>+ libc=&#39;blurfl&#39;<br/>+ fi<br/> fi<br/>-prefixvar=bin<br/>-: XXX Bug? -- ignores Configure -Dinstallprefix setting.<br/>-: XXX If this is fixed, also fix the &quot;start perl&quot; hunk below, which relies on<br/>-: this via initialinstalllocation<br/>-. ./setprefixvar<br/>-<br/>-case &quot;$userelocatableinc&quot; in<br/>-$define|true|[yY]*) dflt=&#39;y&#39; ;;<br/>-*) dflt=&#39;n&#39; ;;<br/>-esac<br/>-cat &lt;&lt;EOM<br/>+if $test $xxx = apollo -o -r &quot;$libc&quot; || (test -h &quot;$libc&quot;) &gt;/dev/null 2&gt;&amp;1; then<br/>+ dflt=&quot;$libc&quot;<br/>+ cat &lt;&lt;EOM<br/> <br/>-Would you like to build Perl so that the installation is relocatable, so that<br/>-library paths in @INC are determined relative to the path of the perl binary?<br/>-This is not advised for system Perl installs, or if you need to run setid<br/>-scripts or scripts under taint mode.<br/>+If the guess above is wrong (which it might be if you&#39;re using a strange<br/>+compiler, or your machine supports multiple models), you can override it here.<br/> <br/>-If this doesn&#39;t make any sense to you, just accept the default &#39;$dflt&#39;.<br/> EOM<br/>-rp=&#39;Use relocatable @INC?&#39;<br/>-. ./myread<br/>-case &quot;$ans&quot; in<br/>-y|Y) val=&quot;$define&quot; ;;<br/>-*) val=&quot;$undef&quot; ;;<br/>-esac<br/>-set userelocatableinc<br/>-eval $setvar<br/>-<br/>-initialinstalllocation=&quot;$binexp&quot;<br/>-: Default prefix is now &quot;up one level from where the binaries are&quot;<br/>-case &quot;$userelocatableinc&quot; in<br/>-$define|true|[yY]*)<br/>- bin=&quot;.../&quot;<br/>- binexp=&quot;.../&quot;<br/>- prefix=&quot;.../..&quot;<br/>- prefixexp=&quot;.../..&quot;<br/>- installprefixexp=&quot;.../..&quot;<br/>- ;;<br/>-esac<br/>+else<br/>+ dflt=&#39;&#39;<br/>+ echo $libpth | $tr &#39; &#39; $trnl | $sort | $uniq &gt; libpath<br/>+ cat &gt;&amp;4 &lt;&lt;EOM<br/>+I can&#39;t seem to find your C library. I&#39;ve looked in the following places:<br/> <br/>-: determine where private library files go<br/>-: Usual default is /usr/local/lib/perl5/$version.<br/>-: Also allow things like /opt/perl/lib/$version, since<br/>-: /opt/perl/lib/perl5... would be redundant.<br/>-: The default &quot;style&quot; setting is made in installstyle.U<br/>-case &quot;$installstyle&quot; in<br/>-*lib/perl5*) set dflt privlib lib/$package/$version ;;<br/>-*) set dflt privlib lib/$version ;;<br/>-esac<br/>-eval $prefixit<br/>-$cat &lt;&lt;EOM<br/>+EOM<br/>+ $sed &#39;s/^/ /&#39; libpath<br/>+ cat &lt;&lt;EOM<br/> <br/>-There are some auxiliary files for $package that need to be put into a<br/>-private library directory that is accessible by everyone.<br/>+None of these seems to contain your C library. I need to get its name...<br/> <br/> EOM<br/>-fn=$binexp<br/>-fn=d~+<br/>-rp=&#39;Pathname where the private library files will reside?&#39;<br/>+fi<br/>+fn=f<br/>+rp=&#39;Where is your C library?&#39;<br/> . ./getfile<br/>-prefixvar=privlib<br/>-. ./setprefixvar<br/>+libc=&quot;$ans&quot;<br/> <br/>-: set the prefixup variable, to restore leading tilda escape<br/>-prefixup=&#39;case &quot;$prefixexp&quot; in<br/>-&quot;$prefix&quot;) ;;<br/>-*) eval &quot;$1=\`echo \$$1 | sed \&quot;s,^$prefixexp,$prefix,\&quot;\`&quot;;;<br/>-esac&#39;<br/>-<br/>-: determine where public architecture dependent libraries go<br/>-set archlib archlib<br/>-eval $prefixit<br/>-: privlib default is /usr/local/lib/$package/$version<br/>-: archlib default is /usr/local/lib/$package/$version/$archname<br/>-: privlib may have an optional trailing /share.<br/>-tdflt=`echo $privlib | $sed &#39;s,/share$,,&#39;`<br/>-tdflt=$tdflt/$archname<br/>-case &quot;$archlib&quot; in<br/>-&#39;&#39;) dflt=$tdflt<br/>- ;;<br/>-*) dflt=&quot;$archlib&quot;<br/>- ;;<br/>-esac<br/>-$cat &lt;&lt;EOM<br/>+echo &quot; &quot;<br/>+echo $libc $libnames | $tr &#39; &#39; $trnl | $sort | $uniq &gt; libnames<br/>+set X `cat libnames`<br/>+shift<br/>+xxx=files<br/>+case $# in 1) xxx=file; esac<br/>+echo &quot;Extracting names from the following $xxx for later perusal:&quot; &gt;&amp;4<br/>+echo &quot; &quot;<br/>+$sed &#39;s/^/ /&#39; libnames &gt;&amp;4<br/>+echo &quot; &quot;<br/>+$echo $n &quot;This may take a while...$c&quot; &gt;&amp;4<br/> <br/>-$spackage contains architecture-dependent library files. If you are<br/>-sharing libraries in a heterogeneous environment, you might store<br/>-these files in a separate location. Otherwise, you can just include<br/>-them with the rest of the public library files.<br/>+for file in $*; do<br/>+ case $file in<br/>+ *$so*) $nm $nm_so_opt $nm_opt $file 2&gt;/dev/null;;<br/>+ *) $nm $nm_opt $file 2&gt;/dev/null;;<br/>+ esac<br/>+done &gt;libc.tmp<br/> <br/>-EOM<br/>-fn=$binexp<br/>-fn=d+~<br/>-rp=&#39;Where do you want to put the public architecture-dependent libraries?&#39;<br/>-. ./getfile<br/>-prefixvar=archlib<br/>-. ./setprefixvar<br/>-if $test X&quot;$archlib&quot; = X&quot;$privlib&quot;; then<br/>- d_archlib=&quot;$undef&quot;<br/>+$echo $n &quot;.$c&quot;<br/>+$grep fprintf libc.tmp &gt; libc.ptf<br/>+xscan=&#39;eval &quot;&lt;libc.ptf $com &gt;libc.list&quot;; $echo $n &quot;.$c&quot; &gt;&amp;4&#39;<br/>+xrun=&#39;eval &quot;&lt;libc.tmp $com &gt;libc.list&quot;; echo &quot;done.&quot; &gt;&amp;4&#39;<br/>+xxx=&#39;[ADTSIWi]&#39;<br/>+if com=&quot;$sed -n -e &#39;s/__IO//&#39; -e &#39;s/^.* $xxx *//p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/^__*//&#39; -e &#39;s/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;/|UNDEF/d&#39; -e &#39;/FUNC..GL/s/^.*|__*//p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/^.* D __*//p&#39; -e &#39;s/^.* D //p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/^_//&#39; -e &#39;s/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/^.*|FUNC |GLOB .*|//p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$grep &#39;|&#39; | $sed -n -e &#39;/|COMMON/d&#39; -e &#39;/|DATA/d&#39; \<br/>+ -e &#39;/ file/d&#39; -e &#39;s/^\([^ ]*\).*/\1/p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/^.*|FUNC |GLOB .*|//p&#39; -e &#39;s/^.*|FUNC |WEAK .*|//p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/^__//&#39; -e &#39;/|Undef/d&#39; -e &#39;/|Proc/s/ .*//p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/^.*|Proc .*|Text *| *//p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;/Def. Text/s/.* \([^ ]*\)\$/\1/p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/^[-0-9a-f ]*_\(.*\)=.*/\1/p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;$sed -n -e &#39;s/.*\.text n\ \ \ \.//p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/>+elif com=&quot;sed -n -e &#39;s/^__.*//&#39; -e &#39;s/[ ]*D[ ]*[0-9]*.*//p&#39;&quot;;\<br/>+ eval $xscan;\<br/>+ $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1; then<br/>+ eval $xrun<br/> else<br/>- d_archlib=&quot;$define&quot;<br/>-fi<br/>-<br/>-: see if setuid scripts can be secure<br/>-$cat &lt;&lt;EOM<br/>-<br/>-Some kernels have a bug that prevents setuid #! scripts from being<br/>-secure. Some sites have disabled setuid #! scripts because of this.<br/>-<br/>-First let&#39;s decide if your kernel supports secure setuid #! scripts.<br/>-(If setuid #! scripts would be secure but have been disabled anyway,<br/>-don&#39;t say that they are secure if asked.)<br/>-<br/>-EOM<br/>-<br/>-val=&quot;$undef&quot;<br/>-if $test -d /dev/fd; then<br/>- echo &quot;#!$ls&quot; &gt;reflect<br/>- chmod +x,u+s reflect<br/>- ./reflect &gt;flect 2&gt;&amp;1<br/>- if $contains &quot;/dev/fd&quot; flect &gt;/dev/null; then<br/>- echo &quot;Congratulations, your kernel has secure setuid scripts!&quot; &gt;&amp;4<br/>- val=&quot;$define&quot;<br/>+ $nm -p $* 2&gt;/dev/null &gt;libc.tmp<br/>+ $grep fprintf libc.tmp &gt; libc.ptf<br/>+ if com=&quot;$sed -n -e &#39;s/^.* [ADTSIW] *_[_.]*//p&#39; -e &#39;s/^.* [ADTSIW] //p&#39;&quot;;\<br/>+ eval $xscan; $contains &#39;^fprintf$&#39; libc.list &gt;/dev/null 2&gt;&amp;1<br/>+ then<br/>+ nm_opt=&#39;-p&#39;<br/>+ eval $xrun<br/> else<br/>- $cat &lt;&lt;EOM<br/>-If you are not sure if they are secure, I can check but I&#39;ll need a<br/>-username and password different from the one you are using right now.<br/>-If you don&#39;t have such a username or don&#39;t want me to test, simply<br/>-enter &#39;none&#39;.<br/>-<br/>-EOM<br/>- rp=&#39;Other username to test security of setuid scripts with?&#39;<br/>- dflt=&#39;none&#39;<br/>- . ./myread<br/>- case &quot;$ans&quot; in<br/>- n|none)<br/>- case &quot;$d_suidsafe&quot; in<br/>- &#39;&#39;) echo &quot;I&#39;ll assume setuid scripts are *not* secure.&quot; &gt;&amp;4<br/>- dflt=n;;<br/>- &quot;$undef&quot;)<br/>- echo &quot;Well, the $hint value is *not* secure.&quot; &gt;&amp;4<br/>- dflt=n;;<br/>- *) echo &quot;Well, the $hint value *is* secure.&quot; &gt;&amp;4<br/>- dflt=y;;<br/>- esac<br/>- ;;<br/>- *)<br/>- $rm -f reflect flect<br/>- echo &quot;#!$ls&quot; &gt;reflect<br/>- chmod +x,u+s reflect<br/>- echo &gt;flect<br/>- chmod a+w flect<br/>- echo &#39;&quot;su&quot; will (probably) prompt you for &#39;&quot;$ans&#39;s password.&quot;<br/>- su $ans -c &#39;./reflect &gt;flect&#39;<br/>- if $contains &quot;/dev/fd&quot; flect &gt;/dev/null; then<br/>- echo &quot;Okay, it looks like setuid scripts are secure.&quot; &gt;&amp;4<br/>- dflt=y<br/>+ echo &quot; &quot;<br/>+ echo &quot;$nm didn&#39;t seem to work right. Trying $ar instead...&quot; &gt;&amp;4<br/>+ com=&#39;&#39;<br/>+ if $ar t $libc &gt; libc.tmp &amp;&amp; \<br/>+ $contains &#39;^fprintf$&#39; libc.tmp &gt;/dev/null 2&gt;&amp;1<br/>+ then<br/>+ for thisname in $libnames $libc; do<br/>+ $ar t $thisname &gt;&gt;libc.tmp<br/>+ done<br/>+ $sed -e &quot;s/\\$_o\$//&quot; &lt; libc.tmp &gt; libc.list<br/>+ echo &quot;Ok.&quot; &gt;&amp;4<br/>+ elif test &quot;X$osname&quot; = &quot;Xos2&quot; &amp;&amp; $ar tv $libc &gt; libc.tmp; then<br/>+ for thisname in $libnames $libc; do<br/>+ $ar tv $thisname &gt;&gt;libc.tmp<br/>+ emximp -o tmp.imp $thisname \<br/>+ 2&gt;/dev/null &amp;&amp; \<br/>+ $sed -e &#39;s/^\([_a-zA-Z0-9]*\) .*$/\1/p&#39; \<br/>+ &lt; tmp.imp &gt;&gt;libc.tmp<br/>+ $rm -f tmp.imp<br/>+ done<br/>+ $sed -e &quot;s/\\$_o\$//&quot; -e &#39;s/^ \+//&#39; &lt; libc.tmp &gt; libc.list<br/>+ echo &quot;Ok.&quot; &gt;&amp;4<br/>+ else<br/>+ echo &quot;$ar didn&#39;t seem to work right.&quot; &gt;&amp;4<br/>+ echo &quot;Maybe this is a Cray...trying bld instead...&quot; &gt;&amp;4<br/>+ if bld t $libc | \<br/>+ $sed -e &#39;s/.*\///&#39; -e &quot;s/\\$_o:.*\$//&quot; &gt; libc.list &amp;&amp;<br/>+ $test -s libc.list<br/>+ then<br/>+ for thisname in $libnames; do<br/>+ bld t $libnames | \<br/>+ $sed -e &#39;s/.*\///&#39; -e &quot;s/\\$_o:.*\$//&quot; &gt;&gt;libc.list<br/>+ $ar t $thisname &gt;&gt;libc.tmp<br/>+ done<br/>+ echo &quot;Ok.&quot; &gt;&amp;4<br/> else<br/>- echo &quot;I don&#39;t think setuid scripts are secure.&quot; &gt;&amp;4<br/>- dflt=n<br/>+ echo &quot;That didn&#39;t work either. Giving up.&quot; &gt;&amp;4<br/>+ exit 1<br/> fi<br/>- ;;<br/>- esac<br/>- rp=&#39;Does your kernel have *secure* setuid scripts?&#39;<br/>- . ./myread<br/>- case &quot;$ans&quot; in<br/>- [yY]*) val=&quot;$define&quot;;;<br/>- *) val=&quot;$undef&quot;;;<br/>- esac<br/>+ fi<br/> fi<br/>-else<br/>- echo &quot;I don&#39;t think setuid scripts are secure (no /dev/fd directory).&quot; &gt;&amp;4<br/>- echo &quot;(That&#39;s for file descriptors, not floppy disks.)&quot;<br/>- val=&quot;$undef&quot;<br/>-fi<br/>-set d_suidsafe<br/>-eval $setvar<br/>-<br/>-$rm -f reflect flect<br/>-<br/>-: now see if they want to do setuid emulation<br/>-if $test $patchlevel -lt 11; then<br/>-echo &quot; &quot;<br/>-val=&quot;$undef&quot;<br/>-case &quot;$d_suidsafe&quot; in<br/>-&quot;$define&quot;)<br/>- val=&quot;$undef&quot;<br/>- echo &quot;No need to emulate SUID scripts since they are secure here.&quot; &gt;&amp;4<br/>- ;;<br/>-*)<br/>- $cat &lt;&lt;EOM<br/>-Some systems have disabled setuid scripts, especially systems where<br/>-setuid scripts cannot be secure. On systems where setuid scripts have<br/>-been disabled, the setuid/setgid bits on scripts are currently<br/>-useless. It is possible for $package to detect those bits and emulate<br/>-setuid/setgid in a secure fashion. This emulation will only work if<br/>-setuid scripts have been disabled in your kernel.<br/>-<br/>-EOM<br/>- case &quot;$d_dosuid&quot; in<br/>- &quot;$define&quot;) dflt=y ;;<br/>- *) dflt=n ;;<br/>- esac<br/>- rp=&quot;Do you want to do setuid/setgid emulation?&quot;<br/>- . ./myread<br/>- case &quot;$ans&quot; in<br/>- [yY]*) val=&quot;$define&quot;;;<br/>- *) val=&quot;$undef&quot;;;<br/>- esac<br/>- ;;<br/>-esac<br/>-set d_dosuid<br/>-eval $setvar<br/>-else<br/>- case &quot;$d_dosuid&quot; in<br/>- &quot;$define&quot;)<br/>- cat &gt;&amp;4 &lt;&lt;EOH<br/>-<br/>-SUID emulation has been removed for 5.12<br/>-Please re-run Configure without -Dd_dosuid<br/>-<br/>-EOH<br/>- exit 1;<br/>- ;;<br/>- esac<br/>- d_dosuid=undef<br/> fi<br/>-<br/>-: Find perl5.005 or later.<br/>-echo &quot;Looking for a previously installed perl5.005 or later... &quot;<br/>-case &quot;$perl5&quot; in<br/>-&#39;&#39;) for tdir in `echo &quot;$binexp$path_sep$PATH&quot; | $sed &quot;s/$path_sep/ /g&quot;`; do<br/>- : Check if this perl is recent and can load a simple module<br/>- if $test -x $tdir/perl$exe_ext &amp;&amp; $tdir/perl -Mless -e &#39;use 5.005;&#39; &gt;/dev/null 2&gt;&amp;1; then<br/>- perl5=$tdir/perl<br/>- break;<br/>- elif $test -x $tdir/perl5$exe_ext &amp;&amp; $tdir/perl5 -Mless -e &#39;use 5.005;&#39; &gt;/dev/null 2&gt;&amp;1; then<br/>- perl5=$tdir/perl5<br/>- break;<br/>- fi<br/>- done<br/>- ;;<br/>-*) perl5=&quot;$perl5&quot;<br/>- ;;<br/>-esac<br/>-case &quot;$perl5&quot; in<br/>-&#39;&#39;) echo &quot;None found. That&#39;s ok.&quot;;;<br/>-*) echo &quot;Using $perl5.&quot; ;;<br/>-esac<br/>-<br/>-: Set the siteprefix variables<br/>-$cat &lt;&lt;EOM<br/>-<br/>-After $package is installed, you may wish to install various<br/>-add-on modules and utilities. Typically, these add-ons will<br/>-be installed under $prefix with the rest<br/>-of this package. However, you may wish to install such add-ons<br/>-elsewhere under a different prefix.<br/>-<br/>-If you do not wish to put everything under a single prefix, that&#39;s<br/>-ok. You will be prompted for the individual locations; this siteprefix<br/>-is only used to suggest the defaults.<br/>-<br/>-The default should be fine for most people.<br/>-<br/>-EOM<br/>-fn=d~+<br/>-rp=&#39;Installation prefix to use for add-on modules and utilities?&#39;<br/>-: XXX Here might be another good place for an installstyle setting.<br/>-case &quot;$siteprefix&quot; in<br/>-&#39;&#39;) dflt=$prefix ;;<br/>-*) dflt=$siteprefix ;;<br/>-esac<br/>-. ./getfile<br/>-: XXX Prefixit unit does not yet support siteprefix and vendorprefix<br/>-oldsiteprefix=&#39;&#39;<br/>-case &quot;$siteprefix&quot; in<br/>-&#39;&#39;) ;;<br/>-*) case &quot;$ans&quot; in<br/>- &quot;$prefix&quot;) ;;<br/>- *) oldsiteprefix=&quot;$prefix&quot;;;<br/>- esac<br/>- ;;<br/>+nm_extract=&quot;$com&quot;<br/>+case &quot;$PASE&quot; in<br/>+define)<br/>+ echo &quot; &quot;<br/>+ echo &quot;Since you are compiling for PASE, extracting more symbols from libc.a ...&quot;&gt;&amp;4<br/>+ dump -Tv /lib/libc.a | awk &#39;$7 == &quot;/unix&quot; {print $5 &quot; &quot; $8}&#39; | grep &quot;^SV&quot; | awk &#39;{print $2}&#39; &gt;&gt; libc.list<br/>+ ;;<br/>+*) if $test -f /lib/syscalls.exp; then<br/>+ echo &quot; &quot;<br/>+ echo &quot;Also extracting names from /lib/syscalls.exp for good ole AIX...&quot; &gt;&amp;4<br/>+ $sed -n &#39;s/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p&#39; \<br/>+ /lib/syscalls.exp &gt;&gt;libc.list<br/>+ fi<br/>+ ;;<br/> esac<br/>-siteprefix=&quot;$ans&quot;<br/>-siteprefixexp=&quot;$ansexp&quot;<br/>-<br/>-: determine where site specific libraries go.<br/>-: Usual default is /usr/local/lib/perl5/site_perl/$version<br/>-: The default &quot;style&quot; setting is made in installstyle.U<br/>-: XXX No longer works with Prefixit stuff.<br/>-prog=`echo $package | $sed &#39;s/-*[0-9.]*$//&#39;`<br/>-case &quot;$sitelib&quot; in<br/>-&#39;&#39;) case &quot;$installstyle&quot; in<br/>- *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;<br/>- *) dflt=$siteprefix/lib/site_$prog/$version ;;<br/>- esac<br/>- ;;<br/>-*) dflt=&quot;$sitelib&quot;<br/>- ;;<br/>+;;<br/> esac<br/>-$cat &lt;&lt;EOM<br/>-<br/>-The installation process will create a directory for<br/>-site-specific extensions and modules. Most users find it convenient<br/>-to place all site-specific files in this directory rather than in the<br/>-main distribution directory.<br/>-<br/>-EOM<br/>-fn=d~+<br/>-rp=&#39;Pathname for the site-specific library files?&#39;<br/>-. ./getfile<br/>-prefixvar=sitelib<br/>-. ./setprefixvar<br/>-sitelib_stem=`echo &quot;$sitelibexp&quot; | sed &quot;s,/$version$,,&quot;`<br/>-<br/>-: Determine list of previous versions to include in @INC<br/>-$cat &gt; getverlist &lt;&lt;EOPL<br/>-#!$perl5 -w<br/>-use File::Basename;<br/>-\$api_versionstring = &quot;$api_versionstring&quot;;<br/>-\$version = &quot;$version&quot;;<br/>-\$stem = &quot;$sitelib_stem&quot;;<br/>-\$archname = &quot;$archname&quot;;<br/>-EOPL<br/>- $cat &gt;&gt; getverlist &lt;&lt;&#39;EOPL&#39;<br/>-# The list found is store twice for each entry: the original name, and<br/>-# the binary broken down version as pack &quot;sss&quot;, so sorting is easy and<br/>-# unambiguous. This will work for all versions that have a maximum of<br/>-# three digit groups, separate by &#39;.&#39;s or &#39;_&#39;s. Names are extended with<br/>-# &quot;.0.0&quot; to ensure at least three elements for the pack.<br/>-# -- H.Merijn Brand (m)&#39;06 23-10-2006<br/>-<br/>-# Can&#39;t have leading @ because metaconfig interprets it as a command!<br/>-;@inc_version_list=();<br/>-# XXX Redo to do opendir/readdir?<br/>-if (-d $stem) {<br/>- chdir($stem);<br/>- ;@candidates = map {<br/>- [ $_, pack &quot;sss&quot;, split m/[._]/, &quot;$_.0.0&quot; ] } glob(&quot;5.*&quot;);<br/>- ;@candidates = sort { $a-&gt;[1] cmp $b-&gt;[1]} @candidates;<br/>-}<br/>-else {<br/>- ;@candidates = ();<br/>-}<br/>+$rm -f libnames libpath<br/> <br/>-($pversion, $aversion, $vsn5005) = map {<br/>- pack &quot;sss&quot;, split m/[._]/, &quot;$_.0.0&quot; } $version, $api_versionstring, &quot;5.005&quot;;<br/>-foreach $d (@candidates) {<br/>- if ($d-&gt;[1] lt $pversion) {<br/>- if ($d-&gt;[1] ge $aversion) {<br/>- unshift(@inc_version_list, grep { -d } $d-&gt;[0].&quot;/$archname&quot;, $d-&gt;[0]);<br/>- }<br/>- elsif ($d-&gt;[1] ge $vsn5005) {<br/>- unshift(@inc_version_list, grep { -d } $d-&gt;[0]);<br/>- }<br/>- }<br/>- else {<br/>- # Skip newer version. I.e. don&#39;t look in<br/>- # 5.7.0 if we&#39;re installing 5.6.1.<br/>- }<br/>+: Check if we are using C++<br/>+echo &quot; &quot;<br/>+echo &quot;Checking for C++...&quot; &gt;&amp;4<br/>+$cat &gt;try.c &lt;&lt;&#39;EOCP&#39;<br/>+#include &lt;stdio.h&gt;<br/>+int main(void)<br/>+{<br/>+#ifdef __cplusplus<br/>+ return 0;<br/>+#else<br/>+ return 1;<br/>+#endif<br/> }<br/>+EOCP<br/>+set try<br/>+if eval $compile_ok &amp;&amp; $run ./try; then<br/>+ val=&quot;$define&quot;<br/>+ echo &quot;You are using a C++ compiler.&quot;<br/>+else<br/>+ val=&quot;$undef&quot;<br/>+ echo &quot;You are not using a C++ compiler.&quot;<br/>+fi<br/>+$rm_try cplusplus$$<br/>+set d_cplusplus<br/>+eval $setvar<br/> <br/>-if (@inc_version_list) {<br/>- print join(&#39; &#39;, @inc_version_list);<br/>-}<br/>-else {<br/>- # Blank space to preserve value for next Configure run.<br/>- print &quot; &quot;;<br/>-}<br/>-EOPL<br/>-chmod +x getverlist<br/>-case &quot;$inc_version_list&quot; in<br/>-&#39;&#39;) if test -x &quot;$perl5$exe_ext&quot;; then<br/>- dflt=`$perl5 getverlist`<br/>+: is a C symbol defined?<br/>+csym=&#39;tlook=$1;<br/>+case &quot;$3&quot; in<br/>+-v) tf=libc.tmp; tdc=&quot;&quot;;;<br/>+-a) tf=libc.tmp; tdc=&quot;[]&quot;;;<br/>+*) tlook=&quot;^$1\$&quot;; tf=libc.list; tdc=&quot;()&quot;;;<br/>+esac;<br/>+case &quot;$d_cplusplus&quot; in<br/>+ $define) extern_C=&quot;extern \&quot;C\&quot;&quot; ;;<br/>+ *) extern_C=&quot;extern&quot; ;;<br/>+esac;<br/>+tx=yes;<br/>+case &quot;$reuseval-$4&quot; in<br/>+true-) ;;<br/>+true-*) tx=no; eval &quot;tval=\$$4&quot;; case &quot;$tval&quot; in &quot;&quot;) tx=yes;; esac;;<br/>+esac;<br/>+case &quot;$tx&quot; in<br/>+yes)<br/>+ tval=false;<br/>+ if $test &quot;$runnm&quot; = true; then<br/>+ if $contains $tlook $tf &gt;/dev/null 2&gt;&amp;1; then<br/>+ tval=true;<br/>+ elif $test &quot;$mistrustnm&quot; = compile -o &quot;$mistrustnm&quot; = run; then<br/>+ echo &quot;$extern_C void *$1$tdc; void *(*(p()))$tdc { return &amp;$1; } int main() { if(p() &amp;&amp; p() != (void *)main) return(0); else return(1); }&quot;&gt; try.c;<br/>+ $cc -o try $optimize $ccflags $ldflags try.c &gt;/dev/null 2&gt;&amp;1 $libs &amp;&amp; tval=true;<br/>+ $test &quot;$mistrustnm&quot; = run -a -x try &amp;&amp; { $run ./try$_exe &gt;/dev/null 2&gt;&amp;1 || tval=false; };<br/>+ $rm_try;<br/>+ fi;<br/> else<br/>- dflt=&#39;none&#39;<br/>- fi<br/>+ echo &quot;$extern_C void *$1$tdc; void *(*(p()))$tdc { return &amp;$1; } int main() { if(p() &amp;&amp; p() != (void *)main) return(0); else return(1); }&quot;&gt; try.c;<br/>+ $cc -o try $optimize $ccflags $ldflags try.c $libs &gt;/dev/null 2&gt;&amp;1 &amp;&amp; tval=true;<br/>+ $rm_try;<br/>+ fi;<br/> ;;<br/>-$undef) dflt=&#39;none&#39; ;;<br/>-*) eval dflt=\&quot;$inc_version_list\&quot; ;;<br/>-esac<br/>-case &quot;$dflt&quot; in<br/>-&#39;&#39;|&#39; &#39;) dflt=none ;;<br/>-esac<br/>-case &quot;$dflt&quot; in<br/>-5.005) dflt=none ;;<br/>-esac<br/>-$cat &lt;&lt;EOM<br/>-<br/>-In order to ease the process of upgrading, this version of perl<br/>-can be configured to use modules built and installed with earlier<br/>-versions of perl that were installed under $prefix. Specify here<br/>-the list of earlier versions that this version of perl should check.<br/>-If Configure detected no earlier versions of perl installed under<br/>-$prefix, then the list will be empty. Answer &#39;none&#39; to tell perl<br/>-to not search earlier versions.<br/>+*)<br/>+ case &quot;$tval&quot; in<br/>+ $define) tval=true;;<br/>+ *) tval=false;;<br/>+ esac;<br/>+ ;;<br/>+esac;<br/>+eval &quot;$2=$tval&quot;&#39;<br/> <br/>-The default should almost always be sensible, so if you&#39;re not sure,<br/>-just accept the default.<br/>-EOM<br/>+: define an is-in-libc? function<br/>+inlibc=&#39;echo &quot; &quot;; td=$define; tu=$undef;<br/>+sym=$1; var=$2; eval &quot;was=\$$2&quot;;<br/>+tx=yes;<br/>+case &quot;$reuseval$was&quot; in<br/>+true) ;;<br/>+true*) tx=no;;<br/>+esac;<br/>+case &quot;$tx&quot; in<br/>+yes)<br/>+ set $sym tres -f;<br/>+ eval $csym;<br/>+ case &quot;$tres&quot; in<br/>+ true)<br/>+ echo &quot;$sym() found.&quot; &gt;&amp;4;<br/>+ case &quot;$was&quot; in $undef) . ./whoa; esac; eval &quot;$var=\$td&quot;;;<br/>+ *)<br/>+ echo &quot;$sym() NOT found.&quot; &gt;&amp;4;<br/>+ case &quot;$was&quot; in $define) . ./whoa; esac; eval &quot;$var=\$tu&quot;;;<br/>+ esac;;<br/>+*)<br/>+ case &quot;$was&quot; in<br/>+ $define) echo &quot;$sym() found.&quot; &gt;&amp;4;;<br/>+ *) echo &quot;$sym() NOT found.&quot; &gt;&amp;4;;<br/>+ esac;;<br/>+esac&#39;<br/> <br/>-rp=&#39;List of earlier versions to include in @INC?&#39;<br/>-. ./myread<br/>-case &quot;$ans&quot; in<br/>-[Nn]one|&#39;&#39;|&#39; &#39;|$undef) inc_version_list=&#39; &#39; ;;<br/>-*) inc_version_list=&quot;$ans&quot; ;;<br/>-esac<br/>-case &quot;$inc_version_list&quot; in<br/>-&#39;&#39;|&#39; &#39;)<br/>- inc_version_list_init=&#39;0&#39;<br/>- d_inc_version_list=&quot;$undef&quot;<br/>- ;;<br/>-*) inc_version_list_init=`echo $inc_version_list |<br/>- $sed -e &#39;s/^/&quot;/&#39; -e &#39;s/ /&quot;,&quot;/g&#39; -e &#39;s/$/&quot;,0/&#39;`<br/>- d_inc_version_list=&quot;$define&quot;<br/>+: check for length of double<br/>+echo &quot; &quot;<br/>+case &quot;$doublesize&quot; in<br/>+&#39;&#39;)<br/>+ echo &quot;Checking to see how big your double precision numbers are...&quot; &gt;&amp;4<br/>+ $cat &gt;try.c &lt;&lt;EOCP<br/>+#include &lt;stdio.h&gt;<br/>+#$i_stdlib I_STDLIB<br/>+#ifdef I_STDLIB<br/>+#include &lt;stdlib.h&gt;<br/>+#endif<br/>+int main()<br/>+{<br/>+ printf(&quot;%d\n&quot;, (int)sizeof(double));<br/>+ exit(0);<br/>+}<br/>+EOCP<br/>+ set try<br/>+ if eval $compile_ok; then<br/>+ doublesize=`$run ./try`<br/>+ echo &quot;Your double is $doublesize bytes long.&quot;<br/>+ else<br/>+ dflt=&#39;8&#39;<br/>+ echo &quot;(I can&#39;t seem to compile the test program. Guessing...)&quot;<br/>+ rp=&quot;What is the size of a double precision number (in bytes)?&quot;<br/>+ . ./myread<br/>+ doublesize=&quot;$ans&quot;<br/>+ fi<br/> ;;<br/> esac<br/>-$rm -f getverlist<br/>+$rm_try<br/> <br/>-: see if malloc/malloc.h has to be included<br/>-set malloc/malloc.h i_mallocmalloc<br/>+: see if this is a float.h system<br/>+set float.h i_float<br/> eval $inhdr<br/> <br/>-: see if this is a malloc.h system<br/>-: we want a real compile instead of Inhdr because some systems have a<br/>-: malloc.h that just gives a compile error saying to use stdlib.h instead<br/>+: check for long doubles<br/> echo &quot; &quot;<br/>-$cat &gt;try.c &lt;&lt;EOCP<br/>-#include &lt;stdlib.h&gt;<br/>-#include &lt;malloc.h&gt;<br/>-#$i_mallocmalloc I_MALLOCMALLOC<br/>-#ifdef I_MALLOCMALLOC<br/>-# include &lt;malloc/malloc.h&gt;<br/>-#endif<br/>-<br/>-int main () { return 0; }<br/>-EOCP<br/>+echo &quot;Checking to see if you have long double...&quot; &gt;&amp;4<br/>+echo &#39;int main() { long double x = 7.0; }&#39; &gt; try.c<br/> set try<br/> if eval $compile; then<br/>- echo &quot;&lt;malloc.h&gt; found.&quot; &gt;&amp;4<br/>- val=&quot;$define&quot;<br/>+ val=&quot;$define&quot;<br/>+ echo &quot;You have long double.&quot;<br/> else<br/>- echo &quot;&lt;malloc.h&gt; NOT found.&quot; &gt;&amp;4<br/>- val=&quot;$undef&quot;<br/>+ val=&quot;$undef&quot;<br/>+ echo &quot;You do not have long double.&quot;<br/> fi<br/> $rm_try<br/>-set i_malloc<br/>+set d_longdbl<br/> eval $setvar<br/> <br/>-: check for length of pointer<br/>-echo &quot; &quot;<br/>-case &quot;$ptrsize&quot; in<br/>-&#39;&#39;)<br/>- echo &quot;Checking to see how big your pointers are...&quot; &gt;&amp;4<br/>- $cat &gt;&gt;try.c &lt;&lt;EOCP<br/>+: see if ldexpl exists<br/>+set ldexpl d_ldexpl<br/>+eval $inlibc<br/>+<br/>+: check for length of long double<br/>+case &quot;${d_longdbl}${longdblsize}&quot; in<br/>+$define)<br/>+ echo &quot; &quot;<br/>+ echo &quot;Checking to see how big your long doubles are...&quot; &gt;&amp;4<br/>+ $cat &gt;try.c &lt;&lt;&#39;EOCP&#39;<br/> #include &lt;stdio.h&gt;<br/>-#$i_stdlib I_STDLIB<br/>-#ifdef I_STDLIB<br/>-#include &lt;stdlib.h&gt;<br/>-#endif<br/> int main()<br/> {<br/>- printf(&quot;%d\n&quot;, (int)sizeof(void *));<br/>- exit(0);<br/>+ printf(&quot;%d\n&quot;, sizeof(long double));<br/> }<br/> EOCP<br/> set try<br/>- if eval $compile_ok; then<br/>- ptrsize=`$run ./try`<br/>- echo &quot;Your pointers are $ptrsize bytes long.&quot;<br/>+ set try<br/>+ if eval $compile; then<br/>+ longdblsize=`$run ./try`<br/>+ echo &quot;Your long doubles are $longdblsize bytes long.&quot;<br/> else<br/>- dflt=&#39;4&#39;<br/>+ dflt=&#39;8&#39;<br/>+ echo &quot; &quot;<br/> echo &quot;(I can&#39;t seem to compile the test program. Guessing...)&quot; &gt;&amp;4<br/>- rp=&quot;What is the size of a pointer (in bytes)?&quot;<br/>+ rp=&quot;What is the size of a long double (in bytes)?&quot;<br/> . ./myread<br/>- ptrsize=&quot;$ans&quot;<br/>+ longdblsize=&quot;$ans&quot;<br/>+ fi<br/>+ if $test &quot;X$doublesize&quot; = &quot;X$longdblsize&quot;; then<br/>+ echo &quot;That isn&#39;t any different from an ordinary double.&quot;<br/>+ echo &quot;I&#39;ll keep your setting anyway, but you may see some&quot;<br/>+ echo &quot;harmless compilation warnings.&quot;<br/> fi<br/> ;;<br/> esac<br/> $rm_try<br/>-case &quot;$use64bitall&quot; in<br/>-&quot;$define&quot;|true|[yY]*)<br/>- case &quot;$ptrsize&quot; in<br/>- 4) cat &lt;&lt;EOM &gt;&amp;4<br/> <br/>-*** You have chosen a maximally 64-bit build,<br/>-*** but your pointers are only 4 bytes wide.<br/>-*** Please rerun Configure without -Duse64bitall.<br/>-EOM<br/>- case &quot;$d_quad&quot; in<br/>- define)<br/>- cat &lt;&lt;EOM &gt;&amp;4<br/>-*** Since you have quads, you could possibly try with -Duse64bitint.<br/>-EOM<br/>- ;;<br/>+$echo &quot;Checking the kind of long doubles you have...&quot; &gt;&amp;4<br/>+case &quot;$d_longdbl&quot; in<br/>+define)<br/>+$cat &lt;&lt;EOP &gt;try.c<br/>+#$i_float I_FLOAT<br/>+#$i_stdlib I_STDLIB<br/>+#define LONGDBLSIZE $longdblsize<br/>+#ifdef I_FLOAT<br/>+#include &lt;float.h&gt;<br/>+#endif<br/>+#ifdef I_STDLIB<br/>+#include &lt;stdlib.h&gt;<br/>+#endif<br/>+#include &lt;stdio.h&gt;<br/>+static const long double d = -0.1L;<br/>+int main() {<br/>+ unsigned const char* b = (unsigned const char*)(&amp;d);<br/>+#if LDBL_MANT_DIG == 113 &amp;&amp; LONGDBLSIZE == 16<br/>+ if (b[0] == 0x9A &amp;&amp; b[1] == 0x99 &amp;&amp; b[15] == 0xBF) {<br/>+ /* IEEE 754 128-bit little-endian */<br/>+ printf(&quot;1\n&quot;);<br/>+ exit(0);<br/>+ }<br/>+ if (b[0] == 0xBF &amp;&amp; b[14] == 0x99 &amp;&amp; b[15] == 0x9A) {<br/>+ /* IEEE 128-bit big-endian, e.g. solaris sparc */<br/>+ printf(&quot;2\n&quot;);<br/>+ exit(0);<br/>+ }<br/>+#endif<br/>+#if LDBL_MANT_DIG == 64 &amp;&amp; (LONGDBLSIZE == 16 || LONGDBLSIZE == 12)<br/>+ if (b[0] == 0xCD &amp;&amp; b[9] == 0xBF &amp;&amp; b[10] == 0x00) {<br/>+ /* x86 80-bit little-endian, sizeof 12 (ILP32, Solaris x86)<br/>+ * or 16 (LP64, Linux and OS X), 4 or 6 bytes of padding.<br/>+ * Also known as &quot;extended precision&quot;. */<br/>+ printf(&quot;3\n&quot;);<br/>+ exit(0);<br/>+ }<br/>+ if (b[LONGDBLSIZE - 11] == 0x00 &amp;&amp; b[LONGDBLSIZE - 10] == 0xBF &amp;&amp;<br/>+ b[LONGDBLSIZE - 1] == 0xCD) {<br/>+ /* is there ever big-endian 80-bit, really? */<br/>+ printf(&quot;4\n&quot;);<br/>+ exit(0);<br/>+ }<br/>+#endif<br/>+#if LDBL_MANT_DIG == 106 &amp;&amp; LONGDBLSIZE == 16<br/>+ /* software &quot;double double&quot;, the 106 is 53+53 */<br/>+ if (b[0] == 0x9A &amp;&amp; b[7] == 0x3C &amp;&amp; b[8] == 0x9A &amp;&amp; b[15] == 0xBF) {<br/>+ /* double double 128-bit little-endian,<br/>+ * 9a 99 99 99 99 99 59 3c 9a 99 99 99 99 99 b9 bf */<br/>+ printf(&quot;5\n&quot;);<br/>+ exit(0);<br/>+ }<br/>+ if (b[0] == 0xBF &amp;&amp; b[7] == 0x9A &amp;&amp; b[8] == 0x3C &amp;&amp; b[15] == 0x9A) {<br/>+ /* double double 128-bit big-endian, e.g. PPC/Power and MIPS:<br/>+ * bf b9 99 99 99 99 99 9a 3c 59 99 99 99 99 99 9a */<br/>+ printf(&quot;6\n&quot;);<br/>+ exit(0);<br/>+ }<br/>+#endif<br/>+ printf(&quot;-1\n&quot;); /* unknown */<br/>+ exit(0);<br/>+}<br/>+EOP<br/>+set try<br/>+if eval $compile; then<br/>+ longdblkind=`$run ./try`<br/>+else<br/>+ longdblkind=-1<br/>+fi<br/>+;;<br/>+*) longdblkind=0 ;;<br/>+esac<br/>+case &quot;$longdblkind&quot; in<br/>+0) echo &quot;Your long doubles are doubles.&quot; &gt;&amp;4 ;;<br/>+1) echo &quot;You have IEEE 754 128-bit little endian long doubles.&quot; &gt;&amp;4 ;;<br/>+2) echo &quot;You have IEEE 754 128-bit big endian long doubles.&quot; &gt;&amp;4 ;;<br/>+3) echo &quot;You have x86 80-bit little endian long doubles.&quot; &gt;&amp; 4 ;;<br/>+*) echo &quot;Cannot figure out your long double.&quot; &gt;&amp;4 ;;<br/>+esac<br/>+$rm_try<br/>+<br/>+<br/>+: determine the architecture name<br/>+echo &quot; &quot;<br/>+if xxx=`./loc arch blurfl $pth`; $test -f &quot;$xxx&quot;; then<br/>+ tarch=`arch`&quot;-$osname&quot;<br/>+elif xxx=`./loc uname blurfl $pth`; $test -f &quot;$xxx&quot; ; then<br/>+ if uname -m &gt; tmparch 2&gt;&amp;1 ; then<br/>+ tarch=`$sed -e &#39;s/ *$//&#39; -e &#39;s/ /_/g&#39; \<br/>+ -e &#39;s/$/&#39;&quot;-$osname/&quot; tmparch`<br/>+ else<br/>+ tarch=&quot;$osname&quot;<br/>+ fi<br/>+ $rm -f tmparch<br/>+else<br/>+ tarch=&quot;$osname&quot;<br/>+fi<br/>+case &quot;$myarchname&quot; in<br/>+&#39;&#39;|&quot;$tarch&quot;) ;;<br/>+*)<br/>+ echo &quot;(Your architecture name used to be $myarchname.)&quot;<br/>+ archname=&#39;&#39;<br/>+ ;;<br/>+esac<br/>+case &quot;$targetarch&quot; in<br/>+&#39;&#39;) ;;<br/>+*) archname=`echo $targetarch|sed &#39;s,^[^-]*-,,&#39;` ;;<br/>+esac<br/>+myarchname=&quot;$tarch&quot;<br/>+case &quot;$archname&quot; in<br/>+&#39;&#39;) dflt=&quot;$tarch&quot;;;<br/>+*) dflt=&quot;$archname&quot;;;<br/>+esac<br/>+rp=&#39;What is your architecture name&#39;<br/>+. ./myread<br/>+archname=&quot;$ans&quot;<br/>+<br/>+: optionally add API version to the architecture for versioned archlibs<br/>+case &quot;$useversionedarchname&quot; in<br/>+$define|true|[yY]*) dflt=&#39;y&#39;;;<br/>+*) dflt=&#39;n&#39;;;<br/>+esac<br/>+rp=&#39;Add the Perl API version to your archname?&#39;<br/>+. ./myread<br/>+case &quot;$ans&quot; in<br/>+y|Y) useversionedarchname=&quot;$define&quot; ;;<br/>+*) useversionedarchname=&quot;$undef&quot; ;;<br/>+esac<br/>+case &quot;$useversionedarchname&quot; in<br/>+$define)<br/>+ case &quot;$archname&quot; in<br/>+ *-$api_versionstring)<br/>+ echo &quot;...and architecture name already has -$api_versionstring&quot; &gt;&amp;4<br/>+ ;;<br/>+ *)<br/>+ archname=&quot;$archname-$api_versionstring&quot;<br/>+ echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>+ ;;<br/>+ esac<br/>+ ;;<br/>+esac<br/>+<br/>+case &quot;$usethreads&quot; in<br/>+$define)<br/>+ echo &quot;Threads selected.&quot; &gt;&amp;4<br/>+ case &quot;$archname&quot; in<br/>+ *-thread*) echo &quot;...and architecture name already has -thread.&quot; &gt;&amp;4<br/>+ ;;<br/>+ *) archname=&quot;$archname-thread&quot;<br/>+ echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>+ ;;<br/>+ esac<br/>+ ;;<br/>+esac<br/>+case &quot;$usemultiplicity&quot; in<br/>+$define)<br/>+ echo &quot;Multiplicity selected.&quot; &gt;&amp;4<br/>+ case &quot;$archname&quot; in<br/>+ *-multi*) echo &quot;...and architecture name already has -multi.&quot; &gt;&amp;4<br/>+ ;;<br/>+ *) archname=&quot;$archname-multi&quot;<br/>+ echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>+ ;;<br/>+ esac<br/>+ ;;<br/>+esac<br/>+case &quot;$use64bitint$use64bitall&quot; in<br/>+*&quot;$define&quot;*)<br/>+ case &quot;$archname64&quot; in<br/>+ &#39;&#39;)<br/>+ echo &quot;This architecture is naturally 64-bit, not changing architecture name.&quot; &gt;&amp;4<br/>+ ;;<br/>+ *)<br/>+ case &quot;$use64bitint&quot; in<br/>+ &quot;$define&quot;) echo &quot;64 bit integers selected.&quot; &gt;&amp;4 ;;<br/> esac<br/>- cat &lt;&lt;EOM &gt;&amp;4<br/>-*** Cannot continue, aborting.<br/>-<br/>-EOM<br/>-<br/>- exit 1<br/>+ case &quot;$use64bitall&quot; in<br/>+ &quot;$define&quot;) echo &quot;Maximal 64 bitness selected.&quot; &gt;&amp;4 ;;<br/>+ esac<br/>+ case &quot;$archname&quot; in<br/>+ *-$archname64*) echo &quot;...and architecture name already has $archname64.&quot; &gt;&amp;4<br/>+ ;;<br/>+ *) archname=&quot;$archname-$archname64&quot;<br/>+ echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>+ ;;<br/>+ esac<br/>+ ;;<br/>+ esac<br/>+esac<br/>+case &quot;$uselongdouble&quot; in<br/>+$define)<br/>+ echo &quot;Long doubles selected.&quot; &gt;&amp;4<br/>+ case &quot;$longdblsize&quot; in<br/>+ $doublesize)<br/>+ echo &quot;...but long doubles are equal to doubles, not changing architecture name.&quot; &gt;&amp;4<br/>+ ;;<br/>+ *)<br/>+ case &quot;$archname&quot; in<br/>+ *-ld*) echo &quot;...and architecture name already has -ld.&quot; &gt;&amp;4<br/>+ ;;<br/>+ *) archname=&quot;$archname-ld&quot;<br/>+ echo &quot;...setting architecture name to $archname.&quot; &gt;&amp;4<br/>+ ;;<br/>+ esac<br/> ;;<br/> esac<br/> ;;<br/> esac<br/>+if $test -f archname.cbu; then<br/>+ echo &quot;Your platform has some specific hints for architecture name, using them...&quot;<br/>+ . ./archname.cbu<br/>+fi<br/> <br/>+: set the prefixit variable, to compute a suitable default value<br/>+prefixit=&#39;case &quot;$3&quot; in<br/>+&quot;&quot;|none)<br/>+ case &quot;$oldprefix&quot; in<br/>+ &quot;&quot;) eval &quot;$1=\&quot;\$$2\&quot;&quot;;;<br/>+ *)<br/>+ case &quot;$3&quot; in<br/>+ &quot;&quot;) eval &quot;$1=&quot;;;<br/>+ none)<br/>+ eval &quot;tp=\&quot;\$$2\&quot;&quot;;<br/>+ case &quot;$tp&quot; in<br/>+ &quot;&quot;|&quot; &quot;) eval &quot;$1=\&quot;\$$2\&quot;&quot;;;<br/>+ *) eval &quot;$1=&quot;;;<br/>+ esac;;<br/>+ esac;;<br/>+ esac;;<br/>+*)<br/>+ eval &quot;tp=\&quot;$oldprefix-\$$2-\&quot;&quot;; eval &quot;tp=\&quot;$tp\&quot;&quot;;<br/>+ case &quot;$tp&quot; in<br/>+ --|/*--|\~*--) eval &quot;$1=\&quot;$prefix/$3\&quot;&quot;;;<br/>+ /*-$oldprefix/*|\~*-$oldprefix/*)<br/>+ eval &quot;$1=\`echo \$$2 | sed \&quot;s,^$oldprefix,$prefix,\&quot;\`&quot;;;<br/>+ *) eval &quot;$1=\&quot;\$$2\&quot;&quot;;;<br/>+ esac;;<br/>+esac&#39;<br/> <br/>-: determine whether to use malloc wrapping<br/>-echo &quot; &quot;<br/>-case &quot;$usemallocwrap&quot; in<br/>-[yY]*|true|$define) dflt=&#39;y&#39; ;;<br/>-[nN]*|false|$undef) dflt=&#39;n&#39; ;;<br/>-*) case &quot;$usedevel&quot; in<br/>- [yY]*|true|$define) dflt=&#39;y&#39; ;;<br/>- *) dflt=&#39;n&#39; ;;<br/>+: determine installation style<br/>+: For now, try to deduce it from prefix unless it is already set.<br/>+: Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.<br/>+case &quot;$installstyle&quot; in<br/>+&#39;&#39;) case &quot;$prefix&quot; in<br/>+ *perl*) dflt=&#39;lib&#39;;;<br/>+ *) dflt=&#39;lib/perl5&#39; ;;<br/> esac<br/> ;;<br/>+*) dflt=&quot;$installstyle&quot; ;;<br/> esac<br/>-rp=&quot;Do you wish to wrap malloc calls to protect against potential overflows?&quot;<br/>-. ./myread<br/>-usemallocwrap=&quot;$ans&quot;<br/>-case &quot;$ans&quot; in<br/>-y*|true)<br/>- usemallocwrap=&quot;$define&quot; ;;<br/>-*)<br/>- usemallocwrap=&quot;$undef&quot; ;;<br/>-esac<br/>+: Probably not worth prompting for this since we prompt for all<br/>+: the directories individually, and the prompt would be too long and<br/>+: confusing anyway.<br/>+installstyle=$dflt<br/> <br/>-: determine which malloc to compile in<br/>+: determine where public executables go<br/> echo &quot; &quot;<br/>-case &quot;$usemymalloc&quot; in<br/>-[yY]*|true|$define) dflt=&#39;y&#39; ;;<br/>-[nN]*|false|$undef) dflt=&#39;n&#39; ;;<br/>-*) case &quot;$ptrsize&quot; in<br/>- 4) dflt=&#39;y&#39; ;;<br/>- *) dflt=&#39;n&#39; ;;<br/>- esac<br/>- if test &quot;$useithreads&quot; = &quot;$define&quot;; then dflt=&#39;n&#39;; fi<br/>- ;;<br/>+set dflt bin bin<br/>+eval $prefixit<br/>+fn=d~<br/>+rp=&#39;Pathname where the public executables will reside?&#39;<br/>+. ./getfile<br/>+if $test &quot;X$ansexp&quot; != &quot;X$binexp&quot;; then<br/>+ installbin=&#39;&#39;<br/>+fi<br/>+prefixvar=bin<br/>+: XXX Bug? -- ignores Configure -Dinstallprefix setting.<br/>+: XXX If this is fixed, also fix the &quot;start perl&quot; hunk below, which relies on<br/>+: this via initialinstalllocation<br/>+. ./setprefixvar<br/>+<br/>+case &quot;$userelocatableinc&quot; in<br/>+$define|true|[yY]*) dflt=&#39;y&#39; ;;<br/>+*) dflt=&#39;n&#39; ;;<br/> esac<br/>-rp=&quot;Do you wish to attempt to use the malloc that comes with $package?&quot;<br/>+cat &lt;&lt;EOM<br/>+<br/>+Would you like to build Perl so that the installation is relocatable, so that<br/>+library paths in @INC are determined relative to the path of the perl binary?<br/>+This is not advised for system Perl installs, or if you need to run setid<br/>+scripts or scripts under taint mode.<br/>+<br/>+If this doesn&#39;t make any sense to you, just accept the default &#39;$dflt&#39;.<br/>+EOM<br/>+rp=&#39;Use relocatable @INC?&#39;<br/> . ./myread<br/>-usemymalloc=&quot;$ans&quot;<br/> case &quot;$ans&quot; in<br/>-y*|true)<br/>- usemymalloc=&#39;y&#39;<br/>- mallocsrc=&#39;malloc.c&#39;<br/>- mallocobj=&quot;malloc$_o&quot;<br/>- d_mymalloc=&quot;$define&quot;<br/>- case &quot;$libs&quot; in<br/>- *-lmalloc*)<br/>- : Remove malloc from list of libraries to use<br/>- echo &quot;Removing unneeded -lmalloc from library list&quot; &gt;&amp;4<br/>- set `echo X $libs | $sed -e &#39;s/-lmalloc / /&#39; -e &#39;s/-lmalloc$//&#39;`<br/>- shift<br/>- libs=&quot;$*&quot;<br/>- echo &quot;libs = $libs&quot; &gt;&amp;4<br/>- ;;<br/>- esac<br/>- ;;<br/>-*)<br/>- usemymalloc=&#39;n&#39;<br/>- mallocsrc=&#39;&#39;<br/>- mallocobj=&#39;&#39;<br/>- d_mymalloc=&quot;$undef&quot;<br/>- ;;<br/>+y|Y) val=&quot;$define&quot; ;;<br/>+*) val=&quot;$undef&quot; ;;<br/> esac<br/>+set userelocatableinc<br/>+eval $setvar<br/> <br/>-: compute the return types of malloc and free<br/>-echo &quot; &quot;<br/>-$cat &gt;malloc.c &lt;&lt;END<br/>-#$i_malloc I_MALLOC<br/>-#$i_stdlib I_STDLIB<br/>-#include &lt;stdio.h&gt;<br/>-#include &lt;sys/types.h&gt;<br/>-#ifdef I_MALLOC<br/>-#include &lt;malloc.h&gt;<br/>-#endif<br/>-#ifdef I_STDLIB<br/>-#include &lt;stdlib.h&gt;<br/>-#endif<br/>-#ifdef TRY_MALLOC<br/>-void *malloc();<br/>-#endif<br/>-#ifdef TRY_FREE<br/>-void free();<br/>-#endif<br/>-END<br/>-case &quot;$malloctype&quot; in<br/>-&#39;&#39;)<br/>- if $cc $ccflags -c -DTRY_MALLOC malloc.c &gt;/dev/null 2&gt;&amp;1; then<br/>- malloctype=&#39;void *&#39;<br/>- else<br/>- malloctype=&#39;char *&#39;<br/>- fi<br/>- ;;<br/>+initialinstalllocation=&quot;$binexp&quot;<br/>+: Default prefix is now &quot;up one level from where the binaries are&quot;<br/>+case &quot;$userelocatableinc&quot; in<br/>+$define|true|[yY]*)<br/>+ bin=&quot;.../&quot;<br/>+ binexp=&quot;.../&quot;<br/>+ prefix=&quot;.../..&quot;<br/>+ prefixexp=&quot;.../..&quot;<br/>+ installprefixexp=&quot;.../..&quot;<br/>+ ;;<br/> esac<br/>-echo &quot;Your system wants malloc to return &#39;$malloctype&#39;, it would seem.&quot; &gt;&amp;4<br/> <br/>-case &quot;$freetype&quot; in<br/>-&#39;&#39;)<br/>- if $cc $ccflags -c -DTRY_FREE malloc.c &gt;/dev/null 2&gt;&amp;1; then<br/>- freetype=&#39;void&#39;<br/>- else<br/>- freetype=&#39;int&#39;<br/>- fi<br/>- ;;<br/>+: determine where private library files go<br/>+: Usual default is /usr/local/lib/perl5/$version.<br/>+: Also allow things like /opt/perl/lib/$version, since<br/>+: /opt/perl/lib/perl5... would be redundant.<br/>+: The default &quot;style&quot; setting is made in installstyle.U<br/>+case &quot;$installstyle&quot; in<br/>+*lib/perl5*) set dflt privlib lib/$package/$version ;;<br/>+*) set dflt privlib lib/$version ;;<br/> esac<br/>-echo &quot;Your system uses $freetype free(), it would seem.&quot; &gt;&amp;4<br/>-$rm -f malloc.[co]<br/>-: determine where site specific architecture-dependent libraries go.<br/>-: sitelib default is /usr/local/lib/perl5/site_perl/$version<br/>-: sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname<br/>-: sitelib may have an optional trailing /share.<br/>-case &quot;$sitearch&quot; in<br/>-&#39;&#39;) dflt=`echo $sitelib | $sed &#39;s,/share$,,&#39;`<br/>- dflt=&quot;$dflt/$archname&quot;<br/>- ;;<br/>-*) dflt=&quot;$sitearch&quot;<br/>+eval $prefixit<br/>+$cat &lt;&lt;EOM<br/>+<br/>+There are some auxiliary files for $package that need to be put into a<br/>+private library directory that is accessible by everyone.<br/>+<br/>+EOM<br/>+fn=$binexp<br/>+fn=d~+<br/>+rp=&#39;Pathname where the private library files will reside?&#39;<br/>+. ./getfile<br/>+prefixvar=privlib<br/>+. ./setprefixvar<br/>+<br/>+: set the prefixup variable, to restore leading tilda escape<br/>+prefixup=&#39;case &quot;$prefixexp&quot; in<br/>+&quot;$prefix&quot;) ;;<br/>+*) eval &quot;$1=\`echo \$$1 | sed \&quot;s,^$prefixexp,$prefix,\&quot;\`&quot;;;<br/>+esac&#39;<br/>+<br/>+: determine where public architecture dependent libraries go<br/>+set archlib archlib<br/>+eval $prefixit<br/>+: privlib default is /usr/local/lib/$package/$version<br/>+: archlib default is /usr/local/lib/$package/$version/$archname<br/>+: privlib may have an optional trailing /share.<br/>+tdflt=`echo $privlib | $sed &#39;s,/share$,,&#39;`<br/>+tdflt=$tdflt/$archname<br/>+case &quot;$archlib&quot; in<br/>+&#39;&#39;) dflt=$tdflt<br/> ;;<br/>+*) dflt=&quot;$archlib&quot;<br/>+ ;;<br/> esac<br/>-set sitearch sitearch none<br/>-eval $prefixit<br/> $cat &lt;&lt;EOM<br/> <br/>-The installation process will also create a directory for<br/>-architecture-dependent site-specific extensions and modules.<br/>+$spackage contains architecture-dependent library files. If you are<br/>+sharing libraries in a heterogeneous environment, you might store<br/>+these files in a separate location. Otherwise, you can just include<br/>+them with the rest of the public library files.<br/> <br/> EOM<br/>-fn=d~+<br/>-rp=&#39;Pathname for the site-specific architecture-dependent library files?&#39;<br/>+fn=$binexp<br/>+fn=d+~<br/>+rp=&#39;Where do you want to put the public architecture-dependent libraries?&#39;<br/> . ./getfile<br/>-prefixvar=sitearch<br/>+prefixvar=archlib<br/> . ./setprefixvar<br/>-if $test X&quot;$sitearch&quot; = X&quot;$sitelib&quot;; then<br/>- d_sitearch=&quot;$undef&quot;<br/>+if $test X&quot;$archlib&quot; = X&quot;$privlib&quot;; then<br/>+ d_archlib=&quot;$undef&quot;<br/> else<br/>- d_sitearch=&quot;$define&quot;<br/>+ d_archlib=&quot;$define&quot;<br/> fi<br/> <br/>-: Set the vendorprefix variables<br/>+: see if setuid scripts can be secure<br/> $cat &lt;&lt;EOM<br/> <br/>-The installation process will also create a directory for<br/>-vendor-supplied add-ons. Vendors who supply perl with their system<br/>-may find it convenient to place all vendor-supplied files in this<br/>-directory rather than in the main distribution directory. This will<br/>-ease upgrades between binary-compatible maintenance versions of perl.<br/>+Some kernels have a bug that prevents setuid #! scripts from being<br/>+secure. Some sites have disabled setuid #! scripts because of this.<br/> <br/>-Of course you may also use these directories in whatever way you see<br/>-fit. For example, you might use them to access modules shared over a<br/>-company-wide network.<br/>+First let&#39;s decide if your kernel supports secure setuid #! scripts.<br/>+(If setuid #! scripts would be secure but have been disabled anyway,<br/>+don&#39;t say that they are secure if asked.)<br/> <br/>-The default answer should be fine for most people.<br/>-This causes further questions about vendor add-ons to be skipped<br/>-and no vendor-specific directories will be configured for perl.<br/>+EOM<br/>+<br/>+val=&quot;$undef&quot;<br/>+if $test -d /dev/fd; then<br/>+ echo &quot;#!$ls&quot; &gt;reflect<br/>+ chmod +x,u+s reflect<br/>+ ./reflect &gt;flect 2&gt;&amp;1<br/>+ if $contains &quot;/dev/fd&quot; flect &gt;/dev/null; then<br/>+ echo &quot;Congratulations, your kernel has secure setuid scripts!&quot; &gt;&amp;4<br/>+ val=&quot;$define&quot;<br/>+ else<br/>+ $cat &lt;&lt;EOM<br/>+If you are not sure if they are secure, I can check but I&#39;ll need a<br/>+username and password different from the one you are using right now.<br/>+If you don&#39;t have such a username or don&#39;t want me to test, simply<br/>+enter &#39;none&#39;.<br/> <br/> EOM<br/>-rp=&#39;Do you want to configure vendor-specific add-on directories?&#39;<br/>-case &quot;$usevendorprefix&quot; in<br/>-define|true|[yY]*) dflt=y ;;<br/>-*) : User may have set vendorprefix directly on Configure command line.<br/>- case &quot;$vendorprefix&quot; in<br/>- &#39;&#39;|&#39; &#39;) dflt=n ;;<br/>- *) dflt=y ;;<br/>- esac<br/>+ rp=&#39;Other username to test security of setuid scripts with?&#39;<br/>+ dflt=&#39;none&#39;<br/>+ . ./myread<br/>+ case &quot;$ans&quot; in<br/>+ n|none)<br/>+ case &quot;$d_suidsafe&quot; in<br/>+ &#39;&#39;) echo &quot;I&#39;ll assume setuid scripts are *not* secure.&quot; &gt;&amp;4<br/>+ dflt=n;;<br/>+ &quot;$undef&quot;)<br/>+ echo &quot;Well, the $hint value is *not* secure.&quot; &gt;&amp;4<br/>+ dflt=n;;<br/>+ *) echo &quot;Well, the $hint value *is* secure.&quot; &gt;&amp;4<br/>+ dflt=y;;<br/>+ esac<br/>+ ;;<br/>+ *)<br/>+ $rm -f reflect flect<br/>+ echo &quot;#!$ls&quot; &gt;reflect<br/>+ chmod +x,u+s reflect<br/>+ echo &gt;flect<br/>+ chmod a+w flect<br/>+ echo &#39;&quot;su&quot; will (probably) prompt you for &#39;&quot;$ans&#39;s password.&quot;<br/>+ su $ans -c &#39;./reflect &gt;flect&#39;<br/>+ if $contains &quot;/dev/fd&quot; flect &gt;/dev/null; then<br/>+ echo &quot;Okay, it looks like setuid scripts are secure.&quot; &gt;&amp;4<br/>+ dflt=y<br/>+ else<br/>+ echo &quot;I don&#39;t think setuid scripts are secure.&quot; &gt;&amp;4<br/>+ dflt=n<br/>+ fi<br/>+ ;;<br/>+ esac<br/>+ rp=&#39;Does your kernel have *secure* setuid scripts?&#39;<br/>+ . ./myread<br/>+ case &quot;$ans&quot; in<br/>+ [yY]*) val=&quot;$define&quot;;;<br/>+ *) val=&quot;$undef&quot;;;<br/>+ esac<br/>+ fi<br/>+else<br/>+ echo &quot;I don&#39;t think setuid scripts are secure (no /dev/fd directory).&quot; &gt;&amp;4<br/>+ echo &quot;(That&#39;s for file descriptors, not floppy disks.)&quot;<br/>+ val=&quot;$undef&quot;<br/>+fi<br/>+set d_suidsafe<br/>+eval $setvar<br/>+<br/>+$rm -f reflect flect<br/>+<br/>+: now see if they want to do setuid emulation<br/>+if $test $patchlevel -lt 11; then<br/>+echo &quot; &quot;<br/>+val=&quot;$undef&quot;<br/>+case &quot;$d_suidsafe&quot; in<br/>+&quot;$define&quot;)<br/>+ val=&quot;$undef&quot;<br/>+ echo &quot;No need to emulate SUID scripts since they are secure here.&quot; &gt;&amp;4<br/> ;;<br/>-esac<br/>-. ./myread<br/>-case &quot;$ans&quot; in<br/>-[yY]*) fn=d~+<br/>- rp=&#39;Installation prefix to use for vendor-supplied add-ons?&#39;<br/>- case &quot;$vendorprefix&quot; in<br/>- &#39;&#39;) dflt=&quot;$prefix&quot; ;;<br/>- *) dflt=$vendorprefix ;;<br/>+*)<br/>+ $cat &lt;&lt;EOM<br/>+Some systems have disabled setuid scripts, especially systems where<br/>+setuid scripts cannot be secure. On systems where setuid scripts have<br/>+been disabled, the setuid/setgid bits on scripts are currently<br/>+useless. It is possible for $package to detect those bits and emulate<br/>+setuid/setgid in a secure fashion. This emulation will only work if<br/>+setuid scripts have been disabled in your kernel.<br/>+<br/>+EOM<br/>+ case &quot;$d_dosuid&quot; in<br/>+ &quot;$define&quot;) dflt=y ;;<br/>+ *) dflt=n ;;<br/> esac<br/>- . ./getfile<br/>- : XXX Prefixit unit does not yet support siteprefix and vendorprefix<br/>- oldvendorprefix=&#39;&#39;<br/>- case &quot;$vendorprefix&quot; in<br/>- &#39;&#39;) ;;<br/>- *) case &quot;$ans&quot; in<br/>- &quot;$prefix&quot;) ;;<br/>- *) oldvendorprefix=&quot;$prefix&quot;;;<br/>- esac<br/>- ;;<br/>+ rp=&quot;Do you want to do setuid/setgid emulation?&quot;<br/>+ . ./myread<br/>+ case &quot;$ans&quot; in<br/>+ [yY]*) val=&quot;$define&quot;;;<br/>+ *) val=&quot;$undef&quot;;;<br/> esac<br/>- usevendorprefix=&quot;$define&quot;<br/>- vendorprefix=&quot;$ans&quot;<br/>- vendorprefixexp=&quot;$ansexp&quot;<br/>- ;;<br/>-*) usevendorprefix=&quot;$undef&quot;<br/>- vendorprefix=&#39;&#39;<br/>- vendorprefixexp=&#39;&#39;<br/> ;;<br/> esac<br/>+set d_dosuid<br/>+eval $setvar<br/>+else<br/>+ case &quot;$d_dosuid&quot; in<br/>+ &quot;$define&quot;)<br/>+ cat &gt;&amp;4 &lt;&lt;EOH<br/> <br/>-: Set the vendorlib variables<br/>-case &quot;$vendorprefix&quot; in<br/>-&#39;&#39;) d_vendorlib=&quot;$undef&quot;<br/>- vendorlib=&#39;&#39;<br/>- vendorlibexp=&#39;&#39;<br/>+SUID emulation has been removed for 5.12<br/>+Please re-run Configure without -Dd_dosuid<br/>+<br/>+EOH<br/>+ exit 1;<br/> ;;<br/>-*) d_vendorlib=&quot;$define&quot;<br/>- : determine where vendor-supplied modules go.<br/>- : Usual default is /usr/local/lib/perl5/vendor_perl/$version<br/>- case &quot;$vendorlib&quot; in<br/>- &#39;&#39;)<br/>- prog=`echo $package | $sed &#39;s/-*[0-9.]*$//&#39;`<br/>- case &quot;$installstyle&quot; in<br/>- *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;<br/>- *) dflt=$vendorprefix/lib/vendor_$prog/$version ;;<br/>- esac<br/>- ;;<br/>- *) dflt=&quot;$vendorlib&quot;<br/>- ;;<br/>- esac<br/>- fn=d~+<br/>- rp=&#39;Pathname for the vendor-supplied library files?&#39;<br/>- . ./getfile<br/>- vendorlib=&quot;$ans&quot;<br/>- vendorlibexp=&quot;$ansexp&quot;<br/>+ esac<br/>+ d_dosuid=undef<br/>+fi<br/>+<br/>+: Find perl5.005 or later.<br/>+echo &quot;Looking for a previously installed perl5.005 or later... &quot;<br/>+case &quot;$perl5&quot; in<br/>+&#39;&#39;) for tdir in `echo &quot;$binexp$path_sep$PATH&quot; | $sed &quot;s/$path_sep/ /g&quot;`; do<br/>+ : Check if this perl is recent and can load a simple module<br/>+ if $test -x $tdir/perl$exe_ext &amp;&amp; $tdir/perl -Mless -e &#39;use 5.005;&#39; &gt;/dev/null 2&gt;&amp;1; then<br/>+ perl5=$tdir/perl<br/>+ break;<br/>+ elif $test -x $tdir/perl5$exe_ext &amp;&amp; $tdir/perl5 -Mless -e &#39;use 5.005;&#39; &gt;/dev/null 2&gt;&amp;1; then<br/>+ perl5=$tdir/perl5<br/>+ break;<br/>+ fi<br/>+ done<br/>+ ;;<br/>+*) perl5=&quot;$perl5&quot;<br/>+ ;;<br/>+esac<br/>+case &quot;$perl5&quot; in<br/>+&#39;&#39;) echo &quot;None found. That&#39;s ok.&quot;;;<br/>+*) echo &quot;Using $perl5.&quot; ;;<br/>**** PATCH TRUNCATED AT 2000 LINES -- 1803 NOT SHOWN ****<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41664.html Wed, 20 Aug 2014 09:07:46 +0000 [perl.git] branch blead, updated. v5.21.2-198-gd77056b by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/d77056b91a9b53a2805eb7e4266c5de49c8eebc4?hp=d283e8761b900561d01c1d8807b4a2f19e0c28c1&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit d77056b91a9b53a2805eb7e4266c5de49c8eebc4<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 03:15:28 2014 -0400<br/><br/> perldelta: fix my bad pod<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 6 +++---<br/> 1 file changed, 3 insertions(+), 3 deletions(-)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index 58a21ae..4156cb6 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -118,7 +118,7 @@ Details on C level symbols and libperl.t added.<br/> =item *<br/> <br/> Recommended replacements for tmpfile, atoi, strtol, and strtoul added.<br/>- <br/>+<br/> =back<br/> <br/> =head3 L&lt;perlop&gt;<br/>@@ -222,7 +222,7 @@ long double formats, or by 64-bit integers not being available<br/> <br/> =item *<br/> <br/>-L&lt;require&gt; with no argument or undef used to warn about a Null filename; now<br/>+C&lt;require&gt; with no argument or undef used to warn about a Null filename; now<br/> it dies with C&lt;Missing or undefined argument to require&gt;.<br/> <br/> =back<br/>@@ -310,7 +310,7 @@ it handles the locales correctly. [perl #121930]<br/> =item *<br/> <br/> A bug has been fixed where zero-length assertions and code blocks inside of a<br/>-regex could cause L&lt;pos&gt; to see an incorrect value. [perl #122460]<br/>+regex could cause C&lt;pos&gt; to see an incorrect value. [perl #122460]<br/> <br/> =back<br/> <br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41663.html Wed, 20 Aug 2014 07:19:08 +0000 [perl.git] branch blead, updated. v5.21.2-197-gd283e87 by Steffen Mueller In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/d283e8761b900561d01c1d8807b4a2f19e0c28c1?hp=f88f10f50706154dd7828ac8abe4a02f99a5e280&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit d283e8761b900561d01c1d8807b4a2f19e0c28c1<br/>Author: syber &lt;syber@crazypanda.ru&gt;<br/>Date: Fri Aug 8 21:06:10 2014 +0400<br/><br/> Make S_method_common use gv_stashpvn instead of copypasted cache usage<br/> <br/> The previous commit copied the PL_stashcache handling code from<br/> S_method_common() to gv_stashpvn(), so now we can call that function<br/> directly rather than doing it ourselves.<br/><br/>M gv.c<br/>M gv.h<br/>M pp_hot.c<br/><br/>commit 4e7ebec5b38b722121a7df00ce087bb49f1c6d43<br/>Author: syber &lt;syber@crazypanda.ru&gt;<br/>Date: Fri Aug 8 19:03:03 2014 +0400<br/><br/> Make gv_stashpvn() use PL_stashcache<br/> <br/> perl has a stash name lookup cache, which is currently just used for<br/> looking up up class names in Some::Class-&gt;method calls. This means<br/> that a lookup of the class name &#39;A::B::C&#39; gets reduced from doing<br/> several stash lookups (e.g. $::{&#39;A::&#39;}{&#39;B::&#39;}{&#39;C::&#39;}) to a single<br/> cache lookup (e.g. $PL_stashcache{&#39;A::B::C::&#39;}, so to speak).<br/> <br/> Make gv_stashpvn() use this cache too, which means that all package<br/> name lookups benefit, not just class method calls. Among other things,<br/> this also indirectly affects bless operations both from Perl (OP_BLESS)<br/> and XS.<br/><br/>M gv.c<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> gv.c | 24 ++++++++++++++++++++++--<br/> gv.h | 2 ++<br/> pp_hot.c | 30 ++++++------------------------<br/> 3 files changed, 30 insertions(+), 26 deletions(-)<br/><br/>diff --git a/gv.c b/gv.c<br/>index 8b43d91..500e24b 100644<br/>--- a/gv.c<br/>+++ b/gv.c<br/>@@ -1313,8 +1313,8 @@ The most important of which are probably GV_ADD and SVf_UTF8.<br/> =cut<br/> */<br/> <br/>-HV*<br/>-Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)<br/>+PERL_STATIC_INLINE HV*<br/>+S_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)<br/> {<br/> char smallbuf[128];<br/> char *tmpbuf;<br/>@@ -1351,6 +1351,26 @@ Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)<br/> return stash;<br/> }<br/> <br/>+HV*<br/>+Perl_gv_stashpvn(pTHX_ const char *name, U32 namelen, I32 flags)<br/>+{<br/>+ HV* stash;<br/>+ const HE* const he = (const HE *)hv_common(<br/>+ PL_stashcache, NULL, name, namelen,<br/>+ (flags &amp; SVf_UTF8) ? HVhek_UTF8 : 0, 0, NULL, 0<br/>+ );<br/>+ if (he) return INT2PTR(HV*,SvIVX(HeVAL(he)));<br/>+ else if (flags &amp; GV_CACHE_ONLY) return NULL;<br/>+<br/>+ stash = S_stashpvn(aTHX_ name, namelen, flags);<br/>+ if (stash &amp;&amp; namelen) {<br/>+ SV* const ref = newSViv(PTR2IV(stash));<br/>+ hv_store(PL_stashcache, name,<br/>+ (flags &amp; SVf_UTF8) ? -(I32)namelen : (I32)namelen, ref, 0);<br/>+ }<br/>+ return stash;<br/>+}<br/>+<br/> /*<br/> =for apidoc gv_stashsv<br/> <br/>diff --git a/gv.h b/gv.h<br/>index d7ca92f..5071591 100644<br/>--- a/gv.h<br/>+++ b/gv.h<br/>@@ -235,6 +235,8 @@ Return the CV from the GV.<br/> #define GV_ADDMG 0x400 /* add if magical */<br/> #define GV_NO_SVGMAGIC 0x800 /* Skip get-magic on an SV argument;<br/> used only by gv_fetchsv(_nomg) */<br/>+#define GV_CACHE_ONLY 0x1000 /* return stash only if found in cache;<br/>+ used only in flags parameter to gv_stash* family */<br/> <br/> /* Flags for gv_fetchmeth_pvn and gv_autoload_pvn*/<br/> #define GV_SUPER 0x1000 /* SUPER::method */<br/>diff --git a/pp_hot.c b/pp_hot.c<br/>index 12a22cb..333bcc8 100644<br/>--- a/pp_hot.c<br/>+++ b/pp_hot.c<br/>@@ -3000,22 +3000,12 @@ S_method_common(pTHX_ SV* meth, U32* hashp)<br/> GV* iogv;<br/> STRLEN packlen;<br/> const char * const packname = SvPV_nomg_const(sv, packlen);<br/>- const bool packname_is_utf8 = !!SvUTF8(sv);<br/>- const HE* const he =<br/>- (const HE *)hv_common(<br/>- PL_stashcache, NULL, packname, packlen,<br/>- packname_is_utf8 ? HVhek_UTF8 : 0, 0, NULL, 0<br/>- );<br/>- <br/>- if (he) { <br/>- stash = INT2PTR(HV*,SvIV(HeVAL(he)));<br/>- DEBUG_o(Perl_deb(aTHX_ &quot;PL_stashcache hit %p for &#39;%&quot;SVf&quot;&#39;\n&quot;,<br/>- (void*)stash, SVfARG(sv)));<br/>- goto fetch;<br/>- }<br/>+ const U32 packname_utf8 = SvUTF8(sv);<br/>+ stash = gv_stashpvn(packname, packlen, packname_utf8 | GV_CACHE_ONLY);<br/>+ if (stash) goto fetch;<br/> <br/> if (!(iogv = gv_fetchpvn_flags(<br/>- packname, packlen, SVf_UTF8 * packname_is_utf8, SVt_PVIO<br/>+ packname, packlen, packname_utf8, SVt_PVIO<br/> )) ||<br/> !(ob=MUTABLE_SV(GvIO(iogv))))<br/> {<br/>@@ -3027,16 +3017,8 @@ S_method_common(pTHX_ SV* meth, U32* hashp)<br/> SVfARG(meth));<br/> }<br/> /* assume it&#39;s a package name */<br/>- stash = gv_stashpvn(packname, packlen, packname_is_utf8 ? SVf_UTF8 : 0);<br/>- if (!stash)<br/>- packsv = sv;<br/>- else {<br/>- SV* const ref = newSViv(PTR2IV(stash));<br/>- (void)hv_store(PL_stashcache, packname,<br/>- packname_is_utf8 ? -(I32)packlen : (I32)packlen, ref, 0);<br/>- DEBUG_o(Perl_deb(aTHX_ &quot;PL_stashcache caching %p for &#39;%&quot;SVf&quot;&#39;\n&quot;,<br/>- (void*)stash, SVfARG(sv)));<br/>- }<br/>+ stash = gv_stashpvn(packname, packlen, packname_utf8);<br/>+ if (!stash) packsv = sv;<br/> goto fetch;<br/> }<br/> /* it _is_ a filehandle name -- replace with a reference */<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41662.html Wed, 20 Aug 2014 07:12:18 +0000 [perl.git] branch blead, updated. v5.21.2-195-gf88f10f by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/f88f10f50706154dd7828ac8abe4a02f99a5e280?hp=830fa6b6402a2418dc24802cace065f4b53e676c&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit f88f10f50706154dd7828ac8abe4a02f99a5e280<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 02:55:31 2014 -0400<br/><br/> perldelta: finished the stragglers<br/> <br/> Cleaned up remaining XXX entries, checked formatting,<br/> all that&#39;s left is contributors.<br/><br/>M pod/perldelta.pod<br/><br/>commit bb07620631f0343d2fffca7004ea4ac0c67475f8<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 02:42:00 2014 -0400<br/><br/> perldelta for 7e0dd61, MurmurHash64[AB]<br/><br/>M pod/perldelta.pod<br/><br/>commit 258ced860b7c2efc95eb8986b0d88a57e38fdb62<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 02:39:44 2014 -0400<br/><br/> perldelta for f04d2c3<br/><br/>M pod/perldelta.pod<br/><br/>commit a1d26ccd95719f509b26b21e3dc293ab9380e11d<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 02:33:15 2014 -0400<br/><br/> perldelta: put fatal perldiags in the right spot<br/><br/>M pod/perldelta.pod<br/><br/>commit 995fe8c2d408f34404045d88c9db2f92fb4881d6<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 02:29:48 2014 -0400<br/><br/> perldelta: No deprecations or perf enhancements<br/><br/>M pod/perldelta.pod<br/><br/>commit 26dd5fd69187af137ad428010ac90ef3cdd5aa91<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 02:22:45 2014 -0400<br/><br/> perldelta for 842a9d2, [perl #122460]<br/><br/>M pod/perldelta.pod<br/><br/>commit 6e97d65d933599dddc6a83951691fe9e324d59a4<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 02:16:34 2014 -0400<br/><br/> perldelta: platform specific notes<br/><br/>M pod/perldelta.pod<br/><br/>commit 1c43698bb7a30756ad27d5ff52376ba1d596e8bb<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 01:53:59 2014 -0400<br/><br/> perldelta: document grok_atou<br/><br/>M pod/perldelta.pod<br/><br/>commit e917e94e4f75ef7627390d5a0d00bcf987fca0d5<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 01:49:31 2014 -0400<br/><br/> perldelta for f57000b<br/><br/>M pod/perldelta.pod<br/><br/>commit 2a395b86d24456e23dbeacb31f5e6ebc49f5ea60<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 01:32:35 2014 -0400<br/><br/> perldelta: Added documentation changes<br/><br/>M pod/perldelta.pod<br/><br/>commit 210a9fe42dcac105066fd1cd224d7ee9ae5e08dc<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 01:05:48 2014 -0400<br/><br/> perldelta remove (most) boilerplate<br/><br/>M pod/perldelta.pod<br/><br/>commit 6ab3666bc113862d86ad897ee356e5737331719c<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 00:53:26 2014 -0400<br/><br/> perldelta for Safe changes<br/> <br/> Safe was bumped to 2.38 after a mechanism to replace subs was<br/> discovered and fixed.<br/><br/>M pod/perldelta.pod<br/><br/>commit 55e8b28661078640c4e39ba79a3961eb1d9db0c2<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 00:33:49 2014 -0400<br/><br/> perldelta for 57d69a4<br/> <br/> HTTP::Tiny version bump<br/><br/>M pod/perldelta.pod<br/><br/>commit d1f01a6330ce5686c7ac22a150f9b881a3c7e67c<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 00:31:07 2014 -0400<br/><br/> perldelta for f4ef132<br/> <br/> defined(AASSIGN) is not fatalized<br/><br/>M pod/perldelta.pod<br/><br/>commit ca58223be25f27453eb7e268c57fea2446af8686<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 00:16:34 2014 -0400<br/><br/> perldelta for 60df683<br/> <br/> Config::Perl::V version bump<br/><br/>M pod/perldelta.pod<br/><br/>commit 23b03637d8b014e3ff44ec87a09981bab7ee6433<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 00:14:32 2014 -0400<br/><br/> perldelta for 5f8324b<br/> <br/> CPAN::Meta version bump<br/><br/>M pod/perldelta.pod<br/><br/>commit 85e8fb102d0c1e6bcef62980ebbb51e6144561c7<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Wed Aug 20 00:13:22 2014 -0400<br/><br/> perldelta for 54b7cb3<br/> <br/> Delta for CPAN::Meta::Requirements version bump<br/><br/>M pod/perldelta.pod<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 331 +++++++++++++++---------------------------------------<br/> 1 file changed, 93 insertions(+), 238 deletions(-)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index 37c9692..58a21ae 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -2,9 +2,6 @@<br/> <br/> =head1 NAME<br/> <br/>-[ this is a template for a new perldelta file. Any text flagged as XXX needs<br/>-to be processed before release. ]<br/>-<br/> perldelta - what is new for perl v5.21.3<br/> <br/> =head1 DESCRIPTION<br/>@@ -15,182 +12,142 @@ release.<br/> If you are upgrading from an earlier release such as 5.21.1, first read<br/> L&lt;perl5212delta&gt;, which describes differences between 5.21.1 and 5.21.2.<br/> <br/>-=head1 Notice<br/>+=head1 Core Enhancements<br/> <br/>-XXX Any important notices here<br/>+=head2 C&lt;defined(@array = LIST)&gt; is no longer fatal<br/> <br/>-=head1 Core Enhancements<br/>+In 5.21.1, C&lt;defined(@array)&gt; was made fatal. This has been relaxed<br/>+to not die if the argument is assigning to an array.<br/> <br/>-XXX New core language features go here. Summarize user-visible core language<br/>-enhancements. Particularly prominent performance optimisations could go<br/>-here, but most should go in the L&lt;/Performance Enhancements&gt; section.<br/>+=head2 Floating point handling and parsing has been improved<br/> <br/>-[ List each enhancement as a =head2 entry ]<br/>+A number of area in the core that handle the parsing and printing<br/>+of floating point values have been improved.<br/> <br/> =head1 Security<br/> <br/>-XXX Any security-related notices go here. In particular, any security<br/>-vulnerabilities closed should be noted here rather than in the<br/>-L&lt;/Selected Bug Fixes&gt; section.<br/>+=head2 The L&lt;Safe&gt; module could allow outside packages to be replaced<br/> <br/>-[ List each security issue as a =head2 entry ]<br/>+Critical bugfix: outside packages could be replaced. L&lt;Safe&gt; has<br/>+been patched to 2.38 to address this.<br/> <br/> =head1 Incompatible Changes<br/> <br/>-XXX For a release on a stable branch, this section aspires to be:<br/>-<br/>- There are no changes intentionally incompatible with 5.XXX.XXX<br/>- If any exist, they are bugs, and we request that you submit a<br/>- report. See L&lt;/Reporting Bugs&gt; below.<br/>-<br/>-[ List each incompatible change as a =head2 entry ]<br/>-<br/> =head2 S&lt;C&lt;use UNIVERSAL &#39;...&#39;&gt;&gt; is now a fatal error<br/> <br/> Importing functions from C&lt;UNIVERSAL&gt; has been deprecated since v5.12, and<br/> is now a fatal error. S&lt;C&lt;&quot;use UNIVERSAL&quot;&gt;&gt; without any arguments is still<br/> allowed.<br/> <br/>-=head1 Deprecations<br/>-<br/>-XXX Any deprecated features, syntax, modules etc. should be listed here.<br/>-<br/>-=head2 Module removals<br/>-<br/>-XXX Remove this section if inapplicable.<br/>+=head1 Modules and Pragmata<br/> <br/>-The following modules will be removed from the core distribution in a<br/>-future release, and will at that time need to be installed from CPAN.<br/>-Distributions on CPAN which require these modules will need to list them as<br/>-prerequisites.<br/>+=head2 Updated Modules and Pragmata<br/> <br/>-The core versions of these modules will now issue C&lt;&quot;deprecated&quot;&gt;-category<br/>-warnings to alert you to this fact. To silence these deprecation warnings,<br/>-install the modules in question from CPAN.<br/>+=over 4<br/> <br/>-Note that these are (with rare exceptions) fine modules that you are encouraged<br/>-to continue to use. Their disinclusion from core primarily hinges on their<br/>-necessity to bootstrapping a fully functional, CPAN-capable Perl installation,<br/>-not usually on concerns over their design.<br/>+=item *<br/> <br/>-=over<br/>+L&lt;B::Debug&gt; has been upgraded from version 1.19 to 1.21.<br/> <br/>-=item XXX<br/>+=item *<br/> <br/>-XXX Note that deprecated modules should be listed here even if they are listed<br/>-as an updated module in the L&lt;/Modules and Pragmata&gt; section.<br/>+L&lt;Config::Perl::V&gt; has been upgraded from version 0.20 to 0.22.<br/> <br/>-=back<br/>+=item *<br/> <br/>-[ List each other deprecation as a =head2 entry ]<br/>+L&lt;CPAN::Meta&gt; has been upgraded from version 2.141520 to 2.142060.<br/> <br/>-=head1 Performance Enhancements<br/>+=item *<br/> <br/>-XXX Changes which enhance performance without changing behaviour go here.<br/>-There may well be none in a stable release.<br/>+L&lt;CPAN::Meta::Requirements&gt; has been upgraded from version 2.125 to 2.126.<br/> <br/>-[ List each enhancement as a =item entry ]<br/>+=item *<br/> <br/>-=over 4<br/>+L&lt;ExtUtils::Manifest&gt; has been upgraded from version 1.64 to 1.65.<br/> <br/> =item *<br/> <br/>-XXX<br/>+L&lt;HTTP::Tiny&gt; has been upgraded from version 0.043 to 0.047.<br/> <br/>-=back<br/>+=item *<br/> <br/>-=head1 Modules and Pragmata<br/>+L&lt;perl5db.pl&gt; has been upgraded from version 1.45 to 1.46.<br/> <br/>-XXX All changes to installed files in F&lt;cpan/&gt;, F&lt;dist/&gt;, F&lt;ext/&gt; and F&lt;lib/&gt;<br/>-go here. If Module::CoreList is updated, generate an initial draft of the<br/>-following sections using F&lt;Porting/corelist-perldelta.pl&gt;. A paragraph summary<br/>-for important changes should then be added by hand. In an ideal world,<br/>-dual-life modules would have a F&lt;Changes&gt; file that could be cribbed.<br/>+=item *<br/> <br/>-[ Within each section, list entries as a =item entry ]<br/>+L&lt;POSIX&gt; has been upgraded from version 1.41 to 1.42.<br/> <br/>-=head2 New Modules and Pragmata<br/>+=item *<br/> <br/>-=over 4<br/>+L&lt;Safe&gt; has been upgraded from version 2.37 to 2.38.<br/> <br/> =item *<br/> <br/>-XXX<br/>+L&lt;Socket&gt; has been upgraded from version 2.014 to 2.015.<br/> <br/> =back<br/> <br/>-=head2 Updated Modules and Pragmata<br/>+=head1 Documentation<br/> <br/>-=over 4<br/>+=head2 Changes to Existing Documentation<br/> <br/>-=item *<br/>+=head3 L&lt;perlexperiment&gt;<br/> <br/>-L&lt;B::Debug&gt; has been upgraded from version 1.19 to 1.21<br/>+=over 4<br/> <br/> =item *<br/> <br/>-L&lt;ExtUtils::Manifest&gt; has been upgraded from version 1.64 to 1.65.<br/>+Added reference to L&lt;feature&gt;.<br/> <br/>-The MANIFEST is now opened with C&lt;:raw&gt;, to prevent C&lt;CRLF&gt;s leaking in.<br/>+=back<br/> <br/>-=item *<br/>+=head3 L&lt;perlguts&gt;<br/> <br/>-L&lt;perl5db.pl&gt; has been upgraded from version 1.45 to 1.46.<br/>-<br/>-Fixed the scope level handling of the debugger&#39;s C&lt;y&gt; command.<br/>+=over 4<br/> <br/> =item *<br/> <br/>-L&lt;POSIX&gt; has been upgraded from version 1.41 to 1.42.<br/>+Details on C level symbols and libperl.t added.<br/> <br/>-Replaced the thread-unsafe code used to prevent duplicate warning<br/>-messages for using the isxxx() functions. [perl #122476]<br/>+=back<br/> <br/>-=item *<br/>+=head3 L&lt;perlhacktips&gt;<br/> <br/>-L&lt;Socket&gt; has been upgraded from version 2.014 to 2.015.<br/>+=over 4<br/> <br/>-Test suite updates, particularly useful for Solaris and cygwin, and<br/>-a slight change to the pattern used for IPv4 address matching.<br/>+=item *<br/> <br/>+Recommended replacements for tmpfile, atoi, strtol, and strtoul added.<br/>+ <br/> =back<br/> <br/>-=head2 Removed Modules and Pragmata<br/>+=head3 L&lt;perlop&gt;<br/> <br/> =over 4<br/> <br/> =item *<br/> <br/>-XXX<br/>+ASCII v. EBCDIC clarifications added.<br/> <br/> =back<br/> <br/>-=head1 Documentation<br/>-<br/>-XXX Changes to files in F&lt;pod/&gt; go here. Consider grouping entries by<br/>-file and be sure to link to the appropriate page, e.g. L&lt;perlfunc&gt;.<br/>-<br/>-=head2 New Documentation<br/>+=head3 L&lt;perlsec&gt;<br/> <br/>-XXX Changes which create B&lt;new&gt; files in F&lt;pod/&gt; go here.<br/>-<br/>-=head3 L&lt;XXX&gt;<br/>+=over 4<br/> <br/>-XXX Description of the purpose of the new file here<br/>+=item *<br/> <br/>-=head2 Changes to Existing Documentation<br/>+Comments added on algorithmic complexity and tied hashes.<br/> <br/>-XXX Changes which significantly change existing files in F&lt;pod/&gt; go here.<br/>-However, any changes to F&lt;pod/perldiag.pod&gt; should go in the L&lt;/Diagnostics&gt;<br/>-section.<br/>+=back<br/> <br/>-=head3 L&lt;XXX&gt;<br/>+=head3 L&lt;perlvms&gt;<br/> <br/> =over 4<br/> <br/> =item *<br/> <br/>-XXX Description of the change here<br/>+Updated documentation on environment and shell interaction in VMS.<br/> <br/> =back<br/> <br/>@@ -200,21 +157,25 @@ The following additions or changes have been made to diagnostic output,<br/> including warnings and fatal error messages. For the complete list of<br/> diagnostic messages, see L&lt;perldiag&gt;.<br/> <br/>-XXX New or changed warnings emitted by the core&#39;s C&lt;C&gt; code go here. Also<br/>-include any changes in L&lt;perldiag&gt; that reconcile it to the C&lt;C&gt; code.<br/>-<br/> =head2 New Diagnostics<br/> <br/>-XXX Newly added diagnostic messages go under here, separated into New Errors<br/>-and New Warnings<br/>-<br/> =head3 New Errors<br/> <br/> =over 4<br/> <br/> =item *<br/> <br/>-XXX L&lt;message|perldiag/&quot;message&quot;&gt;<br/>+L&lt;Hexadecimal float: internal error|perldiag/&quot;Hexadecimal float: internal error&quot;&gt;<br/>+<br/>+(F) Something went horribly bad in hexadecimal float handling.<br/>+<br/>+=item *<br/>+<br/>+L&lt;Hexadecimal float: unsupported long double format|perldiag/&quot;Hexadecimal float: unsupported long double format&quot;&gt;<br/>+<br/>+(F) You have configured Perl to use long doubles but<br/>+the internals of the long double format are unknown,<br/>+therefore the hexadecimal float output is impossible.<br/> <br/> =back<br/> <br/>@@ -238,12 +199,6 @@ than the floating point supports.<br/> <br/> =item *<br/> <br/>-L&lt;Hexadecimal float: internal error|perldiag/&quot;Hexadecimal float: internal error&quot;&gt;<br/>-<br/>-(F) Something went horribly bad in hexadecimal float handling.<br/>-<br/>-=item *<br/>-<br/> L&lt;Hexadecimal float: mantissa overflow|perldiag/&quot;Hexadecimal float: mantissa overflow&quot;&gt;<br/> <br/> (W overflow) The hexadecimal floating point literal had more bits in<br/>@@ -259,139 +214,60 @@ digits than could be output. This can be caused by unsupported<br/> long double formats, or by 64-bit integers not being available<br/> (needed to retrieve the digits under some configurations).<br/> <br/>-=item *<br/>-<br/>-L&lt;Hexadecimal float: unsupported long double format|perldiag/&quot;Hexadecimal float: unsupported long double format&quot;&gt;<br/>-<br/>-(F) You have configured Perl to use long doubles but<br/>-the internals of the long double format are unknown,<br/>-therefore the hexadecimal float output is impossible.<br/>-<br/> =back<br/> <br/> =head2 Changes to Existing Diagnostics<br/> <br/>-XXX Changes (i.e. rewording) of diagnostic messages go here<br/>-<br/>-=over 4<br/>-<br/>-=item *<br/>-<br/>-XXX Describe change here<br/>-<br/>-=back<br/>-<br/>-=head1 Utility Changes<br/>-<br/>-XXX Changes to installed programs such as F&lt;perlbug&gt; and F&lt;xsubpp&gt; go here.<br/>-Most of these are built within the directory F&lt;utils&gt;.<br/>-<br/>-[ List utility changes as a =head2 entry for each utility and =item<br/>-entries for each change<br/>-Use L&lt;XXX&gt; with program names to get proper documentation linking. ]<br/>-<br/>-=head2 L&lt;XXX&gt;<br/>-<br/> =over 4<br/> <br/> =item *<br/> <br/>-XXX<br/>+L&lt;require&gt; with no argument or undef used to warn about a Null filename; now<br/>+it dies with C&lt;Missing or undefined argument to require&gt;.<br/> <br/> =back<br/> <br/> =head1 Configuration and Compilation<br/> <br/>-XXX Changes to F&lt;Configure&gt;, F&lt;installperl&gt;, F&lt;installman&gt;, and analogous tools<br/>-go here. Any other changes to the Perl build process should be listed here.<br/>-However, any platform-specific changes should be listed in the<br/>-L&lt;/Platform Support&gt; section, instead.<br/>-<br/>-[ List changes as a =item entry ].<br/>-<br/>-=over 4<br/>-<br/>-=item *<br/>-<br/>-Internal handling of floating point values has been improved.<br/>-<br/>-=back<br/>-<br/>-=head1 Testing<br/>-<br/>-XXX Any significant changes to the testing of a freshly built perl should be<br/>-listed here. Changes which create B&lt;new&gt; files in F&lt;t/&gt; go here as do any<br/>-large changes to the testing harness (e.g. when parallel testing was added).<br/>-Changes to existing files in F&lt;t/&gt; aren&#39;t worth summarizing, although the bugs<br/>-that they represent may be covered elsewhere.<br/>-<br/>-[ List each test improvement as a =item entry ]<br/>-<br/> =over 4<br/> <br/> =item *<br/> <br/>-XXX<br/>+MurmurHash64A and MurmurHash64B can now be configured as the internal hash<br/>+function.<br/> <br/> =back<br/> <br/> =head1 Platform Support<br/> <br/>-XXX Any changes to platform support should be listed in the sections below.<br/>-<br/>-[ Within the sections, list each platform as a =item entry with specific<br/>-changes as paragraphs below it. ]<br/>-<br/>-=head2 New Platforms<br/>-<br/>-XXX List any platforms that this version of perl compiles on, that previous<br/>-versions did not. These will either be enabled by new files in the F&lt;hints/&gt;<br/>-directories, or new subdirectories and F&lt;README&gt; files at the top level of the<br/>-source tree.<br/>-<br/>-=over 4<br/>-<br/>-=item XXX-some-platform<br/>-<br/>-XXX<br/>-<br/>-=back<br/>-<br/>-=head2 Discontinued Platforms<br/>-<br/>-XXX List any platforms that this version of perl no longer compiles on.<br/>+=head2 Platform-Specific Notes<br/> <br/> =over 4<br/> <br/>-=item XXX-some-platform<br/>+=item Android<br/> <br/>-XXX<br/>+Build support has been improved for cross-compiling in general and for<br/>+Android in particular.<br/> <br/>-=back<br/>+=item Solaris<br/> <br/>-=head2 Platform-Specific Notes<br/>+C&lt;c99&gt; options have been cleaned up, hints look for C&lt;solstudio&gt;<br/>+as well as C&lt;SUNWspro&gt;, and support for native C&lt;setenv&gt; has been added.<br/> <br/>-XXX List any changes for specific platforms. This could include configuration<br/>-and compilation changes or changes in portability/compatibility. However,<br/>-changes within modules for platforms should generally be listed in the<br/>-L&lt;/Modules and Pragmata&gt; section.<br/>+=item VMS<br/> <br/>-=over 4<br/>+C&lt;finite&gt;, C&lt;finitel&gt;, and C&lt;isfinite&gt; detection has been added to<br/>+C&lt;configure.com&gt;, environment handling has had some minor changes, and<br/>+a fix for legacy feature checking status.<br/> <br/>-=item XXX-some-platform<br/>+=item Windows<br/> <br/>-XXX<br/>+C&lt;%I64d&gt; is now being used instead of C&lt;%lld&gt; for MinGW.<br/> <br/> =back<br/> <br/> =head1 Internal Changes<br/> <br/>-XXX Changes which affect the interface available to C&lt;XS&gt; code go here. Other<br/>-significant internal changes for future core maintainers should be noted as<br/>-well.<br/>-<br/>-[ List each change as a =item entry ]<br/>-<br/> =over 4<br/> <br/> =item *<br/>@@ -402,14 +278,13 @@ certain non-Perl libraries called from XS, such as C&lt;Gtk&gt; do so. When this<br/> happens, Perl needs to be told that the locale has changed. Use this function<br/> to do so, before returning to Perl.<br/> <br/>-=back<br/>+=item *<br/> <br/>-=head1 Selected Bug Fixes<br/>+Added L&lt;perlapi/grok_atou&gt; as a safer replacement for atoi and strtol.<br/> <br/>-XXX Important bug fixes in the core language are summarized here. Bug fixes in<br/>-files in F&lt;ext/&gt; and F&lt;lib/&gt; are best summarized in L&lt;/Modules and Pragmata&gt;.<br/>+=back<br/> <br/>-[ List each fix as a =item entry ]<br/>+=head1 Selected Bug Fixes<br/> <br/> =over 4<br/> <br/>@@ -425,40 +300,20 @@ block. [perl #122107]<br/> C&lt;method { BLOCK } ARGS&gt; syntax now correctly parses the arguments if they<br/> begin with an opening brace. [perl #46947]<br/> <br/>-=back<br/>-<br/>-=head1 Known Problems<br/>-<br/>-XXX Descriptions of platform agnostic bugs we know we can&#39;t fix go here. Any<br/>-tests that had to be C&lt;TODO&gt;ed for the release would be noted here. Unfixed<br/>-platform specific bugs also go here.<br/>-<br/>-[ List each fix as a =item entry ]<br/>-<br/>-=over 4<br/>-<br/> =item *<br/> <br/>-XXX<br/>-<br/>-=back<br/>-<br/>-=head1 Errata From Previous Releases<br/>-<br/>-=over 4<br/>+External libraries and Perl may have different ideas of what the locale is.<br/>+This is problematic when parsing version strings if the locale&#39;s numeric<br/>+separator has been changed. Version parsing has been patched to ensure<br/>+it handles the locales correctly. [perl #121930]<br/> <br/> =item *<br/> <br/>-XXX Add anything here that we forgot to add, or were mistaken about, in<br/>-the perldelta of a previous release.<br/>+A bug has been fixed where zero-length assertions and code blocks inside of a<br/>+regex could cause L&lt;pos&gt; to see an incorrect value. [perl #122460]<br/> <br/> =back<br/> <br/>-=head1 Obituary<br/>-<br/>-XXX If any significant core contributor has died, we&#39;ve added a short obituary<br/>-here.<br/>-<br/> =head1 Acknowledgements<br/> <br/> XXX Generate this with:<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41661.html Wed, 20 Aug 2014 06:57:18 +0000 [perl.git] branch blead, updated. v5.21.2-178-g830fa6b by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/830fa6b6402a2418dc24802cace065f4b53e676c?hp=b3e82ed1c880420d4664341abc85a8cc662b65c1&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 830fa6b6402a2418dc24802cace065f4b53e676c<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Tue Aug 19 23:59:06 2014 -0400<br/><br/> perldelta for 438f0014a812, revised<br/> <br/> It was actually 1.19 to 1.21, missed the earlier one.<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 2 +-<br/> 1 file changed, 1 insertion(+), 1 deletion(-)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index e2bae08..37c9692 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -125,7 +125,7 @@ XXX<br/> <br/> =item *<br/> <br/>-L&lt;B::Debug&gt; has been upgraded from version 1.20 to 1.21<br/>+L&lt;B::Debug&gt; has been upgraded from version 1.19 to 1.21<br/> <br/> =item *<br/> <br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41660.html Wed, 20 Aug 2014 04:00:39 +0000 [perl.git] branch blead, updated. v5.21.2-177-gb3e82ed by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/b3e82ed1c880420d4664341abc85a8cc662b65c1?hp=a5873648505fd8266274b6d6007e339669e17f8a&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit b3e82ed1c880420d4664341abc85a8cc662b65c1<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Tue Aug 19 23:55:46 2014 -0400<br/><br/> perldelta for 438f0014a812<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 4 ++++<br/> 1 file changed, 4 insertions(+)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index 7f03560..e2bae08 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -125,6 +125,10 @@ XXX<br/> <br/> =item *<br/> <br/>+L&lt;B::Debug&gt; has been upgraded from version 1.20 to 1.21<br/>+<br/>+=item *<br/>+<br/> L&lt;ExtUtils::Manifest&gt; has been upgraded from version 1.64 to 1.65.<br/> <br/> The MANIFEST is now opened with C&lt;:raw&gt;, to prevent C&lt;CRLF&gt;s leaking in.<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41659.html Wed, 20 Aug 2014 03:56:25 +0000 [perl.git] branch blead, updated. v5.21.2-176-ga587364 by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/a5873648505fd8266274b6d6007e339669e17f8a?hp=7d19f6a11a30ce0a163dbe6444ca8ba22169d9a0&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit a5873648505fd8266274b6d6007e339669e17f8a<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Tue Aug 19 23:48:48 2014 -0400<br/><br/> perldelta for jhi double/float work<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 45 +++++++++++++++++++++++++++++++++++++++++++--<br/> 1 file changed, 43 insertions(+), 2 deletions(-)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index e8267c4..7f03560 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -220,7 +220,48 @@ XXX L&lt;message|perldiag/&quot;message&quot;&gt;<br/> <br/> =item *<br/> <br/>-XXX L&lt;message|perldiag/&quot;message&quot;&gt;<br/>+L&lt;Hexadecimal float: exponent overflow|perldiag/&quot;Hexadecimal float: exponent overflow&quot;&gt;<br/>+<br/>+(W overflow) The hexadecimal floating point has larger exponent<br/>+than the floating point supports.<br/>+<br/>+=item *<br/>+<br/>+L&lt;Hexadecimal float: exponent underflow|perldiag/&quot;Hexadecimal float: exponent underflow&quot;&gt;<br/>+<br/>+(W overflow) The hexadecimal floating point has smaller exponent<br/>+than the floating point supports.<br/>+<br/>+=item *<br/>+<br/>+L&lt;Hexadecimal float: internal error|perldiag/&quot;Hexadecimal float: internal error&quot;&gt;<br/>+<br/>+(F) Something went horribly bad in hexadecimal float handling.<br/>+<br/>+=item *<br/>+<br/>+L&lt;Hexadecimal float: mantissa overflow|perldiag/&quot;Hexadecimal float: mantissa overflow&quot;&gt;<br/>+<br/>+(W overflow) The hexadecimal floating point literal had more bits in<br/>+the mantissa (the part between the 0x and the exponent, also known as<br/>+the fraction or the significand) than the floating point supports.<br/>+<br/>+=item *<br/>+<br/>+L&lt;Hexadecimal float: precision loss|perldiag/&quot;Hexadecimal float: precision loss&quot;&gt;<br/>+<br/>+(W overflow) The hexadecimal floating point had internally more<br/>+digits than could be output. This can be caused by unsupported<br/>+long double formats, or by 64-bit integers not being available<br/>+(needed to retrieve the digits under some configurations).<br/>+<br/>+=item *<br/>+<br/>+L&lt;Hexadecimal float: unsupported long double format|perldiag/&quot;Hexadecimal float: unsupported long double format&quot;&gt;<br/>+<br/>+(F) You have configured Perl to use long doubles but<br/>+the internals of the long double format are unknown,<br/>+therefore the hexadecimal float output is impossible.<br/> <br/> =back<br/> <br/>@@ -268,7 +309,7 @@ L&lt;/Platform Support&gt; section, instead.<br/> <br/> =item *<br/> <br/>-XXX<br/>+Internal handling of floating point values has been improved.<br/> <br/> =back<br/> <br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41658.html Wed, 20 Aug 2014 03:50:39 +0000 [perl.git] branch smoke-me/jhi/hexfp, created. v5.21.2-175-ga34ceeb by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/hexfp has been created<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/a34ceebf323b37aeec07c3e53410f6e42d511e7b?hp=0000000000000000000000000000000000000000&gt;<br/><br/> at a34ceebf323b37aeec07c3e53410f6e42d511e7b (commit)<br/><br/>- Log -----------------------------------------------------------------<br/>commit a34ceebf323b37aeec07c3e53410f6e42d511e7b<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Tue Aug 19 18:44:30 2014 -0400<br/><br/> Add comment about special hexfp values to-do.<br/><br/>M sv.c<br/><br/>commit 882d2570b1de9dabe628980c31711c8073a8ed24<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Tue Aug 19 22:16:54 2014 -0400<br/><br/> Quadruple float BE test triggering had a typo.<br/><br/>M t/op/sprintf2.t<br/><br/>commit 68c4ae6eb262cc02d16f959e410d2b8994a56cd3<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 17:04:06 2014 -0400<br/><br/> double-double needs the first mantissa bits of doubles.<br/><br/>M sv.c<br/><br/>commit 2154e7b3de785cdf900eae1a9956e9357c88ee2c<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 15:27:58 2014 -0400<br/><br/> Modify the hexfp exponent explicitly in each long double case.<br/><br/>M sv.c<br/><br/>commit 8e0a7010f0392199cc28a917104714fe8fd97ed0<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 12:56:51 2014 -0400<br/><br/> Likely changes for double-double tests.<br/><br/>M t/op/sprintf2.t<br/><br/>commit 61434214e6c0d010b49934dbcf4fe51877458382<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:13:18 2014 -0400<br/><br/> Comment: scan_num also handles hexadecimal floats now.<br/><br/>M toke.c<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41657.html Wed, 20 Aug 2014 03:31:02 +0000 [perl.git] branch blead, updated. v5.21.2-175-g7d19f6a by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/7d19f6a11a30ce0a163dbe6444ca8ba22169d9a0?hp=9c97a3428060779b3fc7bba70c207aba27191c51&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 7d19f6a11a30ce0a163dbe6444ca8ba22169d9a0<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Tue Aug 19 22:58:33 2014 -0400<br/><br/> perldelta for 4cedf205aa6e<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 6 ++++++<br/> 1 file changed, 6 insertions(+)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index 421bd11..e8267c4 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -125,6 +125,12 @@ XXX<br/> <br/> =item *<br/> <br/>+L&lt;ExtUtils::Manifest&gt; has been upgraded from version 1.64 to 1.65.<br/>+<br/>+The MANIFEST is now opened with C&lt;:raw&gt;, to prevent C&lt;CRLF&gt;s leaking in.<br/>+<br/>+=item *<br/>+<br/> L&lt;perl5db.pl&gt; has been upgraded from version 1.45 to 1.46.<br/> <br/> Fixed the scope level handling of the debugger&#39;s C&lt;y&gt; command.<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41656.html Wed, 20 Aug 2014 03:30:49 +0000 [perl.git] branch blead, updated. v5.21.2-174-g9c97a34 by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/9c97a3428060779b3fc7bba70c207aba27191c51?hp=796f59e8ef090b760dc0dc03ab3ad4ea5c9425d0&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 9c97a3428060779b3fc7bba70c207aba27191c51<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Tue Aug 19 22:40:08 2014 -0400<br/><br/> perldelta for 3699825258c<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 7 +++++++<br/> 1 file changed, 7 insertions(+)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index 39e1719..421bd11 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -136,6 +136,13 @@ L&lt;POSIX&gt; has been upgraded from version 1.41 to 1.42.<br/> Replaced the thread-unsafe code used to prevent duplicate warning<br/> messages for using the isxxx() functions. [perl #122476]<br/> <br/>+=item *<br/>+<br/>+L&lt;Socket&gt; has been upgraded from version 2.014 to 2.015.<br/>+<br/>+Test suite updates, particularly useful for Solaris and cygwin, and<br/>+a slight change to the pattern used for IPv4 address matching.<br/>+<br/> =back<br/> <br/> =head2 Removed Modules and Pragmata<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41655.html Wed, 20 Aug 2014 02:41:53 +0000 [perl.git] branch blead, updated. v5.21.2-173-g796f59e by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/796f59e8ef090b760dc0dc03ab3ad4ea5c9425d0?hp=11d55ae189b0816fc5b6764b74cd09ee6704bcbb&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 796f59e8ef090b760dc0dc03ab3ad4ea5c9425d0<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Tue Aug 19 22:16:52 2014 -0400<br/><br/> perldelta typo fix: change a &#39;,&#39; to a &#39;.&#39;<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perldelta.pod | 2 +-<br/> 1 file changed, 1 insertion(+), 1 deletion(-)<br/><br/>diff --git a/pod/perldelta.pod b/pod/perldelta.pod<br/>index 5bde654..39e1719 100644<br/>--- a/pod/perldelta.pod<br/>+++ b/pod/perldelta.pod<br/>@@ -125,7 +125,7 @@ XXX<br/> <br/> =item *<br/> <br/>-L&lt;perl5db.pl&gt; has been upgraded from version 1,45 to 1.46.<br/>+L&lt;perl5db.pl&gt; has been upgraded from version 1.45 to 1.46.<br/> <br/> Fixed the scope level handling of the debugger&#39;s C&lt;y&gt; command.<br/> <br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41654.html Wed, 20 Aug 2014 02:17:29 +0000 [perl.git] branch blead, updated. v5.21.2-172-g11d55ae by Peter Martini In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/11d55ae189b0816fc5b6764b74cd09ee6704bcbb?hp=ad81d09f91f86467273aeb1e8bc31ea2a0537f36&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit 11d55ae189b0816fc5b6764b74cd09ee6704bcbb<br/>Author: Peter Martini &lt;PeterCMartini@GMail.com&gt;<br/>Date: Tue Aug 19 21:23:39 2014 -0400<br/><br/> Revert Test::Builder changes in prep for 5.21.3<br/> <br/> This reverts commit 6bdb88770f849c47b5c09e733ac460ce3e9dbc97<br/> and commit 59c96aebdd56baf5d1979103046b1c6d4e308aa2, which<br/> are causing the test suite to run much slower and which are<br/> failing on some platforms.<br/> <br/> http://nntp.perl.org/group/perl.perl5.porters/218678 has<br/> further details, with RT 122538 being the ticket number.<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> MANIFEST | 346 +--<br/> Makefile.SH | 4 +-<br/> cpan/Test-Simple/lib/Test/Builder.pm | 3211 +++++++++++---------<br/> cpan/Test-Simple/lib/Test/Builder/Event.pm | 134 -<br/> cpan/Test-Simple/lib/Test/Builder/Event/Bail.pm | 116 -<br/> cpan/Test-Simple/lib/Test/Builder/Event/Child.pm | 146 -<br/> cpan/Test-Simple/lib/Test/Builder/Event/Diag.pm | 156 -<br/> cpan/Test-Simple/lib/Test/Builder/Event/Finish.pm | 111 -<br/> cpan/Test-Simple/lib/Test/Builder/Event/Note.pm | 120 -<br/> cpan/Test-Simple/lib/Test/Builder/Event/Ok.pm | 268 --<br/> cpan/Test-Simple/lib/Test/Builder/Event/Plan.pm | 135 -<br/> cpan/Test-Simple/lib/Test/Builder/ExitMagic.pm | 194 --<br/> cpan/Test-Simple/lib/Test/Builder/Fork.pm | 171 --<br/> cpan/Test-Simple/lib/Test/Builder/Formatter.pm | 180 --<br/> .../lib/Test/Builder/Formatter/LegacyResults.pm | 166 -<br/> cpan/Test-Simple/lib/Test/Builder/Formatter/TAP.pm | 447 ---<br/> cpan/Test-Simple/lib/Test/Builder/Module.pm | 61 +-<br/> cpan/Test-Simple/lib/Test/Builder/Provider.pm | 463 ---<br/> cpan/Test-Simple/lib/Test/Builder/Stream.pm | 684 -----<br/> cpan/Test-Simple/lib/Test/Builder/Tester.pm | 120 +-<br/> cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm | 3 +-<br/> cpan/Test-Simple/lib/Test/Builder/Threads.pm | 107 -<br/> cpan/Test-Simple/lib/Test/Builder/Trace.pm | 341 ---<br/> cpan/Test-Simple/lib/Test/Builder/Trace/Frame.pm | 240 --<br/> cpan/Test-Simple/lib/Test/Builder/Util.pm | 450 ---<br/> cpan/Test-Simple/lib/Test/FAQ.pod | 379 ---<br/> cpan/Test-Simple/lib/Test/More.pm | 2033 ++++++-------<br/> cpan/Test-Simple/lib/Test/Simple.pm | 111 +-<br/> cpan/Test-Simple/lib/Test/Tester.pm | 642 ----<br/> cpan/Test-Simple/lib/Test/Tester/Capture.pm | 233 --<br/> cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm | 75 -<br/> cpan/Test-Simple/lib/Test/Tester/Delegate.pm | 32 -<br/> cpan/Test-Simple/lib/Test/Tester2.pm | 883 ------<br/> cpan/Test-Simple/lib/Test/Tutorial.pod | 38 +-<br/> cpan/Test-Simple/lib/Test/use/ok.pm | 67 -<br/> cpan/Test-Simple/lib/ok.pm | 61 -<br/> cpan/Test-Simple/t/00test_harness_check.t | 26 +<br/> cpan/Test-Simple/t/Builder/carp.t | 11 +-<br/> .../Test-Simple/t/Builder/done_testing_with_plan.t | 2 +-<br/> cpan/Test-Simple/t/Builder/fork_with_new_stdout.t | 44 +-<br/> cpan/Test-Simple/t/Builder/is_fh.t | 2 +-<br/> cpan/Test-Simple/t/Builder/maybe_regex.t | 2 +-<br/> cpan/Test-Simple/t/Builder/reset.t | 4 +-<br/> cpan/Test-Simple/t/Builder/reset_outputs.t | 35 -<br/> cpan/Test-Simple/t/Modern/Builder.t | 8 -<br/> cpan/Test-Simple/t/Modern/Builder_Event.t | 32 -<br/> cpan/Test-Simple/t/Modern/Builder_Event_Child.t | 22 -<br/> cpan/Test-Simple/t/Modern/Builder_Event_Diag.t | 37 -<br/> cpan/Test-Simple/t/Modern/Builder_Event_Finish.t | 15 -<br/> cpan/Test-Simple/t/Modern/Builder_Event_Note.t | 17 -<br/> cpan/Test-Simple/t/Modern/Builder_Event_Ok.t | 107 -<br/> cpan/Test-Simple/t/Modern/Builder_Event_Plan.t | 24 -<br/> cpan/Test-Simple/t/Modern/Builder_Fork.t | 52 -<br/> cpan/Test-Simple/t/Modern/Builder_Formatter.t | 32 -<br/> cpan/Test-Simple/t/Modern/Builder_Formatter_TAP.t | 20 -<br/> cpan/Test-Simple/t/Modern/Builder_Module.t | 15 -<br/> cpan/Test-Simple/t/Modern/Builder_Provider.t | 75 -<br/> cpan/Test-Simple/t/Modern/Builder_Stream.t | 8 -<br/> cpan/Test-Simple/t/Modern/Builder_Tester.t | 15 -<br/> cpan/Test-Simple/t/Modern/Builder_Trace.t | 16 -<br/> cpan/Test-Simple/t/Modern/Builder_Trace_Frame.t | 88 -<br/> cpan/Test-Simple/t/Modern/Builder_Util.t | 159 -<br/> cpan/Test-Simple/t/Modern/More.t | 177 --<br/> cpan/Test-Simple/t/Modern/NotTB15.t | 47 -<br/> cpan/Test-Simple/t/Modern/Simple.t | 18 -<br/> cpan/Test-Simple/t/Modern/Tester2.t | 258 --<br/> cpan/Test-Simple/t/Modern/Tester2_subtest.t | 66 -<br/> cpan/Test-Simple/t/Modern/encoding_test.t | 66 -<br/> cpan/Test-Simple/t/Modern/tracing.t | 223 --<br/> cpan/Test-Simple/t/More.t | 6 +-<br/> cpan/Test-Simple/t/PerlIO.t | 11 -<br/> cpan/Test-Simple/t/TTLegacy/auto.t | 34 -<br/> cpan/Test-Simple/t/TTLegacy/capture.t | 32 -<br/> cpan/Test-Simple/t/TTLegacy/check_tests.t | 117 -<br/> cpan/Test-Simple/t/TTLegacy/depth.t | 39 -<br/> cpan/Test-Simple/t/TTLegacy/run_test.t | 145 -<br/> cpan/Test-Simple/t/Tester/tbt_01basic.t | 2 +-<br/> cpan/Test-Simple/t/Tester/tbt_02fhrestore.t | 4 +-<br/> cpan/Test-Simple/t/Tester/tbt_06errormess.t | 2 +-<br/> cpan/Test-Simple/t/Tester/tbt_07args.t | 2 +-<br/> cpan/Test-Simple/t/Tester/tbt_is_bug.t | 31 -<br/> cpan/Test-Simple/t/circular_data.t | 2 +-<br/> cpan/Test-Simple/t/cmp_ok.t | 4 +-<br/> cpan/Test-Simple/t/died.t | 1 -<br/> cpan/Test-Simple/t/dont_overwrite_die_handler.t | 2 -<br/> cpan/Test-Simple/t/eq_set.t | 2 +-<br/> cpan/Test-Simple/t/exit.t | 5 +-<br/> cpan/Test-Simple/t/fail-like.t | 8 +-<br/> cpan/Test-Simple/t/fork.t | 2 +-<br/> cpan/Test-Simple/t/harness_active.t | 2 +-<br/> cpan/Test-Simple/t/is_deeply_fail.t | 4 +-<br/> cpan/Test-Simple/t/is_deeply_with_threads.t | 17 +-<br/> cpan/Test-Simple/t/lib/MyTest.pm | 15 -<br/> cpan/Test-Simple/t/lib/SmallTest.pm | 35 -<br/> cpan/Test-Simple/t/lib/Test/Builder/NoOutput.pm | 8 +-<br/> cpan/Test-Simple/t/no_tests.t | 1 -<br/> cpan/Test-Simple/t/overload.t | 2 +-<br/> cpan/Test-Simple/t/plan_no_plan.t | 4 -<br/> cpan/Test-Simple/t/pod.t | 7 -<br/> cpan/Test-Simple/t/ribasushi_diag.t | 54 -<br/> cpan/Test-Simple/t/ribasushi_threads.t | 75 -<br/> cpan/Test-Simple/t/skip.t | 13 +-<br/> cpan/Test-Simple/t/skipall.t | 2 +-<br/> cpan/Test-Simple/t/strays.t | 27 -<br/> cpan/Test-Simple/t/subtest/args.t | 19 -<br/> cpan/Test-Simple/t/subtest/bail_out.t | 4 +-<br/> cpan/Test-Simple/t/subtest/basic.t | 2 +-<br/> cpan/Test-Simple/t/subtest/fork.t | 12 +-<br/> cpan/Test-Simple/t/subtest/line_numbers.t | 16 +-<br/> cpan/Test-Simple/t/subtest/predicate.t | 12 +-<br/> cpan/Test-Simple/t/subtest/threads.t | 4 +-<br/> cpan/Test-Simple/t/subtest/todo.t | 5 +-<br/> cpan/Test-Simple/t/test_use_ok.t | 40 -<br/> cpan/Test-Simple/t/threads.t | 26 +-<br/> cpan/Test-Simple/t/todo.t | 12 +-<br/> cpan/Test-Simple/t/undef.t | 13 +-<br/> cpan/Test-Simple/t/utf8.t | 6 +-<br/> cpan/Test-Simple/t/versions.t | 24 +-<br/> dist/Carp/t/Carp.t | 19 +-<br/> ext/DynaLoader/t/DynaLoader.t | 16 +-<br/> lib/.gitignore | 1 -<br/> 121 files changed, 3009 insertions(+), 12590 deletions(-)<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Event.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Event/Bail.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Event/Child.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Event/Diag.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Event/Finish.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Event/Note.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Event/Ok.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Event/Plan.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/ExitMagic.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Fork.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Formatter.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Formatter/LegacyResults.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Formatter/TAP.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Provider.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Stream.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Threads.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Trace.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Trace/Frame.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Builder/Util.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/FAQ.pod<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Tester.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Tester/Capture.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Tester/Delegate.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/Tester2.pm<br/> delete mode 100644 cpan/Test-Simple/lib/Test/use/ok.pm<br/> delete mode 100644 cpan/Test-Simple/lib/ok.pm<br/> create mode 100644 cpan/Test-Simple/t/00test_harness_check.t<br/> delete mode 100644 cpan/Test-Simple/t/Builder/reset_outputs.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Event.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Event_Child.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Event_Diag.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Event_Finish.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Event_Note.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Event_Ok.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Event_Plan.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Fork.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Formatter.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Formatter_TAP.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Module.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Provider.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Stream.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Tester.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Trace.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Trace_Frame.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Builder_Util.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/More.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/NotTB15.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Simple.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Tester2.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/Tester2_subtest.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/encoding_test.t<br/> delete mode 100644 cpan/Test-Simple/t/Modern/tracing.t<br/> delete mode 100644 cpan/Test-Simple/t/PerlIO.t<br/> delete mode 100644 cpan/Test-Simple/t/TTLegacy/auto.t<br/> delete mode 100644 cpan/Test-Simple/t/TTLegacy/capture.t<br/> delete mode 100644 cpan/Test-Simple/t/TTLegacy/check_tests.t<br/> delete mode 100644 cpan/Test-Simple/t/TTLegacy/depth.t<br/> delete mode 100644 cpan/Test-Simple/t/TTLegacy/run_test.t<br/> delete mode 100644 cpan/Test-Simple/t/Tester/tbt_is_bug.t<br/> delete mode 100644 cpan/Test-Simple/t/lib/MyTest.pm<br/> delete mode 100644 cpan/Test-Simple/t/lib/SmallTest.pm<br/> delete mode 100644 cpan/Test-Simple/t/pod.t<br/> delete mode 100644 cpan/Test-Simple/t/ribasushi_diag.t<br/> delete mode 100644 cpan/Test-Simple/t/ribasushi_threads.t<br/> delete mode 100644 cpan/Test-Simple/t/strays.t<br/> delete mode 100644 cpan/Test-Simple/t/test_use_ok.t<br/><br/>diff --git a/MANIFEST b/MANIFEST<br/>index e735301..8479f03 100644<br/>--- a/MANIFEST<br/>+++ b/MANIFEST<br/>@@ -2233,212 +2233,146 @@ cpan/Test-Harness/t/yamlish-output.t Test::Harness test<br/> cpan/Test-Harness/t/yamlish.t Test::Harness test<br/> cpan/Test-Harness/t/yamlish-writer.t Test::Harness test<br/> cpan/Test/lib/Test.pm A simple framework for writing test scripts<br/>-cpan/Test-Simple/lib/ok.pm ok tool<br/>-cpan/Test-Simple/lib/Test/Builder/Event/Bail.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Event/Child.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Event/Diag.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Event/Finish.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Event/Note.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Event/Ok.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Event/Plan.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Event.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/ExitMagic.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Fork.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Formatter/LegacyResults.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Formatter.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Formatter/TAP.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Module.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder.pm Test::Builder<br/>-cpan/Test-Simple/lib/Test/Builder/Provider.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Stream.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Tester.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Threads.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Trace/Frame.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Trace.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/Builder/Util.pm Test::Builder module<br/>-cpan/Test-Simple/lib/Test/FAQ.pod Testing FAQ<br/>-cpan/Test-Simple/lib/Test/More.pm Test::More<br/>-cpan/Test-Simple/lib/Test/Simple.pm Test::Simple<br/>-cpan/Test-Simple/lib/Test/Tester2.pm Test::Tester2<br/>-cpan/Test-Simple/lib/Test/Tester/Capture.pm Test::Tester module<br/>-cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm Test::Tester module<br/>-cpan/Test-Simple/lib/Test/Tester/Delegate.pm Test::Tester module<br/>-cpan/Test-Simple/lib/Test/Tester.pm Test::Tester<br/>-cpan/Test-Simple/lib/Test/Tutorial.pod Testing Tutorial<br/>-cpan/Test-Simple/lib/Test/use/ok.pm ok.pm documentation<br/>-cpan/Test-Simple/t/bad_plan.t Test-Simple test<br/>-cpan/Test-Simple/t/bail_out.t Test-Simple test<br/>-cpan/Test-Simple/t/BEGIN_require_ok.t Test-Simple test<br/>-cpan/Test-Simple/t/BEGIN_use_ok.t Test-Simple test<br/>-cpan/Test-Simple/t/buffer.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/Builder.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/carp.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/create.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/current_test.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/current_test_without_plan.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/details.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/done_testing_double.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/done_testing_plan_mismatch.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/done_testing.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/done_testing_with_no_plan.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/done_testing_with_number.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/done_testing_with_plan.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/fork_with_new_stdout.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/has_plan2.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/has_plan.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/is_fh.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/is_passing.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/maybe_regex.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/no_diag.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/no_ending.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/no_header.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/no_plan_at_all.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/ok_obj.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/output.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/reset_outputs.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/reset.t Test-Simple test<br/>-cpan/Test-Simple/t/Builder/try.t Test-Simple test<br/>-cpan/Test-Simple/t/c_flag.t Test-Simple test<br/>-cpan/Test-Simple/t/circular_data.t Test-Simple test<br/>-cpan/Test-Simple/t/cmp_ok.t Test-Simple test<br/>-cpan/Test-Simple/t/dependents.t Test-Simple test<br/>-cpan/Test-Simple/t/diag.t Test-Simple test<br/>-cpan/Test-Simple/t/died.t Test-Simple test<br/>-cpan/Test-Simple/t/dont_overwrite_die_handler.t Test-Simple test<br/>-cpan/Test-Simple/t/eq_set.t Test-Simple test<br/>-cpan/Test-Simple/t/exit.t Test-Simple test<br/>-cpan/Test-Simple/t/explain.t Test-Simple test<br/>-cpan/Test-Simple/t/extra_one.t Test-Simple test<br/>-cpan/Test-Simple/t/extra.t Test-Simple test<br/>-cpan/Test-Simple/t/fail-like.t Test-Simple test<br/>-cpan/Test-Simple/t/fail-more.t Test-Simple test<br/>-cpan/Test-Simple/t/fail_one.t Test-Simple test<br/>-cpan/Test-Simple/t/fail.t Test-Simple test<br/>-cpan/Test-Simple/t/filehandles.t Test-Simple test<br/>-cpan/Test-Simple/t/fork.t Test-Simple test<br/>-cpan/Test-Simple/t/harness_active.t Test-Simple test<br/>-cpan/Test-Simple/t/import.t Test-Simple test<br/>-cpan/Test-Simple/t/is_deeply_dne_bug.t Test-Simple test<br/>-cpan/Test-Simple/t/is_deeply_fail.t Test-Simple test<br/>-cpan/Test-Simple/t/is_deeply_with_threads.t Test-Simple test<br/>-cpan/Test-Simple/t/lib/Dev/Null.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/Dummy.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/MyOverload.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/MyTest.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/NoExporter.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/SigDie.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/SmallTest.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Builder/NoOutput.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/Catch.pm Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_in_eval.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_with_handler.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/exit.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/extras.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/five_fail.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/last_minute_death.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/missing_done_testing.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/one_fail.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/one_fail_without_plan.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/pre_plan_death.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/require.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/success.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few_fail.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/Test/Simple/sample_tests/two_fail.plx Test-Simple test<br/>-cpan/Test-Simple/t/lib/TieOut.pm Test-Simple test<br/>-cpan/Test-Simple/t/missing.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Event_Child.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Event_Diag.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Event_Finish.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Event_Note.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Event_Ok.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Event_Plan.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Event.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Fork.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Formatter.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Formatter_TAP.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Module.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Provider.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Stream.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Tester.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Trace_Frame.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Trace.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Builder_Util.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/encoding_test.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/More.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/NotTB15.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Simple.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Tester2_subtest.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/Tester2.t Test-Simple test<br/>-cpan/Test-Simple/t/Modern/tracing.t Test-Simple test<br/>-cpan/Test-Simple/t/More.t Test-Simple test<br/>-cpan/Test-Simple/t/new_ok.t Test-Simple test<br/>-cpan/Test-Simple/t/no_plan.t Test-Simple test<br/>-cpan/Test-Simple/t/no_tests.t Test-Simple test<br/>-cpan/Test-Simple/t/note.t Test-Simple test<br/>-cpan/Test-Simple/t/overload.t Test-Simple test<br/>-cpan/Test-Simple/t/overload_threads.t Test-Simple test<br/>-cpan/Test-Simple/t/PerlIO.t Test-Simple test<br/>-cpan/Test-Simple/t/plan_bad.t Test-Simple test<br/>-cpan/Test-Simple/t/plan_is_noplan.t Test-Simple test<br/>-cpan/Test-Simple/t/plan_no_plan.t Test-Simple test<br/>-cpan/Test-Simple/t/plan_shouldnt_import.t Test-Simple test<br/>-cpan/Test-Simple/t/plan_skip_all.t Test-Simple test<br/>-cpan/Test-Simple/t/plan.t Test-Simple test<br/>-cpan/Test-Simple/t/pod.t Test-Simple test<br/>-cpan/Test-Simple/t/require_ok.t Test-Simple test<br/>-cpan/Test-Simple/t/ribasushi_diag.t Test-Simple test<br/>-cpan/Test-Simple/t/ribasushi_threads.t Test-Simple test<br/>-cpan/Test-Simple/t/Simple/load.t Test-Simple test<br/>-cpan/Test-Simple/t/simple.t Test-Simple test<br/>-cpan/Test-Simple/t/skipall.t Test-Simple test<br/>-cpan/Test-Simple/t/skip.t Test-Simple test<br/>-cpan/Test-Simple/t/strays.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/args.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/bail_out.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/basic.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/die.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/do.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/exceptions.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/for_do_t.test Test-Simple test<br/>-cpan/Test-Simple/t/subtest/fork.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/implicit_done.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/line_numbers.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/plan.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/predicate.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/singleton.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/threads.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/todo.t Test-Simple test<br/>-cpan/Test-Simple/t/subtest/wstat.t Test-Simple test<br/>-cpan/Test-Simple/t/tbm_doesnt_set_exported_to.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_01basic.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_02fhrestore.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_03die.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_04line_num.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_05faildiag.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_06errormess.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_07args.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_08subtest.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_09do_script.pl Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_09do.t Test-Simple test<br/>-cpan/Test-Simple/t/Tester/tbt_is_bug.t Test-Simple test<br/>-cpan/Test-Simple/t/test_use_ok.t Test-Simple test<br/>-cpan/Test-Simple/t/threads.t Test-Simple test<br/>-cpan/Test-Simple/t/thread_taint.t Test-Simple test<br/>-cpan/Test-Simple/t/todo.t Test-Simple test<br/>-cpan/Test-Simple/t/TTLegacy/auto.t Test-Simple test<br/>-cpan/Test-Simple/t/TTLegacy/capture.t Test-Simple test<br/>-cpan/Test-Simple/t/TTLegacy/check_tests.t Test-Simple test<br/>-cpan/Test-Simple/t/TTLegacy/depth.t Test-Simple test<br/>-cpan/Test-Simple/t/TTLegacy/run_test.t Test-Simple test<br/>-cpan/Test-Simple/t/undef.t Test-Simple test<br/>-cpan/Test-Simple/t/useing.t Test-Simple test<br/>-cpan/Test-Simple/t/use_ok.t Test-Simple test<br/>-cpan/Test-Simple/t/utf8.t Test-Simple test<br/>-cpan/Test-Simple/t/versions.t Test-Simple test<br/>+cpan/Test-Simple/lib/Test/Builder/Module.pm Base class for test modules<br/>+cpan/Test-Simple/lib/Test/Builder.pm For writing new test libraries<br/>+cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm Turn on color in Test::Builder::Tester<br/>+cpan/Test-Simple/lib/Test/Builder/Tester.pm For testing Test::Builder based classes<br/>+cpan/Test-Simple/lib/Test/More.pm More utilities for writing tests<br/>+cpan/Test-Simple/lib/Test/Simple.pm Basic utility for writing tests<br/>+cpan/Test-Simple/lib/Test/Tutorial.pod A tutorial on writing tests<br/>+cpan/Test-Simple/t/00test_harness_check.t Test::Simple test<br/>+cpan/Test-Simple/t/bad_plan.t Test::Builder plan() test<br/>+cpan/Test-Simple/t/bail_out.t Test::Builder BAIL_OUT test<br/>+cpan/Test-Simple/t/BEGIN_require_ok.t Test::More require_ok() testing<br/>+cpan/Test-Simple/t/BEGIN_use_ok.t Test::More use_ok() testing<br/>+cpan/Test-Simple/t/buffer.t Test::Builder buffering test<br/>+cpan/Test-Simple/t/Builder/Builder.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/carp.t Test::Builder test<br/>+cpan/Test-Simple/t/Builder/create.t Test::Builder test<br/>+cpan/Test-Simple/t/Builder/current_test.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/current_test_without_plan.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/details.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/done_testing_double.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/done_testing_plan_mismatch.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/done_testing.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/done_testing_with_no_plan.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/done_testing_with_number.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/done_testing_with_plan.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/fork_with_new_stdout.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/has_plan2.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/has_plan.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/is_fh.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/is_passing.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/maybe_regex.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/no_diag.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/no_ending.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/no_header.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/no_plan_at_all.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/ok_obj.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/output.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/reset.t Test::Builder tests<br/>+cpan/Test-Simple/t/Builder/try.t Test::Builder tests<br/>+cpan/Test-Simple/t/c_flag.t Test::Simple test<br/>+cpan/Test-Simple/t/circular_data.t Test::Simple test<br/>+cpan/Test-Simple/t/cmp_ok.t Test::More test<br/>+cpan/Test-Simple/t/dependents.t Test::More test<br/>+cpan/Test-Simple/t/diag.t Test::More diag() test<br/>+cpan/Test-Simple/t/died.t Test::Simple test<br/>+cpan/Test-Simple/t/dont_overwrite_die_handler.t Test::More tests<br/>+cpan/Test-Simple/t/eq_set.t Test::Simple test<br/>+cpan/Test-Simple/t/exit.t Test::Simple test, exit codes<br/>+cpan/Test-Simple/t/explain.t Test::Simple test<br/>+cpan/Test-Simple/t/extra_one.t Test::Simple test<br/>+cpan/Test-Simple/t/extra.t Test::Simple test<br/>+cpan/Test-Simple/t/fail-like.t Test::More test, like() failures<br/>+cpan/Test-Simple/t/fail-more.t Test::More test, tests failing<br/>+cpan/Test-Simple/t/fail_one.t Test::Simple test<br/>+cpan/Test-Simple/t/fail.t Test::Simple test, test failures<br/>+cpan/Test-Simple/t/filehandles.t Test::Simple test, STDOUT can be played with<br/>+cpan/Test-Simple/t/fork.t Test::More fork tests<br/>+cpan/Test-Simple/t/harness_active.t Test::Simple test<br/>+cpan/Test-Simple/t/import.t Test::More test, importing functions<br/>+cpan/Test-Simple/t/is_deeply_dne_bug.t Test::More test<br/>+cpan/Test-Simple/t/is_deeply_fail.t Test::More test, is_deeply()<br/>+cpan/Test-Simple/t/is_deeply_with_threads.t Test::More test<br/>+cpan/Test-Simple/t/lib/Dev/Null.pm Test::More test module<br/>+cpan/Test-Simple/t/lib/Dummy.pm Test::More test module<br/>+cpan/Test-Simple/t/lib/MyOverload.pm Test::More test module<br/>+cpan/Test-Simple/t/lib/NoExporter.pm Test::Simple test module<br/>+cpan/Test-Simple/t/lib/SigDie.pm Test module for Test::More<br/>+cpan/Test-Simple/t/lib/Test/Builder/NoOutput.pm Utility module for testing Test::Builder<br/>+cpan/Test-Simple/t/lib/Test/Simple/Catch.pm Utility module for testing Test::Simple<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_in_eval.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/death_with_handler.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/exit.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/extras.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/five_fail.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/last_minute_death.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/missing_done_testing.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/one_fail.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/one_fail_without_plan.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/pre_plan_death.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/require.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/success.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few_fail.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/too_few.plx for exit.t<br/>+cpan/Test-Simple/t/lib/Test/Simple/sample_tests/two_fail.plx for exit.t<br/>+cpan/Test-Simple/t/lib/TieOut.pm Testing library to capture prints<br/>+cpan/Test-Simple/t/missing.t Test::Simple test, missing tests<br/>+cpan/Test-Simple/t/More.t Test::More test, basic stuff<br/>+cpan/Test-Simple/t/new_ok.t Test::More test<br/>+cpan/Test-Simple/t/no_plan.t Test::Simple test, forgot the plan<br/>+cpan/Test-Simple/t/no_tests.t Test::More test<br/>+cpan/Test-Simple/t/note.t Test::More test<br/>+cpan/Test-Simple/t/overload.t Test::Simple test<br/>+cpan/Test-Simple/t/overload_threads.t Test::Simple test<br/>+cpan/Test-Simple/t/plan_bad.t Test::Simple test<br/>+cpan/Test-Simple/t/plan_is_noplan.t Test::Simple test, no_plan<br/>+cpan/Test-Simple/t/plan_no_plan.t Test::More test, plan() w/no_plan<br/>+cpan/Test-Simple/t/plan_shouldnt_import.t Test::Simple test<br/>+cpan/Test-Simple/t/plan_skip_all.t Test::More test, plan() w/skip_all<br/>+cpan/Test-Simple/t/plan.t Test::More test, plan()<br/>+cpan/Test-Simple/t/require_ok.t Test::Simple test<br/>+cpan/Test-Simple/t/Simple/load.t Test::Builder tests<br/>+cpan/Test-Simple/t/simple.t Test::Simple test, basic stuff<br/>+cpan/Test-Simple/t/skipall.t Test::More test, skip all tests<br/>+cpan/Test-Simple/t/skip.t Test::More test, SKIP tests<br/>+cpan/Test-Simple/t/subtest/args.t Test::More test<br/>+cpan/Test-Simple/t/subtest/bail_out.t Test::More test<br/>+cpan/Test-Simple/t/subtest/basic.t Test::More test<br/>+cpan/Test-Simple/t/subtest/die.t Test::More test<br/>+cpan/Test-Simple/t/subtest/do.t Test::More test<br/>+cpan/Test-Simple/t/subtest/exceptions.t Test::More test<br/>+cpan/Test-Simple/t/subtest/for_do_t.test Test::More test<br/>+cpan/Test-Simple/t/subtest/fork.t Test::Builder tests<br/>+cpan/Test-Simple/t/subtest/implicit_done.t Test::Builder tests<br/>+cpan/Test-Simple/t/subtest/line_numbers.t Test::Builder tests<br/>+cpan/Test-Simple/t/subtest/plan.t Test::Builder tests<br/>+cpan/Test-Simple/t/subtest/predicate.t Test::Builder tests<br/>+cpan/Test-Simple/t/subtest/singleton.t Test::More test<br/>+cpan/Test-Simple/t/subtest/threads.t Test::More test<br/>+cpan/Test-Simple/t/subtest/todo.t Test::Builder tests<br/>+cpan/Test-Simple/t/subtest/wstat.t Test::More test<br/>+cpan/Test-Simple/t/tbm_doesnt_set_exported_to.t Test::Builder::Module test<br/>+cpan/Test-Simple/t/Tester/tbt_01basic.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_02fhrestore.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_03die.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_04line_num.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_05faildiag.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_06errormess.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_07args.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_08subtest.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_09do_script.pl Test::Builder::Tester test<br/>+cpan/Test-Simple/t/Tester/tbt_09do.t Test::Builder::Tester test<br/>+cpan/Test-Simple/t/threads.t Test::Builder thread-safe checks<br/>+cpan/Test-Simple/t/thread_taint.t Test::Simple test<br/>+cpan/Test-Simple/t/todo.t Test::More test, TODO tests<br/>+cpan/Test-Simple/t/undef.t Test::More test, undefs don&#39;t cause warnings<br/>+cpan/Test-Simple/t/useing.t Test::More test, compile test<br/>+cpan/Test-Simple/t/use_ok.t Test::More test, use_ok()<br/>+cpan/Test-Simple/t/utf8.t Test::More test<br/>+cpan/Test-Simple/t/versions.t Test::More test<br/> cpan/Test/t/05_about_verbose.t See if Test works<br/> cpan/Test/t/fail.t See if Test works<br/> cpan/Test/t/mix.t See if Test works<br/>diff --git a/Makefile.SH b/Makefile.SH<br/>index e1e895c..cbeed00 100755<br/>--- a/Makefile.SH<br/>+++ b/Makefile.SH<br/>@@ -1297,9 +1297,7 @@ _cleaner2:<br/> -rmdir lib/autodie/Scope lib/autodie lib/XS lib/Win32API lib/VMS<br/> -rmdir lib/Unicode/Collate/Locale lib/Unicode/Collate/CJK<br/> -rmdir lib/Unicode/Collate lib/Tie/Hash lib/Thread lib/Text<br/>- -rmdir lib/Test/use lib/Test/Tester lib/Test/Builder/Trace<br/>- -rmdir lib/Test/Builder/Tester lib/Test/Builder/Formatter<br/>- -rmdir lib/Test/Builder/Event lib/Test/Builder lib/Test lib/Term<br/>+ -rmdir lib/Test/Builder/Tester lib/Test/Builder lib/Test lib/Term<br/> -rmdir lib/TAP/Parser/YAMLish lib/TAP/Parser/SourceHandler<br/> -rmdir lib/TAP/Parser/Scheduler lib/TAP/Parser/Result<br/> -rmdir lib/TAP/Parser/Iterator lib/TAP/Parser lib/TAP/Harness<br/>diff --git a/cpan/Test-Simple/lib/Test/Builder.pm b/cpan/Test-Simple/lib/Test/Builder.pm<br/>index bd74daf..00a3ec5 100644<br/>--- a/cpan/Test-Simple/lib/Test/Builder.pm<br/>+++ b/cpan/Test-Simple/lib/Test/Builder.pm<br/>@@ -1,74 +1,153 @@<br/> package Test::Builder;<br/> <br/>-use 5.008001;<br/>+use 5.006;<br/> use strict;<br/> use warnings;<br/> <br/>-use Test::Builder::Util qw/try protect/;<br/>-use Scalar::Util();<br/>-use Test::Builder::Stream;<br/>-use Test::Builder::Event;<br/>-use Test::Builder::Event::Ok;<br/>-use Test::Builder::Event::Diag;<br/>-use Test::Builder::Event::Note;<br/>-use Test::Builder::Event::Plan;<br/>-use Test::Builder::Event::Bail;<br/>-use Test::Builder::Event::Child;<br/>-use Test::Builder::Trace;<br/>-<br/>-our $VERSION = &#39;1.301001_040&#39;;<br/>+our $VERSION = &#39;1.001003&#39;;<br/> $VERSION = eval $VERSION; ## no critic (BuiltinFunctions::ProhibitStringyEval)<br/> <br/>-# The mostly-singleton, and other package vars.<br/>-our $Test = Test::Builder-&gt;new;<br/>-our $Level = 1;<br/>-our $BLevel = 1;<br/>+BEGIN {<br/>+ if( $] &lt; 5.008 ) {<br/>+ require Test::Builder::IO::Scalar;<br/>+ }<br/>+}<br/> <br/>-####################<br/>-# {{{ MAGIC things #<br/>-####################<br/> <br/>-sub DESTROY {<br/>- my $self = shift;<br/>- if ( $self-&gt;parent and $$ == $self-&gt;{Original_Pid} ) {<br/>- my $name = $self-&gt;name;<br/>- $self-&gt;parent-&gt;{In_Destroy} = 1;<br/>- $self-&gt;parent-&gt;ok(0, $name, &quot;Child ($name) exited without calling finalize()\n&quot;);<br/>+# Make Test::Builder thread-safe for ithreads.<br/>+BEGIN {<br/>+ use Config;<br/>+ # Load threads::shared when threads are turned on.<br/>+ # 5.8.0&#39;s threads are so busted we no longer support them.<br/>+ if( $] &gt;= 5.008001 &amp;&amp; $Config{useithreads} &amp;&amp; $INC{&#39;threads.pm&#39;} ) {<br/>+ require threads::shared;<br/>+<br/>+ # Hack around YET ANOTHER threads::shared bug. It would<br/>+ # occasionally forget the contents of the variable when sharing it.<br/>+ # So we first copy the data, then share, then put our copy back.<br/>+ *share = sub (\[$@%]) {<br/>+ my $type = ref $_[0];<br/>+ my $data;<br/>+<br/>+ if( $type eq &#39;HASH&#39; ) {<br/>+ %$data = %{ $_[0] };<br/>+ }<br/>+ elsif( $type eq &#39;ARRAY&#39; ) {<br/>+ @$data = @{ $_[0] };<br/>+ }<br/>+ elsif( $type eq &#39;SCALAR&#39; ) {<br/>+ $$data = ${ $_[0] };<br/>+ }<br/>+ else {<br/>+ die( &quot;Unknown type: &quot; . $type );<br/>+ }<br/>+<br/>+ $_[0] = &amp;threads::shared::share( $_[0] );<br/>+<br/>+ if( $type eq &#39;HASH&#39; ) {<br/>+ %{ $_[0] } = %$data;<br/>+ }<br/>+ elsif( $type eq &#39;ARRAY&#39; ) {<br/>+ @{ $_[0] } = @$data;<br/>+ }<br/>+ elsif( $type eq &#39;SCALAR&#39; ) {<br/>+ ${ $_[0] } = $$data;<br/>+ }<br/>+ else {<br/>+ die( &quot;Unknown type: &quot; . $type );<br/>+ }<br/>+<br/>+ return $_[0];<br/>+ };<br/>+ }<br/>+ # 5.8.0&#39;s threads::shared is busted when threads are off<br/>+ # and earlier Perls just don&#39;t have that module at all.<br/>+ else {<br/>+ *share = sub { return $_[0] };<br/>+ *lock = sub { 0 };<br/> }<br/> }<br/> <br/>-require Test::Builder::ExitMagic;<br/>-my $final = Test::Builder::ExitMagic-&gt;new(<br/>- tb =&gt; Test::Builder-&gt;create(shared_stream =&gt; 1),<br/>-);<br/>-END { $final-&gt;do_magic() }<br/>+=head1 NAME<br/> <br/>-####################<br/>-# }}} MAGIC things #<br/>-####################<br/>+Test::Builder - Backend for building test libraries<br/> <br/>-####################<br/>-# {{{ Constructors #<br/>-####################<br/>+=head1 SYNOPSIS<br/> <br/>-sub new {<br/>- my $class = shift;<br/>- my %params = @_;<br/>- $Test ||= $class-&gt;create(shared_stream =&gt; 1);<br/>+ package My::Test::Module;<br/>+ use base &#39;Test::Builder::Module&#39;;<br/>+<br/>+ my $CLASS = __PACKAGE__;<br/>+<br/>+ sub ok {<br/>+ my($test, $name) = @_;<br/>+ my $tb = $CLASS-&gt;builder;<br/>+<br/>+ $tb-&gt;ok($test, $name);<br/>+ }<br/>+<br/>+<br/>+=head1 DESCRIPTION<br/>+<br/>+Test::Simple and Test::More have proven to be popular testing modules,<br/>+but they&#39;re not always flexible enough. Test::Builder provides a<br/>+building block upon which to write your own test libraries I&lt;which can<br/>+work together&gt;.<br/>+<br/>+=head2 Construction<br/>+<br/>+=over 4<br/>+<br/>+=item B&lt;new&gt;<br/>+<br/>+ my $Test = Test::Builder-&gt;new;<br/>+<br/>+Returns a Test::Builder object representing the current state of the<br/>+test.<br/>+<br/>+Since you only run one test per program C&lt;new&gt; always returns the same<br/>+Test::Builder object. No matter how many times you call C&lt;new()&gt;, you&#39;re<br/>+getting the same object. This is called a singleton. This is done so that<br/>+multiple modules share such global information as the test counter and<br/>+where test output is going.<br/>+<br/>+If you want a completely new Test::Builder object different from the<br/>+singleton, use C&lt;create&gt;.<br/>+<br/>+=cut<br/>+<br/>+our $Test = Test::Builder-&gt;new;<br/> <br/>+sub new {<br/>+ my($class) = shift;<br/>+ $Test ||= $class-&gt;create;<br/> return $Test;<br/> }<br/> <br/>+=item B&lt;create&gt;<br/>+<br/>+ my $Test = Test::Builder-&gt;create;<br/>+<br/>+Ok, so there can be more than one Test::Builder object and this is how<br/>+you get it. You might use this instead of C&lt;new()&gt; if you&#39;re testing<br/>+a Test::Builder based module, but otherwise you probably want C&lt;new&gt;.<br/>+<br/>+B&lt;NOTE&gt;: the implementation is not complete. C&lt;level&gt;, for example, is<br/>+still shared amongst B&lt;all&gt; Test::Builder objects, even ones created using<br/>+this method. Also, the method name may change in the future.<br/>+<br/>+=cut<br/>+<br/> sub create {<br/> my $class = shift;<br/>- my %params = @_;<br/> <br/> my $self = bless {}, $class;<br/>- $self-&gt;reset(%params);<br/>+ $self-&gt;reset;<br/> <br/> return $self;<br/> }<br/> <br/>+<br/> # Copy an object, currently a shallow.<br/> # This does *not* bless the destination. This keeps the destructor from<br/> # firing when we&#39;re just storing a copy of the object to restore later.<br/>@@ -76,154 +155,114 @@ sub _copy {<br/> my($src, $dest) = @_;<br/> <br/> %$dest = %$src;<br/>- #_share_keys($dest); # Not sure the implications here.<br/>+ _share_keys($dest);<br/> <br/> return;<br/> }<br/> <br/>-####################<br/>-# }}} Constructors #<br/>-####################<br/>-<br/>-##############################################<br/>-# {{{ Simple accessors/generators/deligators #<br/>-##############################################<br/>-<br/>-sub listen { shift-&gt;stream-&gt;listen(@_) }<br/>-sub munge { shift-&gt;stream-&gt;munge(@_) }<br/>-sub tap { shift-&gt;stream-&gt;tap }<br/>-sub lresults { shift-&gt;stream-&gt;lresults }<br/>-sub is_passing { shift-&gt;stream-&gt;is_passing(@_) }<br/>-sub use_fork { shift-&gt;stream-&gt;use_fork }<br/>-sub no_fork { shift-&gt;stream-&gt;no_fork }<br/>-<br/>-BEGIN {<br/>- Test::Builder::Util::accessors(qw/Parent Name _old_level _bailed_out default_name/);<br/>- Test::Builder::Util::accessor(modern =&gt; sub {$ENV{TB_MODERN} || 0});<br/>- Test::Builder::Util::accessor(depth =&gt; sub { 0 });<br/>-}<br/>-<br/>-##############################################<br/>-# }}} Simple accessors/generators/deligators #<br/>-##############################################<br/>-<br/>-#########################<br/>-# {{{ Stream Management #<br/>-#########################<br/>-<br/>-sub stream {<br/>- my $self = shift;<br/>-<br/>- ($self-&gt;{stream}) = @_ if @_;<br/>-<br/>- # If no stream is set use shared. We do not want to cache that we use<br/>- # shared cause shared is a stack, not a constant, and we always want the<br/>- # top.<br/>- return $self-&gt;{stream} || Test::Builder::Stream-&gt;shared;<br/>-}<br/>-<br/>-sub intercept {<br/>- my $self = shift;<br/>- my ($code) = @_;<br/>-<br/>- Carp::croak(&quot;argument to intercept must be a coderef, got: $code&quot;)<br/>- unless reftype $code eq &#39;CODE&#39;;<br/> <br/>- my $stream = Test::Builder::Stream-&gt;new(no_follow =&gt; 1) || die &quot;Internal Error!&quot;;<br/>- $stream-&gt;exception_followup;<br/>+=item B&lt;child&gt;<br/> <br/>- local $self-&gt;{stream} = $stream;<br/>+ my $child = $builder-&gt;child($name_of_child);<br/>+ $child-&gt;plan( tests =&gt; 4 );<br/>+ $child-&gt;ok(some_code());<br/>+ ...<br/>+ $child-&gt;finalize;<br/> <br/>- my @events;<br/>- $stream-&gt;listen(INTERCEPTOR =&gt; sub {<br/>- my ($item) = @_;<br/>- push @events =&gt; $item;<br/>- });<br/>- $code-&gt;($stream);<br/>+Returns a new instance of C&lt;Test::Builder&gt;. Any output from this child will<br/>+be indented four spaces more than the parent&#39;s indentation. When done, the<br/>+C&lt;finalize&gt; method I&lt;must&gt; be called explicitly.<br/> <br/>- return \@events;<br/>-}<br/>+Trying to create a new child with a previous child still active (i.e.,<br/>+C&lt;finalize&gt; not called) will C&lt;croak&gt;.<br/> <br/>-#########################<br/>-# }}} Stream Management #<br/>-#########################<br/>+Trying to run a test when you have an open child will also C&lt;croak&gt; and cause<br/>+the test suite to fail.<br/> <br/>-#############################<br/>-# {{{ Children and subtests #<br/>-#############################<br/>+=cut<br/> <br/> sub child {<br/>- my( $self, $name, $is_subtest ) = @_;<br/>+ my( $self, $name ) = @_;<br/> <br/>- $self-&gt;croak(&quot;You already have a child named ($self-&gt;{Child_Name}) running&quot;)<br/>- if $self-&gt;{Child_Name};<br/>+ if( $self-&gt;{Child_Name} ) {<br/>+ $self-&gt;croak(&quot;You already have a child named ($self-&gt;{Child_Name}) running&quot;);<br/>+ }<br/> <br/> my $parent_in_todo = $self-&gt;in_todo;<br/> <br/> # Clear $TODO for the child.<br/> my $orig_TODO = $self-&gt;find_TODO(undef, 1, undef);<br/> <br/>- my $class = Scalar::Util::blessed($self);<br/>+ my $class = ref $self;<br/> my $child = $class-&gt;create;<br/> <br/>- $child-&gt;{stream} = $self-&gt;stream-&gt;spawn;<br/>+ # Add to our indentation<br/>+ $child-&gt;_indent( $self-&gt;_indent . &#39; &#39; );<br/>+<br/>+ # Make the child use the same outputs as the parent<br/>+ for my $method (qw(output failure_output todo_output)) {<br/>+ $child-&gt;$method( $self-&gt;$method );<br/>+ }<br/> <br/> # Ensure the child understands if they&#39;re inside a TODO<br/>- $child-&gt;tap-&gt;failure_output($self-&gt;tap-&gt;todo_output)<br/>- if $parent_in_todo &amp;&amp; $self-&gt;tap;<br/>+ if( $parent_in_todo ) {<br/>+ $child-&gt;failure_output( $self-&gt;todo_output );<br/>+ }<br/> <br/> # This will be reset in finalize. We do this here lest one child failure<br/> # cause all children to fail.<br/> $child-&gt;{Child_Error} = $?;<br/> $? = 0;<br/>-<br/> $child-&gt;{Parent} = $self;<br/> $child-&gt;{Parent_TODO} = $orig_TODO;<br/> $child-&gt;{Name} = $name || &quot;Child of &quot; . $self-&gt;name;<br/>-<br/> $self-&gt;{Child_Name} = $child-&gt;name;<br/>+ return $child;<br/>+}<br/> <br/>- $child-&gt;depth($self-&gt;depth + 1);<br/> <br/>- my $res = Test::Builder::Event::Child-&gt;new(<br/>- $self-&gt;context,<br/>- name =&gt; $child-&gt;name,<br/>- action =&gt; &#39;push&#39;,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- is_subtest =&gt; $is_subtest || 0,<br/>- );<br/>- $self-&gt;stream-&gt;send($res);<br/>+=item B&lt;subtest&gt;<br/> <br/>- return $child;<br/>-}<br/>+ $builder-&gt;subtest($name, \&amp;subtests);<br/>+<br/>+See documentation of C&lt;subtest&gt; in Test::More.<br/>+<br/>+=cut<br/> <br/> sub subtest {<br/> my $self = shift;<br/>- my($name, $subtests, @args) = @_;<br/>+ my($name, $subtests) = @_;<br/> <br/>- $self-&gt;croak(&quot;subtest()&#39;s second argument must be a code ref&quot;)<br/>- unless $subtests &amp;&amp; &#39;CODE&#39; eq Scalar::Util::reftype($subtests);<br/>+ if (&#39;CODE&#39; ne ref $subtests) {<br/>+ $self-&gt;croak(&quot;subtest()&#39;s second argument must be a code ref&quot;);<br/>+ }<br/> <br/> # Turn the child into the parent so anyone who has stored a copy of<br/> # the Test::Builder singleton will get the child.<br/>- my ($success, $error, $child);<br/>+ my $error;<br/>+ my $child;<br/> my $parent = {};<br/> {<br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+ # child() calls reset() which sets $Level to 1, so we localize<br/>+ # $Level first to limit the scope of the reset to the subtest.<br/>+ local $Test::Builder::Level = $Test::Builder::Level + 1;<br/> <br/> # Store the guts of $self as $parent and turn $child into $self.<br/>- $child = $self-&gt;child($name, 1);<br/>-<br/>+ $child = $self-&gt;child($name);<br/> _copy($self, $parent);<br/> _copy($child, $self);<br/> <br/> my $run_the_subtests = sub {<br/>- $subtests-&gt;(@args);<br/>- $self-&gt;done_testing unless defined $self-&gt;stream-&gt;plan;<br/>+ # Add subtest name for clarification of starting point<br/>+ $self-&gt;note(&quot;Subtest: $name&quot;);<br/>+ $subtests-&gt;();<br/>+ $self-&gt;done_testing unless $self-&gt;_plan_handled;<br/> 1;<br/> };<br/> <br/>- ($success, $error) = try { Test::Builder::Trace-&gt;nest($run_the_subtests) };<br/>+ if( !eval { $run_the_subtests-&gt;() } ) {<br/>+ $error = $@;<br/>+ }<br/> }<br/> <br/> # Restore the parent and the copied child.<br/>@@ -234,19 +273,68 @@ sub subtest {<br/> $self-&gt;find_TODO(undef, 1, $child-&gt;{Parent_TODO});<br/> <br/> # Die *after* we restore the parent.<br/>- die $error if $error &amp;&amp; !(Scalar::Util::blessed($error) &amp;&amp; $error-&gt;isa(&#39;Test::Builder::Exception&#39;));<br/>+ die $error if $error and !eval { $error-&gt;isa(&#39;Test::Builder::Exception&#39;) };<br/> <br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>- my $finalize = $child-&gt;finalize(1);<br/>+ local $Test::Builder::Level = $Test::Builder::Level + 1;<br/>+ my $finalize = $child-&gt;finalize;<br/> <br/>- $self-&gt;BAIL_OUT($child-&gt;{Bailed_Out_Reason}) if $child-&gt;_bailed_out;<br/>+ $self-&gt;BAIL_OUT($child-&gt;{Bailed_Out_Reason}) if $child-&gt;{Bailed_Out};<br/> <br/> return $finalize;<br/> }<br/> <br/>+=begin _private<br/>+<br/>+=item B&lt;_plan_handled&gt;<br/>+<br/>+ if ( $Test-&gt;_plan_handled ) { ... }<br/>+<br/>+Returns true if the developer has explicitly handled the plan via:<br/>+<br/>+=over 4<br/>+<br/>+=item * Explicitly setting the number of tests<br/>+<br/>+=item * Setting &#39;no_plan&#39;<br/>+<br/>+=item * Set &#39;skip_all&#39;.<br/>+<br/>+=back<br/>+<br/>+This is currently used in subtests when we implicitly call C&lt;&lt; $Test-&gt;done_testing &gt;&gt;<br/>+if the developer has not set a plan.<br/>+<br/>+=end _private<br/>+<br/>+=cut<br/>+<br/>+sub _plan_handled {<br/>+ my $self = shift;<br/>+ return $self-&gt;{Have_Plan} || $self-&gt;{No_Plan} || $self-&gt;{Skip_All};<br/>+}<br/>+<br/>+<br/>+=item B&lt;finalize&gt;<br/>+<br/>+ my $ok = $child-&gt;finalize;<br/>+<br/>+When your child is done running tests, you must call C&lt;finalize&gt; to clean up<br/>+and tell the parent your pass/fail status.<br/>+<br/>+Calling finalize on a child with open children will C&lt;croak&gt;.<br/>+<br/>+If the child falls out of scope before C&lt;finalize&gt; is called, a failure<br/>+diagnostic will be issued and the child is considered to have failed.<br/>+<br/>+No attempt to call methods on a child after C&lt;finalize&gt; is called is<br/>+guaranteed to succeed.<br/>+<br/>+Calling this on the root builder is a no-op.<br/>+<br/>+=cut<br/>+<br/> sub finalize {<br/> my $self = shift;<br/>- my ($is_subtest) = @_;<br/> <br/> return unless $self-&gt;parent;<br/> if( $self-&gt;{Child_Name} ) {<br/>@@ -256,738 +344,568 @@ sub finalize {<br/> local $? = 0; # don&#39;t fail if $subtests happened to set $? nonzero<br/> $self-&gt;_ending;<br/> <br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+ # XXX This will only be necessary for TAP envelopes (we think)<br/>+ #$self-&gt;_print( $self-&gt;is_passing ? &quot;PASS\n&quot; : &quot;FAIL\n&quot; );<br/>+<br/>+ local $Test::Builder::Level = $Test::Builder::Level + 1;<br/> my $ok = 1;<br/> $self-&gt;parent-&gt;{Child_Name} = undef;<br/>-<br/>- unless ($self-&gt;_bailed_out) {<br/>+ unless ($self-&gt;{Bailed_Out}) {<br/> if ( $self-&gt;{Skip_All} ) {<br/> $self-&gt;parent-&gt;skip($self-&gt;{Skip_All});<br/> }<br/>- elsif ( ! $self-&gt;stream-&gt;tests_run ) {<br/>+ elsif ( not @{ $self-&gt;{Test_Results} } ) {<br/> $self-&gt;parent-&gt;ok( 0, sprintf q[No tests run for subtest &quot;%s&quot;], $self-&gt;name );<br/> }<br/> else {<br/> $self-&gt;parent-&gt;ok( $self-&gt;is_passing, $self-&gt;name );<br/> }<br/> }<br/>-<br/> $? = $self-&gt;{Child_Error};<br/>- my $parent = delete $self-&gt;{Parent};<br/>-<br/>- my $res = Test::Builder::Event::Child-&gt;new(<br/>- $self-&gt;context,<br/>- name =&gt; $self-&gt;{Name} || undef,<br/>- action =&gt; &#39;pop&#39;,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- is_subtest =&gt; $is_subtest || 0,<br/>- );<br/>- $parent-&gt;stream-&gt;send($res);<br/>+ delete $self-&gt;{Parent};<br/> <br/> return $self-&gt;is_passing;<br/> }<br/> <br/>-#############################<br/>-# }}} Children and subtests #<br/>-#############################<br/>+sub _indent {<br/>+ my $self = shift;<br/> <br/>-#####################################<br/>-# {{{ Finding Testers and Providers #<br/>-#####################################<br/>+ if( @_ ) {<br/>+ $self-&gt;{Indent} = shift;<br/>+ }<br/> <br/>-sub trace_test {<br/>- my $self = shift;<br/>- return $self-&gt;{_trace_cache} if $self-&gt;{_trace_cache};<br/>- my $out;<br/>- protect { $out = Test::Builder::Trace-&gt;new };<br/>- return $out;<br/>+ return $self-&gt;{Indent};<br/> }<br/> <br/>-sub find_TODO {<br/>- my( $self, $where, $set, $new_value ) = @_;<br/>+=item B&lt;parent&gt;<br/> <br/>- my $pack;<br/>- if ($where &amp;&amp; Scalar::Util::blessed($where) &amp;&amp; $where-&gt;isa(&#39;Test::Builder::Trace&#39;)) {<br/>- $pack = $where-&gt;todo_package || $self-&gt;exported_to;<br/>- }<br/>- else {<br/>- $pack = $where || $self-&gt;trace_test-&gt;todo_package || $self-&gt;exported_to;<br/>- }<br/>+ if ( my $parent = $builder-&gt;parent ) {<br/>+ ...<br/>+ }<br/> <br/>- return unless $pack;<br/>+Returns the parent C&lt;Test::Builder&gt; instance, if any. Only used with child<br/>+builders for nested TAP.<br/> <br/>- no strict &#39;refs&#39;; ## no critic<br/>- no warnings &#39;once&#39;;<br/>- my $old_value = ${ $pack . &#39;::TODO&#39; };<br/>- $set and ${ $pack . &#39;::TODO&#39; } = $new_value;<br/>- return $old_value;<br/>-}<br/>+=cut<br/> <br/>-#####################################<br/>-# }}} Finding Testers and Providers #<br/>-#####################################<br/>+sub parent { shift-&gt;{Parent} }<br/> <br/>-################<br/>-# {{{ Planning #<br/>-################<br/>+=item B&lt;name&gt;<br/> <br/>-my %PLAN_CMDS = (<br/>- no_plan =&gt; &#39;no_plan&#39;,<br/>- skip_all =&gt; &#39;skip_all&#39;,<br/>- tests =&gt; &#39;_plan_tests&#39;,<br/>-);<br/>+ diag $builder-&gt;name;<br/> <br/>-sub plan {<br/>- my( $self, $cmd, $arg ) = @_;<br/>+Returns the name of the current builder. Top level builders default to C&lt;$0&gt;<br/>+(the name of the executable). Child builders are named via the C&lt;child&gt;<br/>+method. If no name is supplied, will be named &quot;Child of $parent-&gt;name&quot;.<br/> <br/>- return unless $cmd;<br/>+=cut<br/> <br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+sub name { shift-&gt;{Name} }<br/> <br/>- if( my $method = $PLAN_CMDS{$cmd} ) {<br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>- $self-&gt;$method($arg);<br/>- }<br/>- else {<br/>- my @args = grep { defined } ( $cmd, $arg );<br/>- $self-&gt;croak(&quot;plan() doesn&#39;t understand @args&quot;);<br/>+sub DESTROY {<br/>+ my $self = shift;<br/>+ if ( $self-&gt;parent and $$ == $self-&gt;{Original_Pid} ) {<br/>+ my $name = $self-&gt;name;<br/>+ $self-&gt;diag(&lt;&lt;&quot;FAIL&quot;);<br/>+Child ($name) exited without calling finalize()<br/>+FAIL<br/>+ $self-&gt;parent-&gt;{In_Destroy} = 1;<br/>+ $self-&gt;parent-&gt;ok(0, $name);<br/> }<br/>-<br/>- return 1;<br/> }<br/> <br/>-sub skip_all {<br/>- my( $self, $reason ) = @_;<br/>+=item B&lt;reset&gt;<br/> <br/>- $self-&gt;{Skip_All} = $self-&gt;parent ? $reason : 1;<br/>+ $Test-&gt;reset;<br/> <br/>- die bless {} =&gt; &#39;Test::Builder::Exception&#39; if $self-&gt;parent;<br/>- $self-&gt;_issue_plan(0, &quot;SKIP&quot;, $reason);<br/>-}<br/>+Reinitializes the Test::Builder singleton to its original state.<br/>+Mostly useful for tests run in persistent environments where the same<br/>+test might be run multiple times in the same process.<br/> <br/>-sub no_plan {<br/>- my($self, $arg) = @_;<br/>+=cut<br/> <br/>- $self-&gt;carp(&quot;no_plan takes no arguments&quot;) if $arg;<br/>+our $Level;<br/> <br/>- $self-&gt;_issue_plan(undef, &quot;NO_PLAN&quot;);<br/>+sub reset { ## no critic (Subroutines::ProhibitBuiltinHomonyms)<br/>+ my($self) = @_;<br/> <br/>- return 1;<br/>-}<br/>+ # We leave this a global because it has to be localized and localizing<br/>+ # hash keys is just asking for pain. Also, it was documented.<br/>+ $Level = 1;<br/> <br/>-sub _plan_tests {<br/>- my($self, $arg) = @_;<br/>+ $self-&gt;{Name} = $0;<br/>+ $self-&gt;is_passing(1);<br/>+ $self-&gt;{Ending} = 0;<br/>+ $self-&gt;{Have_Plan} = 0;<br/>+ $self-&gt;{No_Plan} = 0;<br/>+ $self-&gt;{Have_Output_Plan} = 0;<br/>+ $self-&gt;{Done_Testing} = 0;<br/> <br/>- if($arg) {<br/>- $self-&gt;croak(&quot;Number of tests must be a positive integer. You gave it &#39;$arg&#39;&quot;)<br/>- unless $arg =~ /^\+?\d+$/;<br/>+ $self-&gt;{Original_Pid} = $$;<br/>+ $self-&gt;{Child_Name} = undef;<br/>+ $self-&gt;{Indent} ||= &#39;&#39;;<br/> <br/>- $self-&gt;_issue_plan($arg);<br/>- }<br/>- elsif( !defined $arg ) {<br/>- $self-&gt;croak(&quot;Got an undefined number of tests&quot;);<br/>- }<br/>- else {<br/>- $self-&gt;croak(&quot;You said to run 0 tests&quot;);<br/>- }<br/>+ $self-&gt;{Curr_Test} = 0;<br/>+ $self-&gt;{Test_Results} = &amp;share( [] );<br/> <br/>- return;<br/>-}<br/>+ $self-&gt;{Exported_To} = undef;<br/>+ $self-&gt;{Expected_Tests} = 0;<br/> <br/>-sub _issue_plan {<br/>- my($self, $max, $directive, $reason) = @_;<br/>+ $self-&gt;{Skip_All} = 0;<br/> <br/>- if ($directive &amp;&amp; $directive eq &#39;OVERRIDE&#39;) {<br/>- $directive = undef;<br/>- }<br/>- elsif ($self-&gt;stream-&gt;plan) {<br/>- $self-&gt;croak(&quot;You tried to plan twice&quot;);<br/>- }<br/>+ $self-&gt;{Use_Nums} = 1;<br/> <br/>- my $plan = Test::Builder::Event::Plan-&gt;new(<br/>- $self-&gt;context,<br/>- directive =&gt; $directive || undef,<br/>- reason =&gt; $reason || undef,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>+ $self-&gt;{No_Header} = 0;<br/>+ $self-&gt;{No_Ending} = 0;<br/> <br/>- max =&gt; defined($max) ? $max : undef,<br/>- );<br/>+ $self-&gt;{Todo} = undef;<br/>+ $self-&gt;{Todo_Stack} = [];<br/>+ $self-&gt;{Start_Todo} = 0;<br/>+ $self-&gt;{Opened_Testhandles} = 0;<br/> <br/>- $self-&gt;stream-&gt;send($plan);<br/>+ $self-&gt;_share_keys;<br/>+ $self-&gt;_dup_stdhandles;<br/> <br/>- return $plan;<br/>+ return;<br/> }<br/> <br/>-sub done_testing {<br/>- my($self, $num_tests) = @_;<br/> <br/>- my $expected = $self-&gt;stream-&gt;expected_tests;<br/>- my $total = $self-&gt;stream-&gt;tests_run;<br/>+# Shared scalar values are lost when a hash is copied, so we have<br/>+# a separate method to restore them.<br/>+# Shared references are retained across copies.<br/>+sub _share_keys {<br/>+ my $self = shift;<br/> <br/>- # If done_testing() specified the number of tests, shut off no_plan.<br/>- if(defined $num_tests &amp;&amp; !defined $expected) {<br/>- $self-&gt;_issue_plan($num_tests, &#39;OVERRIDE&#39;);<br/>- $expected = $num_tests;<br/>- }<br/>+ share( $self-&gt;{Curr_Test} );<br/> <br/>- if( $self-&gt;{Done_Testing} ) {<br/>- my($file, $line) = @{$self-&gt;{Done_Testing}}[1,2];<br/>- my $ok = Test::Builder::Event::Ok-&gt;new(<br/>- $self-&gt;context,<br/>- real_bool =&gt; 0,<br/>- name =&gt; &quot;done_testing() was already called at $file line $line&quot;,<br/>- bool =&gt; $self-&gt;in_todo ? 1 : 0,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- todo =&gt; $self-&gt;in_todo ? $self-&gt;todo() || &quot;&quot; : &quot;&quot;,<br/>- );<br/>- $self-&gt;stream-&gt;send($ok);<br/>- $self-&gt;is_passing(0) unless $self-&gt;in_todo;<br/>+ return;<br/>+}<br/> <br/>- return;<br/>- }<br/> <br/>- $self-&gt;{Done_Testing} = [caller];<br/>+=back<br/> <br/>- if ($expected &amp;&amp; defined($num_tests) &amp;&amp; $num_tests != $expected) {<br/>- my $ok = Test::Builder::Event::Ok-&gt;new(<br/>- $self-&gt;context,<br/>- real_bool =&gt; 0,<br/>- name =&gt; &quot;planned to run $expected but done_testing() expects $num_tests&quot;,<br/>- bool =&gt; $self-&gt;in_todo ? 1 : 0,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- todo =&gt; $self-&gt;in_todo ? $self-&gt;todo() || &quot;&quot; : &quot;&quot;,<br/>- );<br/>- $self-&gt;stream-&gt;send($ok);<br/>- $self-&gt;is_passing(0) unless $self-&gt;in_todo;<br/>- }<br/>+=head2 Setting up tests<br/> <br/>+These methods are for setting up tests and declaring how many there<br/>+are. You usually only want to call one of these methods.<br/> <br/>- $self-&gt;_issue_plan($total) unless $expected;<br/>+=over 4<br/> <br/>- # The wrong number of tests were run<br/>- $self-&gt;is_passing(0) if defined $expected &amp;&amp; $expected != $total;<br/>+=item B&lt;plan&gt;<br/> <br/>- # No tests were run<br/>- $self-&gt;is_passing(0) unless $total;<br/>+ $Test-&gt;plan(&#39;no_plan&#39;);<br/>+ $Test-&gt;plan( skip_all =&gt; $reason );<br/>+ $Test-&gt;plan( tests =&gt; $num_tests );<br/> <br/>- return 1;<br/>-}<br/>+A convenient way to set up your tests. Call this and Test::Builder<br/>+will print the appropriate headers and take the appropriate actions.<br/> <br/>-################<br/>-# }}} Planning #<br/>-################<br/>+If you call C&lt;plan()&gt;, don&#39;t call any of the other methods below.<br/> <br/>-#############################<br/>-# {{{ Base Event Producers #<br/>-#############################<br/>+If a child calls &quot;skip_all&quot; in the plan, a C&lt;Test::Builder::Exception&gt; is<br/>+thrown. Trap this error, call C&lt;finalize()&gt; and don&#39;t run any more tests on<br/>+the child.<br/> <br/>-sub _ok_obj {<br/>- my $self = shift;<br/>- my( $test, $name, @diag ) = @_;<br/>+ my $child = $Test-&gt;child(&#39;some child&#39;);<br/>+ eval { $child-&gt;plan( $condition ? ( skip_all =&gt; $reason ) : ( tests =&gt; 3 ) ) };<br/>+ if ( eval { $@-&gt;isa(&#39;Test::Builder::Exception&#39;) } ) {<br/>+ $child-&gt;finalize;<br/>+ return;<br/>+ }<br/>+ # run your tests<br/> <br/>- if ( $self-&gt;{Child_Name} and not $self-&gt;{In_Destroy} ) {<br/>- $name = &#39;unnamed test&#39; unless defined $name;<br/>- $self-&gt;is_passing(0);<br/>- $self-&gt;croak(&quot;Cannot run test ($name) with active children&quot;);<br/>- }<br/>-<br/>- # $test might contain an object which we don&#39;t want to accidentally<br/>- # store, so we turn it into a boolean.<br/>- $test = $test ? 1 : 0;<br/>+=cut<br/> <br/>- # In case $name is a string overloaded object, force it to stringify.<br/>- $self-&gt;_unoverload_str( \$name );<br/>+my %plan_cmds = (<br/>+ no_plan =&gt; \&amp;no_plan,<br/>+ skip_all =&gt; \&amp;skip_all,<br/>+ tests =&gt; \&amp;_plan_tests,<br/>+);<br/> <br/>- # Capture the value of $TODO for the rest of this ok() call<br/>- # so it can more easily be found by other routines.<br/>- my $todo = $self-&gt;todo();<br/>- my $in_todo = $self-&gt;in_todo;<br/>- local $self-&gt;{Todo} = $todo if $in_todo;<br/>+sub plan {<br/>+ my( $self, $cmd, $arg ) = @_;<br/> <br/>- $self-&gt;_unoverload_str( \$todo );<br/>+ return unless $cmd;<br/> <br/>- my $ok = Test::Builder::Event::Ok-&gt;new(<br/>- $self-&gt;context,<br/>- real_bool =&gt; $test,<br/>- bool =&gt; $self-&gt;in_todo ? 1 : $test,<br/>- name =&gt; $name || $self-&gt;default_name || undef,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- diag =&gt; \@diag,<br/>- );<br/>+ local $Level = $Level + 1;<br/> <br/>- # # in a name can confuse Test::Harness.<br/>- $name =~ s|#|\\#|g if defined $name;<br/>+ $self-&gt;croak(&quot;You tried to plan twice&quot;) if $self-&gt;{Have_Plan};<br/> <br/>- if( $self-&gt;in_todo ) {<br/>- $ok-&gt;todo($todo);<br/>- $ok-&gt;in_todo(1);<br/>+ if( my $method = $plan_cmds{$cmd} ) {<br/>+ local $Level = $Level + 1;<br/>+ $self-&gt;$method($arg);<br/> }<br/>-<br/>- if (defined $name and $name =~ /^[\d\s]+$/) {<br/>- $ok-&gt;diag(&lt;&lt;&quot; ERR&quot;);<br/>- You named your test &#39;$name&#39;. You shouldn&#39;t use numbers for your test names.<br/>- Very confusing.<br/>- ERR<br/>+ else {<br/>+ my @args = grep { defined } ( $cmd, $arg );<br/>+ $self-&gt;croak(&quot;plan() doesn&#39;t understand @args&quot;);<br/> }<br/> <br/>- return $ok;<br/>+ return 1;<br/> }<br/> <br/>-sub ok {<br/>- my $self = shift;<br/>- local $self-&gt;{_trace_cache} = $self-&gt;trace_test unless $self-&gt;{_trace_cache};<br/>- my( $test, $name, @diag ) = @_;<br/> <br/>- my $ok = $self-&gt;_ok_obj($test, $name, @diag);<br/>- $self-&gt;_record_ok($ok);<br/>+sub _plan_tests {<br/>+ my($self, $arg) = @_;<br/> <br/>- return $test ? 1 : 0;<br/>+ if($arg) {<br/>+ local $Level = $Level + 1;<br/>+ return $self-&gt;expected_tests($arg);<br/>+ }<br/>+ elsif( !defined $arg ) {<br/>+ $self-&gt;croak(&quot;Got an undefined number of tests&quot;);<br/>+ }<br/>+ else {<br/>+ $self-&gt;croak(&quot;You said to run 0 tests&quot;);<br/>+ }<br/>+<br/>+ return;<br/> }<br/> <br/>-sub _record_ok {<br/>- my $self = shift;<br/>- my ($ok) = @_;<br/>+=item B&lt;expected_tests&gt;<br/> <br/>- $self-&gt;stream-&gt;send($ok);<br/>+ my $max = $Test-&gt;expected_tests;<br/>+ $Test-&gt;expected_tests($max);<br/> <br/>- $self-&gt;is_passing(0) unless $ok-&gt;real_bool || $self-&gt;in_todo;<br/>+Gets/sets the number of tests we expect this test to run and prints out<br/>+the appropriate headers.<br/> <br/>- # Check that we haven&#39;t violated the plan<br/>- $self-&gt;_check_is_passing_plan();<br/>-}<br/>+=cut<br/> <br/>-sub BAIL_OUT {<br/>- my( $self, $reason ) = @_;<br/>+sub expected_tests {<br/>+ my $self = shift;<br/>+ my($max) = @_;<br/> <br/>- $self-&gt;_bailed_out(1);<br/>+ if(@_) {<br/>+ $self-&gt;croak(&quot;Number of tests must be a positive integer. You gave it &#39;$max&#39;&quot;)<br/>+ unless $max =~ /^\+?\d+$/;<br/> <br/>- if ($self-&gt;parent) {<br/>- $self-&gt;{Bailed_Out_Reason} = $reason;<br/>- $self-&gt;no_ending(1);<br/>- die bless {} =&gt; &#39;Test::Builder::Exception&#39;;<br/>- }<br/>+ $self-&gt;{Expected_Tests} = $max;<br/>+ $self-&gt;{Have_Plan} = 1;<br/> <br/>- my $bail = Test::Builder::Event::Bail-&gt;new(<br/>- $self-&gt;context,<br/>- reason =&gt; $reason,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- );<br/>- $self-&gt;stream-&gt;send($bail);<br/>+ $self-&gt;_output_plan($max) unless $self-&gt;no_header;<br/>+ }<br/>+ return $self-&gt;{Expected_Tests};<br/> }<br/> <br/>-sub skip {<br/>- my( $self, $why ) = @_;<br/>- $why ||= &#39;&#39;;<br/>- $self-&gt;_unoverload_str( \$why );<br/>-<br/>- my $ok = Test::Builder::Event::Ok-&gt;new(<br/>- $self-&gt;context,<br/>- real_bool =&gt; 1,<br/>- bool =&gt; 1,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- skip =&gt; $why,<br/>- );<br/>+=item B&lt;no_plan&gt;<br/> <br/>- $self-&gt;stream-&gt;send($ok);<br/>-}<br/>+ $Test-&gt;no_plan;<br/> <br/>-sub todo_skip {<br/>- my( $self, $why ) = @_;<br/>- $why ||= &#39;&#39;;<br/>+Declares that this test will run an indeterminate number of tests.<br/> <br/>- my $ok = Test::Builder::Event::Ok-&gt;new(<br/>- $self-&gt;context,<br/>- real_bool =&gt; 0,<br/>- bool =&gt; 1,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- skip =&gt; $why,<br/>- todo =&gt; $why,<br/>- );<br/>+=cut<br/> <br/>- $self-&gt;stream-&gt;send($ok);<br/>-}<br/>+sub no_plan {<br/>+ my($self, $arg) = @_;<br/> <br/>-sub diag {<br/>- my $self = shift;<br/>+ $self-&gt;carp(&quot;no_plan takes no arguments&quot;) if $arg;<br/> <br/>- my $msg = join &#39;&#39;, map { defined($_) ? $_ : &#39;undef&#39; } @_;<br/>+ $self-&gt;{No_Plan} = 1;<br/>+ $self-&gt;{Have_Plan} = 1;<br/> <br/>- my $r = Test::Builder::Event::Diag-&gt;new(<br/>- $self-&gt;context,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- message =&gt; $msg,<br/>- );<br/>- $self-&gt;stream-&gt;send($r);<br/>+ return 1;<br/> }<br/> <br/>-sub note {<br/>- my $self = shift;<br/>+=begin private<br/> <br/>- my $msg = join &#39;&#39;, map { defined($_) ? $_ : &#39;undef&#39; } @_;<br/>+=item B&lt;_output_plan&gt;<br/> <br/>- my $r = Test::Builder::Event::Note-&gt;new(<br/>- $self-&gt;context,<br/>- in_todo =&gt; $self-&gt;in_todo || 0,<br/>- message =&gt; $msg,<br/>- );<br/>- $self-&gt;stream-&gt;send($r);<br/>-}<br/>+ $tb-&gt;_output_plan($max);<br/>+ $tb-&gt;_output_plan($max, $directive);<br/>+ $tb-&gt;_output_plan($max, $directive =&gt; $reason);<br/> <br/>-#############################<br/>-# }}} Base Event Producers #<br/>-#############################<br/>+Handles displaying the test plan.<br/> <br/>-#################################<br/>-# {{{ Advanced Event Producers #<br/>-#################################<br/>+If a C&lt;$directive&gt; and/or C&lt;$reason&gt; are given they will be output with the<br/>+plan. So here&#39;s what skipping all tests looks like:<br/> <br/>-my %numeric_cmps = map { ( $_, 1 ) } ( &quot;&lt;&quot;, &quot;&lt;=&quot;, &quot;&gt;&quot;, &quot;&gt;=&quot;, &quot;==&quot;, &quot;!=&quot;, &quot;&lt;=&gt;&quot; );<br/>+ $tb-&gt;_output_plan(0, &quot;SKIP&quot;, &quot;Because I said so&quot;);<br/> <br/>-# Bad, these are not comparison operators. Should we include more?<br/>-my %cmp_ok_bl = map { ( $_, 1 ) } ( &quot;=&quot;, &quot;+=&quot;, &quot;.=&quot;, &quot;x=&quot;, &quot;^=&quot;, &quot;|=&quot;, &quot;||=&quot;, &quot;&amp;&amp;=&quot;, &quot;...&quot;);<br/>+It sets C&lt;&lt; $tb-&gt;{Have_Output_Plan} &gt;&gt; and will croak if the plan was already<br/>+output.<br/> <br/>-sub cmp_ok {<br/>- my( $self, $got, $type, $expect, $name ) = @_;<br/>+=end private<br/> <br/>- if ($cmp_ok_bl{$type}) {<br/>- $self-&gt;croak(&quot;$type is not a valid comparison operator in cmp_ok()&quot;);<br/>- }<br/>+=cut<br/> <br/>- my $test;<br/>- my $error;<br/>- my @diag;<br/>+sub _output_plan {<br/>+ my($self, $max, $directive, $reason) = @_;<br/> <br/>- local $self-&gt;{_trace_cache} = $self-&gt;trace_test unless $self-&gt;{_trace_cache};<br/>+ $self-&gt;carp(&quot;The plan was already output&quot;) if $self-&gt;{Have_Output_Plan};<br/> <br/>- my @warnings;<br/>- (undef, $error) = try {<br/>- local $SIG{__WARN__} = sub { push @warnings =&gt; @_ };<br/>- # This is so that warnings come out at the caller&#39;s level<br/>- ## no critic (BuiltinFunctions::ProhibitStringyEval)<br/>- eval qq[<br/>-#line 999 &quot;__REPLACE__ME__&quot;<br/>-\$test = \$got $type \$expect;<br/>-1;<br/>- ] || die $@;<br/>- };<br/>+ my $plan = &quot;1..$max&quot;;<br/>+ $plan .= &quot; # $directive&quot; if defined $directive;<br/>+ $plan .= &quot; $reason&quot; if defined $reason;<br/> <br/>- for my $warn (@warnings) {<br/>- my ($pkg, $file, $line) = $self-&gt;trace_test-&gt;report-&gt;call;<br/>- $warn =~ s/at __REPLACE__ME__ line 999/at (eval in cmp_ok) $file line $line/g;<br/>- warn $warn;<br/>- }<br/>+ $self-&gt;_print(&quot;$plan\n&quot;);<br/> <br/>- # Treat overloaded objects as numbers if we&#39;re asked to do a<br/>- # numeric comparison.<br/>- my $unoverload<br/>- = $numeric_cmps{$type}<br/>- ? &#39;_unoverload_num&#39;<br/>- : &#39;_unoverload_str&#39;;<br/>+ $self-&gt;{Have_Output_Plan} = 1;<br/> <br/>- push @diag =&gt; &lt;&lt;&quot;END&quot; if $error;<br/>-An error occurred while using $type:<br/>-------------------------------------<br/>-$error<br/>-------------------------------------<br/>-END<br/>+ return;<br/>+}<br/> <br/>- unless($test) {<br/>- $self-&gt;$unoverload( \$got, \$expect );<br/> <br/>- if( $type =~ /^(eq|==)$/ ) {<br/>- push @diag =&gt; $self-&gt;_is_diag( $got, $type, $expect );<br/>- }<br/>- elsif( $type =~ /^(ne|!=)$/ ) {<br/>- push @diag =&gt; $self-&gt;_isnt_diag( $got, $type );<br/>- }<br/>- else {<br/>- push @diag =&gt; $self-&gt;_cmp_diag( $got, $type, $expect );<br/>- }<br/>- }<br/>+=item B&lt;done_testing&gt;<br/> <br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>- $self-&gt;ok($test, $name, @diag);<br/>+ $Test-&gt;done_testing();<br/>+ $Test-&gt;done_testing($num_tests);<br/> <br/>- return $test ? 1 : 0;<br/>-}<br/>+Declares that you are done testing, no more tests will be run after this point.<br/> <br/>+If a plan has not yet been output, it will do so.<br/> <br/>-sub is_eq {<br/>- my( $self, $got, $expect, $name ) = @_;<br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+$num_tests is the number of tests you planned to run. If a numbered<br/>+plan was already declared, and if this contradicts, a failing test<br/>+will be run to reflect the planning mistake. If C&lt;no_plan&gt; was declared,<br/>+this will override.<br/> <br/>- if( !defined $got || !defined $expect ) {<br/>- # undef only matches undef and nothing else<br/>- my $test = !defined $got &amp;&amp; !defined $expect;<br/>+If C&lt;done_testing()&gt; is called twice, the second call will issue a<br/>+failing test.<br/> <br/>- $self-&gt;ok($test, $name, $test ? () : $self-&gt;_is_diag( $got, &#39;eq&#39;, $expect ));<br/>- return $test;<br/>- }<br/>+If C&lt;$num_tests&gt; is omitted, the number of tests run will be used, like<br/>+no_plan.<br/> <br/>- return $self-&gt;cmp_ok( $got, &#39;eq&#39;, $expect, $name );<br/>-}<br/>+C&lt;done_testing()&gt; is, in effect, used when you&#39;d want to use C&lt;no_plan&gt;, but<br/>+safer. You&#39;d use it like so:<br/> <br/>-sub is_num {<br/>- my( $self, $got, $expect, $name ) = @_;<br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+ $Test-&gt;ok($a == $b);<br/>+ $Test-&gt;done_testing();<br/> <br/>- if( !defined $got || !defined $expect ) {<br/>- # undef only matches undef and nothing else<br/>- my $test = !defined $got &amp;&amp; !defined $expect;<br/>+Or to plan a variable number of tests:<br/> <br/>- $self-&gt;ok($test, $name, $test ? () : $self-&gt;_is_diag( $got, &#39;==&#39;, $expect ));<br/>- return $test;<br/>+ for my $test (@tests) {<br/>+ $Test-&gt;ok($test);<br/> }<br/>+ $Test-&gt;done_testing(scalar @tests);<br/> <br/>- return $self-&gt;cmp_ok( $got, &#39;==&#39;, $expect, $name );<br/>-}<br/>-<br/>-sub isnt_eq {<br/>- my( $self, $got, $dont_expect, $name ) = @_;<br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+=cut<br/> <br/>- if( !defined $got || !defined $dont_expect ) {<br/>- # undef only matches undef and nothing else<br/>- my $test = defined $got || defined $dont_expect;<br/>+sub done_testing {<br/>+ my($self, $num_tests) = @_;<br/> <br/>- $self-&gt;ok( $test, $name, $test ? () : $self-&gt;_isnt_diag( $got, &#39;ne&#39; ));<br/>- return $test;<br/>+ # If done_testing() specified the number of tests, shut off no_plan.<br/>+ if( defined $num_tests ) {<br/>+ $self-&gt;{No_Plan} = 0;<br/>+ }<br/>+ else {<br/>+ $num_tests = $self-&gt;current_test;<br/> }<br/> <br/>- return $self-&gt;cmp_ok( $got, &#39;ne&#39;, $dont_expect, $name );<br/>-}<br/>-<br/>-sub isnt_num {<br/>- my( $self, $got, $dont_expect, $name ) = @_;<br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+ if( $self-&gt;{Done_Testing} ) {<br/>+ my($file, $line) = @{$self-&gt;{Done_Testing}}[1,2];<br/>+ $self-&gt;ok(0, &quot;done_testing() was already called at $file line $line&quot;);<br/>+ return;<br/>+ }<br/> <br/>- if( !defined $got || !defined $dont_expect ) {<br/>- # undef only matches undef and nothing else<br/>- my $test = defined $got || defined $dont_expect;<br/>+ $self-&gt;{Done_Testing} = [caller];<br/> <br/>- $self-&gt;ok( $test, $name, $test ? () : $self-&gt;_isnt_diag( $got, &#39;!=&#39; ));<br/>- return $test;<br/>+ if( $self-&gt;expected_tests &amp;&amp; $num_tests != $self-&gt;expected_tests ) {<br/>+ $self-&gt;ok(0, &quot;planned to run @{[ $self-&gt;expected_tests ]} &quot;.<br/>+ &quot;but done_testing() expects $num_tests&quot;);<br/>+ }<br/>+ else {<br/>+ $self-&gt;{Expected_Tests} = $num_tests;<br/> }<br/> <br/>- return $self-&gt;cmp_ok( $got, &#39;!=&#39;, $dont_expect, $name );<br/>-}<br/>+ $self-&gt;_output_plan($num_tests) unless $self-&gt;{Have_Output_Plan};<br/> <br/>-sub like {<br/>- my( $self, $thing, $regex, $name ) = @_;<br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+ $self-&gt;{Have_Plan} = 1;<br/> <br/>- return $self-&gt;_regex_ok( $thing, $regex, &#39;=~&#39;, $name );<br/>-}<br/>+ # The wrong number of tests were run<br/>+ $self-&gt;is_passing(0) if $self-&gt;{Expected_Tests} != $self-&gt;{Curr_Test};<br/> <br/>-sub unlike {<br/>- my( $self, $thing, $regex, $name ) = @_;<br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>+ # No tests were run<br/>+ $self-&gt;is_passing(0) if $self-&gt;{Curr_Test} == 0;<br/> <br/>- return $self-&gt;_regex_ok( $thing, $regex, &#39;!~&#39;, $name );<br/>+ return 1;<br/> }<br/> <br/> <br/>+=item B&lt;has_plan&gt;<br/> <br/>-#################################<br/>-# }}} Advanced Event Producers #<br/>-#################################<br/>+ $plan = $Test-&gt;has_plan<br/> <br/>-#######################<br/>-# {{{ Public helpers #<br/>-#######################<br/>+Find out whether a plan has been defined. C&lt;$plan&gt; is either C&lt;undef&gt; (no plan<br/>+has been set), C&lt;no_plan&gt; (indeterminate # of tests) or an integer (the number<br/>+of expected tests).<br/> <br/>-sub explain {<br/>- my $self = shift;<br/>+=cut<br/> <br/>- return map {<br/>- ref $_<br/>- ? do {<br/>- $self-&gt;_try(sub { require Data::Dumper }, die_on_fail =&gt; 1);<br/>+sub has_plan {<br/>+ my $self = shift;<br/> <br/>- my $dumper = Data::Dumper-&gt;new( [$_] );<br/>- $dumper-&gt;Indent(1)-&gt;Terse(1);<br/>- $dumper-&gt;Sortkeys(1) if $dumper-&gt;can(&quot;Sortkeys&quot;);<br/>- $dumper-&gt;Dump;<br/>- }<br/>- : $_<br/>- } @_;<br/>+ return( $self-&gt;{Expected_Tests} ) if $self-&gt;{Expected_Tests};<br/>+ return(&#39;no_plan&#39;) if $self-&gt;{No_Plan};<br/>+ return(undef);<br/> }<br/> <br/>-sub carp {<br/>- my $self = shift;<br/>- return warn $self-&gt;_message_at_caller(@_);<br/>-}<br/>+=item B&lt;skip_all&gt;<br/> <br/>-sub croak {<br/>- my $self = shift;<br/>- return die $self-&gt;_message_at_caller(@_);<br/>-}<br/>+ $Test-&gt;skip_all;<br/>+ $Test-&gt;skip_all($reason);<br/> <br/>-sub context {<br/>- my $self = shift;<br/>+Skips all the tests, using the given C&lt;$reason&gt;. Exits immediately with 0.<br/> <br/>- my $trace = $self-&gt;trace_test;<br/>+=cut<br/> <br/>- return (<br/>- depth =&gt; $self-&gt;depth,<br/>- source =&gt; $self-&gt;name || &quot;&quot;,<br/>- trace =&gt; $trace,<br/>- );<br/>-}<br/>+sub skip_all {<br/>+ my( $self, $reason ) = @_;<br/> <br/>-sub has_plan {<br/>- my $self = shift;<br/>+ $self-&gt;{Skip_All} = $self-&gt;parent ? $reason : 1;<br/> <br/>- return($self-&gt;stream-&gt;expected_tests) if $self-&gt;stream-&gt;expected_tests;<br/>- return(&#39;no_plan&#39;) if $self-&gt;stream-&gt;plan;<br/>- return(undef);<br/>+ $self-&gt;_output_plan(0, &quot;SKIP&quot;, $reason) unless $self-&gt;no_header;<br/>+ if ( $self-&gt;parent ) {<br/>+ die bless {} =&gt; &#39;Test::Builder::Exception&#39;;<br/>+ }<br/>+ exit(0);<br/> }<br/> <br/>-sub reset { ## no critic (Subroutines::ProhibitBuiltinHomonyms)<br/>- my $self = shift;<br/>- my %params;<br/>+=item B&lt;exported_to&gt;<br/> <br/>- if (@_) {<br/>- %params = @_;<br/>- $self-&gt;{reset_params} = \%params;<br/>- }<br/>- else {<br/>- %params = %{$self-&gt;{reset_params} || {}};<br/>- }<br/>+ my $pack = $Test-&gt;exported_to;<br/>+ $Test-&gt;exported_to($pack);<br/> <br/>- my $modern = $params{modern} || $self-&gt;modern || 0;<br/>- $self-&gt;modern($modern);<br/>+Tells Test::Builder what package you exported your functions to.<br/> <br/>- # We leave this a global because it has to be localized and localizing<br/>- # hash keys is just asking for pain. Also, it was documented.<br/>- $Level = 1;<br/>- $BLevel = 1;<br/>+This method isn&#39;t terribly useful since modules which share the same<br/>+Test::Builder object might get exported to different packages and only<br/>+the last one will be honored.<br/>+<br/>+=cut<br/>+<br/>+sub exported_to {<br/>+ my( $self, $pack ) = @_;<br/> <br/>- if ($params{new_stream} || !$params{shared_stream}) {<br/>- my $olds = $self-&gt;stream;<br/>- $self-&gt;{stream} = Test::Builder::Stream-&gt;new;<br/>- $self-&gt;{stream}-&gt;use_lresults if $olds-&gt;lresults;<br/>+ if( defined $pack ) {<br/>+ $self-&gt;{Exported_To} = $pack;<br/> }<br/>+ return $self-&gt;{Exported_To};<br/>+}<br/> <br/>- $final-&gt;pid($$) if $final;<br/>+=back<br/> <br/>- $self-&gt;stream-&gt;use_tap unless $params{no_tap} || $ENV{TB_NO_TAP};<br/>+=head2 Running tests<br/> <br/>- $self-&gt;stream-&gt;plan(undef) unless $params{no_reset_plan};<br/>+These actually run the tests, analogous to the functions in Test::More.<br/> <br/>- # Don&#39;t reset stream stuff when reseting/creating a modern TB object<br/>- unless ($modern) {<br/>- $self-&gt;stream-&gt;no_ending(0);<br/>- $self-&gt;tap-&gt;reset if $self-&gt;tap;<br/>- $self-&gt;lresults-&gt;reset if $self-&gt;lresults;<br/>- }<br/>+They all return true if the test passed, false if the test failed.<br/> <br/>- $self-&gt;{Name} = $0;<br/>+C&lt;$name&gt; is always optional.<br/> <br/>- $self-&gt;{Have_Issued_Plan} = 0;<br/>- $self-&gt;{Done_Testing} = 0;<br/>- $self-&gt;{Skip_All} = 0;<br/>+=over 4<br/> <br/>- $self-&gt;{Original_Pid} = $$;<br/>- $self-&gt;{Child_Name} = undef;<br/>- $self-&gt;{Indent} ||= &#39;&#39;;<br/>- $self-&gt;{Depth} = 0;<br/>+=item B&lt;ok&gt;<br/> <br/>- $self-&gt;{Exported_To} = undef;<br/>- $self-&gt;{Expected_Tests} = 0;<br/>+ $Test-&gt;ok($test, $name);<br/> <br/>- $self-&gt;{Todo} = undef;<br/>- $self-&gt;{Todo_Stack} = [];<br/>- $self-&gt;{Start_Todo} = 0;<br/>- $self-&gt;{Opened_Testhandles} = 0;<br/>+Your basic test. Pass if C&lt;$test&gt; is true, fail if $test is false. Just<br/>+like Test::Simple&#39;s C&lt;ok()&gt;.<br/> <br/>- return;<br/>-}<br/>+=cut<br/> <br/>+sub ok {<br/>+ my( $self, $test, $name ) = @_;<br/> <br/>-#######################<br/>-# }}} Public helpers #<br/>-#######################<br/>+ if ( $self-&gt;{Child_Name} and not $self-&gt;{In_Destroy} ) {<br/>+ $name = &#39;unnamed test&#39; unless defined $name;<br/>+ $self-&gt;is_passing(0);<br/>+ $self-&gt;croak(&quot;Cannot run test ($name) with active children&quot;);<br/>+ }<br/>+ # $test might contain an object which we don&#39;t want to accidentally<br/>+ # store, so we turn it into a boolean.<br/>+ $test = $test ? 1 : 0;<br/> <br/>-####################<br/>-# {{{ TODO related #<br/>-####################<br/>+ lock $self-&gt;{Curr_Test};<br/>+ $self-&gt;{Curr_Test}++;<br/> <br/>-sub todo {<br/>- my( $self, $pack ) = @_;<br/>+ # In case $name is a string overloaded object, force it to stringify.<br/>+ $self-&gt;_unoverload_str( \$name );<br/> <br/>- return $self-&gt;{Todo} if defined $self-&gt;{Todo};<br/>+ $self-&gt;diag(&lt;&lt;&quot;ERR&quot;) if defined $name and $name =~ /^[\d\s]+$/;<br/>+ You named your test &#39;$name&#39;. You shouldn&#39;t use numbers for your test names.<br/>+ Very confusing.<br/>+ERR<br/> <br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>- my $todo = $self-&gt;find_TODO($pack);<br/>- return $todo if defined $todo;<br/>+ # Capture the value of $TODO for the rest of this ok() call<br/>+ # so it can more easily be found by other routines.<br/>+ my $todo = $self-&gt;todo();<br/>+ my $in_todo = $self-&gt;in_todo;<br/>+ local $self-&gt;{Todo} = $todo if $in_todo;<br/> <br/>- return &#39;&#39;;<br/>-}<br/>+ $self-&gt;_unoverload_str( \$todo );<br/> <br/>-sub in_todo {<br/>- my $self = shift;<br/>+ my $out;<br/>+ my $result = &amp;share( {} );<br/> <br/>- local $Level = $Level + 1; local $BLevel = $BLevel + 1;<br/>- return( defined $self-&gt;{Todo} || $self-&gt;find_TODO ) ? 1 : 0;<br/>-}<br/>+ unless($test) {<br/>+ $out .= &quot;not &quot;;<br/>+ @$result{ &#39;ok&#39;, &#39;actual_ok&#39; } = ( ( $self-&gt;in_todo ? 1 : 0 ), 0 );<br/>+ }<br/>+ else {<br/>+ @$result{ &#39;ok&#39;, &#39;actual_ok&#39; } = ( 1, $test );<br/>+ }<br/> <br/>-sub todo_start {<br/>- my $self = shift;<br/>- my $message = @_ ? shift : &#39;&#39;;<br/>+ $out .= &quot;ok&quot;;<br/>+ $out .= &quot; $self-&gt;{Curr_Test}&quot; if $self-&gt;use_numbers;<br/>+<br/>+ if( defined $name ) {<br/>+ $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness.<br/>+ $out .= &quot; - $name&quot;;<br/>+ $result-&gt;{name} = $name;<br/>+ }<br/>+ else {<br/>+ $result-&gt;{name} = &#39;&#39;;<br/>+ }<br/> <br/>- $self-&gt;{Start_Todo}++;<br/> if( $self-&gt;in_todo ) {<br/>- push @{ $self-&gt;{Todo_Stack} } =&gt; $self-&gt;todo;<br/>+ $out .= &quot; # TODO $todo&quot;;<br/>+ $result-&gt;{reason} = $todo;<br/>+ $result-&gt;{type} = &#39;todo&#39;;<br/>+ }<br/>+ else {<br/>+ $result-&gt;{reason} = &#39;&#39;;<br/>+ $result-&gt;{type} = &#39;&#39;;<br/> }<br/>- $self-&gt;{Todo} = $message;<br/> <br/>- return;<br/>-}<br/>+ $self-&gt;{Test_Results}[ $self-&gt;{Curr_Test} - 1 ] = $result;<br/>+ $out .= &quot;\n&quot;;<br/> <br/>-sub todo_end {<br/>- my $self = shift;<br/>+ $self-&gt;_print($out);<br/> <br/>- if( !$self-&gt;{Start_Todo} ) {<br/>- $self-&gt;croak(&#39;todo_end() called without todo_start()&#39;);<br/>+ unless($test) {<br/>+ my $msg = $self-&gt;in_todo ? &quot;Failed (TODO)&quot; : &quot;Failed&quot;;<br/>+ $self-&gt;_print_to_fh( $self-&gt;_diag_fh, &quot;\n&quot; ) if $ENV{HARNESS_ACTIVE};<br/>+<br/>+ my( undef, $file, $line ) = $self-&gt;caller;<br/>+ if( defined $name ) {<br/>+ $self-&gt;diag(qq[ $msg test &#39;$name&#39;\n]);<br/>+ $self-&gt;diag(qq[ at $file line $line.\n]);<br/>+ }<br/>+ else {<br/>+ $self-&gt;diag(qq[ $msg test at $file line $line.\n]);<br/>+ }<br/> }<br/> <br/>- $self-&gt;{Start_Todo}--;<br/>+ $self-&gt;is_passing(0) unless $test || $self-&gt;in_todo;<br/> <br/>- if( $self-&gt;{Start_Todo} &amp;&amp; @{ $self-&gt;{Todo_Stack} } ) {<br/>- $self-&gt;{Todo} = pop @{ $self-&gt;{Todo_Stack} };<br/>- }<br/>- else {<br/>- delete $self-&gt;{Todo};<br/>- }<br/>+ # Check that we haven&#39;t violated the plan<br/>+ $self-&gt;_check_is_passing_plan();<br/> <br/>- return;<br/>+ return $test ? 1 : 0;<br/> }<br/> <br/>-####################<br/>-# }}} TODO related #<br/>-####################<br/>-<br/>-#######################<br/>-# {{{ Private helpers #<br/>-#######################<br/> <br/> # Check that we haven&#39;t yet violated the plan and set<br/> # is_passing() accordingly<br/> sub _check_is_passing_plan {<br/> my $self = shift;<br/> <br/>- my $plan = $self-&gt;stream-&gt;expected_tests;<br/>+ my $plan = $self-&gt;has_plan;<br/> return unless defined $plan; # no plan yet defined<br/> return unless $plan !~ /\D/; # no numeric plan<br/>- $self-&gt;is_passing(0) if $plan &lt; $self-&gt;stream-&gt;tests_run;<br/>+ $self-&gt;is_passing(0) if $plan &lt; $self-&gt;{Curr_Test};<br/> }<br/> <br/>-sub _is_object {<br/>- my( $self, $thing ) = @_;<br/>-<br/>- return $self-&gt;_try( sub { ref $thing &amp;&amp; $thing-&gt;isa(&#39;UNIVERSAL&#39;) } ) ? 1 : 0;<br/>-}<br/> <br/> sub _unoverload {<br/> my $self = shift;<br/>@@ -1006,6 +924,12 @@ sub _unoverload {<br/> return;<br/> }<br/> <br/>+sub _is_object {<br/>+ my( $self, $thing ) = @_;<br/>+<br/>+ return $self-&gt;_try( sub { ref $thing &amp;&amp; $thing-&gt;isa(&#39;UNIVERSAL&#39;) } ) ? 1 : 0;<br/>+}<br/>+<br/> sub _unoverload_str {<br/> my $self = shift;<br/> <br/>@@ -1037,6 +961,58 @@ sub _is_dualvar {<br/> return ($numval != 0 and $numval ne $val ? 1 : 0);<br/> }<br/> <br/>+=item B&lt;is_eq&gt;<br/>+<br/>+ $Test-&gt;is_eq($got, $expected, $name);<br/>+<br/>+Like Test::More&#39;s C&lt;is()&gt;. Checks if C&lt;$got eq $expected&gt;. This is the<br/>+string version.<br/>+<br/>+C&lt;undef&gt; only ever matches another C&lt;undef&gt;.<br/>+<br/>+=item B&lt;is_num&gt;<br/>+<br/>+ $Test-&gt;is_num($got, $expected, $name);<br/>+<br/>+Like Test::More&#39;s C&lt;is()&gt;. Checks if C&lt;$got == $expected&gt;. This is the<br/>+numeric version.<br/>+<br/>+C&lt;undef&gt; only ever matches another C&lt;undef&gt;.<br/>+<br/>+=cut<br/>+<br/>+sub is_eq {<br/>+ my( $self, $got, $expect, $name ) = @_;<br/>+ local $Level = $Level + 1;<br/>+<br/>+ if( !defined $got || !defined $expect ) {<br/>+ # undef only matches undef and nothing else<br/>+ my $test = !defined $got &amp;&amp; !defined $expect;<br/>+<br/>**** PATCH TRUNCATED AT 2000 LINES -- 16617 NOT SHOWN ****<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41653.html Wed, 20 Aug 2014 02:02:39 +0000 [perl.git] branch blead, updated. v5.21.2-171-gad81d09 by James Keenan In perl.git, the branch blead has been updated<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/ad81d09f91f86467273aeb1e8bc31ea2a0537f36?hp=4ef422df91dd7930bf44a43b30a58819dd2ba9a2&gt;<br/><br/>- Log -----------------------------------------------------------------<br/>commit ad81d09f91f86467273aeb1e8bc31ea2a0537f36<br/>Author: Karen Etheridge &lt;ether@cpan.org&gt;<br/>Date: Tue Aug 19 17:21:09 2014 -0700<br/><br/> spelling: till -&gt; until<br/><br/>M pod/perlre.pod<br/><br/>commit 3d9df1a7d63b856fd9420ec9fffddf41a521c255<br/>Author: Karen Etheridge &lt;ether@cpan.org&gt;<br/>Date: Tue Aug 19 17:20:01 2014 -0700<br/><br/> document what version \K was added in<br/><br/>M pod/perlre.pod<br/>-----------------------------------------------------------------------<br/><br/>Summary of changes:<br/> pod/perlre.pod | 9 +++++----<br/> 1 file changed, 5 insertions(+), 4 deletions(-)<br/><br/>diff --git a/pod/perlre.pod b/pod/perlre.pod<br/>index bf439ae..891eb34 100644<br/>--- a/pod/perlre.pod<br/>+++ b/pod/perlre.pod<br/>@@ -646,9 +646,9 @@ also work:<br/> \o{}, \000 character whose ordinal is the given octal number<br/> \l lowercase next char (think vi)<br/> \u uppercase next char (think vi)<br/>- \L lowercase till \E (think vi)<br/>- \U uppercase till \E (think vi)<br/>- \Q quote (disable) pattern metacharacters till \E<br/>+ \L lowercase until \E (think vi)<br/>+ \U uppercase until \E (think vi)<br/>+ \Q quote (disable) pattern metacharacters until \E<br/> \E end either case modification or quoted section, think vi<br/> <br/> Details are in L&lt;perlop/Quote and Quote-like Operators&gt;.<br/>@@ -1233,7 +1233,8 @@ A zero-width positive look-behind assertion. For example, C&lt;/(?&lt;=\t)\w+/&gt;<br/> matches a word that follows a tab, without including the tab in C&lt;$&amp;&gt;.<br/> Works only for fixed-width look-behind.<br/> <br/>-There is a special form of this construct, called C&lt;\K&gt;, which causes the<br/>+There is a special form of this construct, called C&lt;\K&gt; (available since<br/>+Perl 5.10.0), which causes the<br/> regex engine to &quot;keep&quot; everything it had matched prior to the C&lt;\K&gt; and<br/> not include it in C&lt;$&amp;&gt;. This effectively provides variable-length<br/> look-behind. The use of C&lt;\K&gt; inside of another look-around assertion<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41652.html Wed, 20 Aug 2014 01:43:41 +0000 [perl.git] branch smoke-me/jkeenan/122547-file-find-options, deleted. v5.21.2-161-ge86e6d6 by James Keenan In perl.git, the branch smoke-me/jkeenan/122547-file-find-options has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=e86e6d6e5ba665bf4a3f1538977540c925261c44&gt;<br/><br/> was e86e6d6e5ba665bf4a3f1538977540c925261c44<br/><br/>-----------------------------------------------------------------------<br/>e86e6d6e5ba665bf4a3f1538977540c925261c44 Check validity of keys in hash passed as first argument.<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41651.html Wed, 20 Aug 2014 01:43:32 +0000 [perl.git] branch smoke-me/jhi/floats, created. v5.21.2-177-g217c5bc by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/floats has been created<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/217c5bcd4b991574335d8fad99d033073bbf11f8?hp=0000000000000000000000000000000000000000&gt;<br/><br/> at 217c5bcd4b991574335d8fad99d033073bbf11f8 (commit)<br/><br/>- Log -----------------------------------------------------------------<br/>commit 217c5bcd4b991574335d8fad99d033073bbf11f8<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 12:41:41 2014 -0400<br/><br/> Separate grok_infnan() from grok_number().<br/> <br/> Remaining issues:<br/> <br/> (1) toke.c:scan_number() will not call this code (via grok_number)<br/> because &quot;NaN&quot; or &quot;Inf&quot; do not look at all like floats to it.<br/> <br/> (2) Even as we now recognize these forms, the native strtod()<br/> might not (problem of cross-portability of these exceptional<br/> forms: Win32 outputs e.g. &quot;1.#INF&quot;, what Linux reading this should do,<br/> or conversely Linux outputs &quot;Inf&quot;, what should Win32 do?)<br/><br/>M embed.fnc<br/>M embed.h<br/>M numeric.c<br/>M proto.h<br/><br/>commit 928e4575c8d6bd46d1f81dfc7867425452b463a8<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 11:31:50 2014 -0400<br/><br/> Perl_signbit should return non-zero for -0.<br/><br/>M numeric.c<br/><br/>commit 09835500256b49d39c7c3ccc042f57b8838dd00b<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 10:55:13 2014 -0400<br/><br/> Win32 apparently has _isnan() and _finite(), and _fpclass().<br/><br/>M perl.h<br/><br/>commit b9f7cf0c21b52d21a32edf43ad23491f0bc5c6c7<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 09:12:09 2014 -0400<br/><br/> Use Perl_isfinite().<br/> <br/> Also kill obsolete/wrong comment: Perl_frexp is not casting its<br/> argument to NV, and if USE_LONG_DOUBLE Perl_frexp is frexpl.<br/> And if we do have long double and don&#39;t have frexpl, it is unclear<br/> what should we do? (in this particular case, casting to double might<br/> be the best possible thing to do anyway.)<br/><br/>M sv.c<br/><br/>commit 48341751828ecefa35a737e1523b5bcb1c6b3ffd<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:23:17 2014 -0400<br/><br/> Perl_isinf enhancements.<br/> <br/> Try isfinitel first, and require Perl_isnan.<br/><br/>M perl.h<br/><br/>commit fffce792fbbe96592df353b93ce40beca7b412b5<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:56:48 2014 -0400<br/><br/> OSX does have isfinite(), and 10.9+ prefers it over finite().<br/> <br/> isfinite() is a macro+inline while Configure tests it as a library symbol.<br/><br/>M hints/darwin.sh<br/><br/>commit ec0024de954385eb5492a21e37cc5824dfe9368a<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:55:23 2014 -0400<br/><br/> Perl_isfinite() enhancements.<br/> <br/> Use isfinitel() if available, prefer C99 isfinite() over BSD finite().<br/><br/>M perl.h<br/><br/>commit 27999f3c78293671d7949a6250211391bc2f7807<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 09:57:06 2014 -0400<br/><br/> Configure for isfinitel / isinfl.<br/><br/>M Configure<br/>M Cross/config.sh-arm-linux<br/>M NetWare/config.wc<br/>M Porting/Glossary<br/>M Porting/config.sh<br/>M config_h.SH<br/>M configure.com<br/>M plan9/config_sh.sample<br/>M symbian/config.sh<br/>M uconfig.h<br/>M uconfig.sh<br/>M uconfig64.sh<br/>M win32/config.ce<br/>M win32/config.gc<br/>M win32/config.vc<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41650.html Wed, 20 Aug 2014 00:48:06 +0000 [perl.git] branch smoke-me/jhi/floats, deleted. v5.21.2-176-g75c3836 by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/floats has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=75c383650f1ab25980e77b49a12f2b01cf1c37d1&gt;<br/><br/> was 75c383650f1ab25980e77b49a12f2b01cf1c37d1<br/><br/>-----------------------------------------------------------------------<br/>75c383650f1ab25980e77b49a12f2b01cf1c37d1 Separate grok_infnan() from grok_number().<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41649.html Wed, 20 Aug 2014 00:47:55 +0000 [perl.git] branch smoke-me/jhi/hexfp, deleted. v5.21.2-170-ge405971 by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/hexfp has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=e405971467159d0e2bce94a2370bfb3368464e98&gt;<br/><br/> was e405971467159d0e2bce94a2370bfb3368464e98<br/><br/>-----------------------------------------------------------------------<br/>e405971467159d0e2bce94a2370bfb3368464e98 hexfp: double-double needs extracting the low lead nybble.<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41648.html Tue, 19 Aug 2014 22:19:28 +0000 [perl.git] branch smoke-me/jhi/floats, created. v5.21.2-176-g75c3836 by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/floats has been created<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/75c383650f1ab25980e77b49a12f2b01cf1c37d1?hp=0000000000000000000000000000000000000000&gt;<br/><br/> at 75c383650f1ab25980e77b49a12f2b01cf1c37d1 (commit)<br/><br/>- Log -----------------------------------------------------------------<br/>commit 75c383650f1ab25980e77b49a12f2b01cf1c37d1<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 12:41:41 2014 -0400<br/><br/> Separate grok_infnan() from grok_number().<br/> <br/> Remaining issues:<br/> <br/> (1) toke.c:scan_number() will not call this code (via grok_number)<br/> because &quot;NaN&quot; or &quot;Inf&quot; do not look at all like floats to it.<br/> <br/> (2) Even as we now recognize these forms, the native strtod()<br/> might not (problem of cross-portability of these exceptional<br/> forms: Win32 outputs e.g. &quot;1.#INF&quot;, what Linux reading this should do,<br/> or conversely Linux outputs &quot;Inf&quot;, what should Win32 do?)<br/><br/>M embed.fnc<br/>M embed.h<br/>M numeric.c<br/>M proto.h<br/><br/>commit 808053e20275da605f06fe26977f619696697155<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 11:31:50 2014 -0400<br/><br/> Perl_signbit should return non-zero for -0.<br/><br/>M numeric.c<br/><br/>commit bcc8884a7fc64a4541f81ed547980a9a6c33781b<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 10:55:13 2014 -0400<br/><br/> Win32 apparently has _isnan() and _finite(), and _fpclass().<br/><br/>M perl.h<br/><br/>commit b4fcffd17d6c8bdce0de92d51d55aa369492e3a8<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 09:12:09 2014 -0400<br/><br/> Use Perl_isfinite().<br/> <br/> Also kill obsolete/wrong comment: Perl_frexp is not casting its<br/> argument to NV, and if USE_LONG_DOUBLE Perl_frexp is frexpl.<br/> And if we do have long double and don&#39;t have frexpl, it is unclear<br/> what should we do? (in this particular case, casting to double might<br/> be the best possible thing to do anyway.)<br/><br/>M sv.c<br/><br/>commit 4cd13e585f4ea100e980c325ea6893ce0442f01c<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:23:17 2014 -0400<br/><br/> Perl_isinf enhancements.<br/> <br/> Try isfinitel first, and require Perl_isnan.<br/><br/>M perl.h<br/><br/>commit 19edd72795fa3219777bfce4a38b5aec104cc19a<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:56:48 2014 -0400<br/><br/> OSX does have isfinite(), and 10.9+ prefers it over finite().<br/> <br/> isfinite() is a macro+inline while Configure tests it as a library symbol.<br/><br/>M hints/darwin.sh<br/><br/>commit 5d33abe8bdf12d2a7c0c699832c4e2bea02b9b08<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:55:23 2014 -0400<br/><br/> Perl_isfinite() enhancements.<br/> <br/> Use isfinitel() if available, prefer C99 isfinite() over BSD finite().<br/><br/>M perl.h<br/><br/>commit 5fab22dd2168994a5cfb0a69d8f43fd4b610d60c<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 09:57:06 2014 -0400<br/><br/> Configure for isfinitel / isinfl.<br/> <br/> configure.com change verified by Craig Berry.<br/><br/>M Configure<br/>M Cross/config.sh-arm-linux<br/>M NetWare/config.wc<br/>M Porting/Glossary<br/>M Porting/config.sh<br/>M config_h.SH<br/>M configure.com<br/>M plan9/config_sh.sample<br/>M symbian/config.sh<br/>M uconfig.h<br/>M uconfig.sh<br/>M uconfig64.sh<br/>M win32/config.ce<br/>M win32/config.gc<br/>M win32/config.vc<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41647.html Tue, 19 Aug 2014 21:49:11 +0000 [perl.git] branch smoke-me/jhi/floats, deleted. v5.21.2-176-g7e612cc by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/floats has been deleted<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/0000000000000000000000000000000000000000?hp=7e612ccd1dd2b1c2a0ab1c3c9f54bcdcdb72f440&gt;<br/><br/> was 7e612ccd1dd2b1c2a0ab1c3c9f54bcdcdb72f440<br/><br/>-----------------------------------------------------------------------<br/>7e612ccd1dd2b1c2a0ab1c3c9f54bcdcdb72f440 Separate grok_infnan() from grok_number().<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41646.html Tue, 19 Aug 2014 21:48:06 +0000 [perl.git] branch smoke-me/jhi/floats, created. v5.21.2-176-g7e612cc by Jarkko Hietaniemi In perl.git, the branch smoke-me/jhi/floats has been created<br/><br/>&lt;http://perl5.git.perl.org/perl.git/commitdiff/7e612ccd1dd2b1c2a0ab1c3c9f54bcdcdb72f440?hp=0000000000000000000000000000000000000000&gt;<br/><br/> at 7e612ccd1dd2b1c2a0ab1c3c9f54bcdcdb72f440 (commit)<br/><br/>- Log -----------------------------------------------------------------<br/>commit 7e612ccd1dd2b1c2a0ab1c3c9f54bcdcdb72f440<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 12:41:41 2014 -0400<br/><br/> Separate grok_infnan() from grok_number().<br/> <br/> Remaining issues:<br/> <br/> (1) toke.c:scan_number() will not call this code (via grok_number)<br/> because &quot;NaN&quot; or &quot;Inf&quot; do not look at all like floats to it.<br/> <br/> (2) Even as we now recognize these forms, the native strtod()<br/> might not (problem of cross-portability of these exceptional<br/> forms: Win32 outputs e.g. &quot;1.#INF&quot;, what Linux reading this should do,<br/> or conversely Linux outputs &quot;Inf&quot;, what should Win32 do?)<br/><br/>M embed.fnc<br/>M embed.h<br/>M numeric.c<br/>M proto.h<br/><br/>commit 808053e20275da605f06fe26977f619696697155<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 11:31:50 2014 -0400<br/><br/> Perl_signbit should return non-zero for -0.<br/><br/>M numeric.c<br/><br/>commit bcc8884a7fc64a4541f81ed547980a9a6c33781b<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 10:55:13 2014 -0400<br/><br/> Win32 apparently has _isnan() and _finite(), and _fpclass().<br/><br/>M perl.h<br/><br/>commit b4fcffd17d6c8bdce0de92d51d55aa369492e3a8<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 09:12:09 2014 -0400<br/><br/> Use Perl_isfinite().<br/> <br/> Also kill obsolete/wrong comment: Perl_frexp is not casting its<br/> argument to NV, and if USE_LONG_DOUBLE Perl_frexp is frexpl.<br/> And if we do have long double and don&#39;t have frexpl, it is unclear<br/> what should we do? (in this particular case, casting to double might<br/> be the best possible thing to do anyway.)<br/><br/>M sv.c<br/><br/>commit 4cd13e585f4ea100e980c325ea6893ce0442f01c<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:23:17 2014 -0400<br/><br/> Perl_isinf enhancements.<br/> <br/> Try isfinitel first, and require Perl_isnan.<br/><br/>M perl.h<br/><br/>commit 19edd72795fa3219777bfce4a38b5aec104cc19a<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:56:48 2014 -0400<br/><br/> OSX does have isfinite(), and 10.9+ prefers it over finite().<br/> <br/> isfinite() is a macro+inline while Configure tests it as a library symbol.<br/><br/>M hints/darwin.sh<br/><br/>commit 5d33abe8bdf12d2a7c0c699832c4e2bea02b9b08<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 08:55:23 2014 -0400<br/><br/> Perl_isfinite() enhancements.<br/> <br/> Use isfinitel() if available, prefer C99 isfinite() over BSD finite().<br/><br/>M perl.h<br/><br/>commit 5fab22dd2168994a5cfb0a69d8f43fd4b610d60c<br/>Author: Jarkko Hietaniemi &lt;jhi@iki.fi&gt;<br/>Date: Mon Aug 18 09:57:06 2014 -0400<br/><br/> Configure for isfinitel / isinfl.<br/> <br/> configure.com change verified by Craig Berry.<br/><br/>M Configure<br/>M Cross/config.sh-arm-linux<br/>M NetWare/config.wc<br/>M Porting/Glossary<br/>M Porting/config.sh<br/>M config_h.SH<br/>M configure.com<br/>M plan9/config_sh.sample<br/>M symbian/config.sh<br/>M uconfig.h<br/>M uconfig.sh<br/>M uconfig64.sh<br/>M win32/config.ce<br/>M win32/config.gc<br/>M win32/config.vc<br/>-----------------------------------------------------------------------<br/><br/>--<br/>Perl5 Master Repository<br/> http://www.nntp.perl.org/group/perl.perl5.changes/2014/08/msg41645.html Tue, 19 Aug 2014 20:55:22 +0000