Prevent V-magic from being stripped by locale fix
authorJohn Peacock <john.peacock@havurah-software.org>
Fri, 17 Jan 2014 19:43:34 +0000 (14:43 -0500)
committerDavid Mitchell <davem@iabyn.com>
Mon, 20 Jan 2014 12:59:49 +0000 (12:59 +0000)
version/t/00impl-pp.t was failing with locales

See thread beginning
    <20140113132518.GA11721@iabyn.com>

cpan/version/lib/version/vpp.pm

index 76b9119..3ef1170 100644 (file)
@@ -653,19 +653,6 @@ sub new
            return $self;
        }
 
-       if ($Config{d_setlocale}) {
-           use POSIX qw/locale_h/;
-           use if $Config{d_setlocale}, 'locale';
-           my $currlocale = setlocale(LC_ALL);
-
-           # if the current locale uses commas for decimal points, we
-           # just replace commas with decimal places, rather than changing
-           # locales
-           if ( localeconv()->{decimal_point} eq ',' ) {
-               $value =~ tr/,/./;
-           }
-       }
-
        if ( not defined $value or $value =~ /^undef$/ ) {
            # RT #19517 - special case for undef comparison
            # or someone forgot to pass a value
@@ -686,6 +673,19 @@ sub new
 
        $value = _un_vstring($value);
 
+       if ($Config{d_setlocale}) {
+           use POSIX qw/locale_h/;
+           use if $Config{d_setlocale}, 'locale';
+           my $currlocale = setlocale(LC_ALL);
+
+           # if the current locale uses commas for decimal points, we
+           # just replace commas with decimal places, rather than changing
+           # locales
+           if ( localeconv()->{decimal_point} eq ',' ) {
+               $value =~ tr/,/./;
+           }
+       }
+
        # exponential notation
        if ( $value =~ /\d+.?\d*e[-+]?\d+/ ) {
            $value = sprintf("%.9f",$value);