In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/afa74577a6e8d7cf96f7c62e4acca52fda973699?hp=b20c4ee1fc23699f6cbe3ce96cc8fe6eb4c52c4c>

- Log -----------------------------------------------------------------
commit afa74577a6e8d7cf96f7c62e4acca52fda973699
Author: Father Chrysostomos <spr...@cpan.org>
Date:   Mon Oct 4 13:58:49 2010 -0700

    [perl #45133] -0.0 has variable Boolean value
    
    This patch makes -0.0 stringify as "0" (while leaving sprintf %g/%f
    unchanged).
-----------------------------------------------------------------------

Summary of changes:
 pod/perldelta.pod |   14 ++++++++++++++
 sv.c              |    4 ----
 t/op/numconvert.t |   12 ++++++++++++
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index 5cd276e..7e1cca2 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -131,6 +131,14 @@ The unary negation operator C<-> now treats strings that 
look like numbers
 as numbers
 L<[perl #57706]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=57706>.
 
+=head2 Negative zero
+
+Negative zero (-0.0), when converted to a string, now becomes "0" on all
+platforms. It used to become "-0" on some, but "0" on others.
+
+If you still need to determine whether a zero is negative, use
+C<sprintf("%g", $zero) =~ /^-/> or the L<Data::Float> module on CPAN.
+
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -677,6 +685,12 @@ L<[perl 
#48332]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=48332>.
 The C<&> C<|> C<^> bitwise operators no longer coerce read-only arguments
 L<[perl #20661]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=20661>.
 
+=item *
+
+Stringifying a scalar containing -0.0 no longer has the affect of turning
+false into true
+L<[perl #45133]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=45133>.
+
 =back
 
 =head1 Known Problems
diff --git a/sv.c b/sv.c
index 58d0b40..4178dd3 100644
--- a/sv.c
+++ b/sv.c
@@ -2741,13 +2741,11 @@ Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN 
*const lp, const I32 flags
            {
                dVAR;
 
-#ifdef FIXNEGATIVEZERO
                if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
                    tbuf[0] = '0';
                    tbuf[1] = 0;
                    len = 1;
                }
-#endif
                SvUPGRADE(sv, SVt_PV);
                if (lp)
                    *lp = len;
@@ -2934,12 +2932,10 @@ Perl_sv_2pv_flags(pTHX_ register SV *const sv, STRLEN 
*const lp, const I32 flags
            Gconvert(SvNVX(sv), NV_DIG, 0, s);
        }
        RESTORE_ERRNO;
-#ifdef FIXNEGATIVEZERO
         if (*s == '-' && s[1] == '0' && !s[2]) {
            s[0] = '0';
            s[1] = 0;
        }
-#endif
        while (*s) s++;
 #ifdef hcx
        if (s[-1] == '.')
diff --git a/t/op/numconvert.t b/t/op/numconvert.t
index fedef70..ce78809 100644
--- a/t/op/numconvert.t
+++ b/t/op/numconvert.t
@@ -38,6 +38,7 @@
 BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
+    require './test.pl';
 }
 
 use strict 'vars';
@@ -72,6 +73,7 @@ my $st_t = 4*4;                       # We try 4 initializers 
and 4 reporters
 my $num = 0;
 $num += 10**$_ - 4**$_ for 1.. $max_chain;
 $num *= $st_t;
+$num += $::additional_tests;
 print "1..$num\n";             # In fact 15 times more subsubtests...
 
 my $max_uv = ~0;
@@ -256,3 +258,13 @@ for my $num_chain (1..$max_chain) {
     }
   }
 }
+
+# Tests that use test.pl start here.
+BEGIN { $::additional_tests = 3 }
+
+curr_test($test);
+
+ok(-0.0 eq "0", 'negative zero stringifies as 0');
+ok(!-0.0, "neg zero is boolean false");
+my $nz = -0.0; "$nz";
+ok(!$nz, 'previously stringified -0.0 is boolean false');

--
Perl5 Master Repository

Reply via email to