diff options
author | John Peacock <john.peacock@havurah-software.org> | 2016-01-01 12:01:20 -0600 |
---|---|---|
committer | John Peacock <john.peacock@havurah-software.org> | 2016-01-01 12:01:20 -0600 |
commit | cec552f8eea62a130a9ae4a14a74c4e7cbf27bf2 (patch) | |
tree | c8eb60f075ec87cf1b35eccdf91698b3b88cd939 | |
parent | d90cae31cc05f7b68481c503d143d85f3318a593 (diff) |
Resolve https://rt.cpan.org/Ticket/Display.html?id=98744
-rw-r--r-- | t/coretests.pm | 4 | ||||
-rw-r--r-- | vperl/vpp.pm | 20 | ||||
-rw-r--r-- | vutil/vutil.c | 29 |
3 files changed, 10 insertions, 43 deletions
diff --git a/t/coretests.pm b/t/coretests.pm index b7b953b..52f87e1 100644 --- a/t/coretests.pm +++ b/t/coretests.pm @@ -628,6 +628,10 @@ SKIP: { $v = $CLASS->parse(q[2.6_01]); is $v->normal, 'v2.601.0', 'Normal strips underscores from alphas' } + { # https://rt.cpan.org/Ticket/Display.html?id=98744 + $v = $CLASS->new("1.02_003"); + is $v->numify, '1.020030', 'Ignore underscores for numify'; + } } 1; diff --git a/vperl/vpp.pm b/vperl/vpp.pm index b209b9b..8ccf88f 100644 --- a/vperl/vpp.pm +++ b/vperl/vpp.pm @@ -714,7 +714,6 @@ sub numify { require Carp; Carp::croak("Invalid version object"); } - my $width = $self->{width} || 3; my $alpha = $self->{alpha} || ""; my $len = $#{$self->{version}}; my $digit = $self->{version}[0]; @@ -724,25 +723,12 @@ sub numify { warnings::warn($WARN_CATEGORY, 'alpha->numify() is lossy'); } - for ( my $i = 1 ; $i < $len ; $i++ ) { + for ( my $i = 1 ; $i <= $len ; $i++ ) { $digit = $self->{version}[$i]; - if ( $width < 3 ) { - my $denom = 10**(3-$width); - my $quot = int($digit/$denom); - my $rem = $digit - ($quot * $denom); - $string .= sprintf("%0".$width."d%d", $quot, $rem); - } - else { - $string .= sprintf("%03d", $digit); - } + $string .= sprintf("%03d", $digit); } - if ( $len > 0 ) { - $digit = $self->{version}[$len]; - $string .= sprintf("%0".$width."d", $digit); - } - else # $len = 0 - { + if ( $len == 0 ) { $string .= sprintf("000"); } diff --git a/vutil/vutil.c b/vutil/vutil.c index b4a5091..87a04db 100644 --- a/vutil/vutil.c +++ b/vutil/vutil.c @@ -819,7 +819,6 @@ Perl_vnumify(pTHX_ SV *vs) { SSize_t i, len; I32 digit; - int width; bool alpha = FALSE; SV *sv; AV *av; @@ -834,14 +833,6 @@ Perl_vnumify(pTHX_ SV *vs) /* see if various flags exist */ if ( hv_exists(MUTABLE_HV(vs), "alpha", 5 ) ) alpha = TRUE; - { - SV ** svp = hv_fetchs(MUTABLE_HV(vs), "width", FALSE); - if ( svp ) - width = SvIV(*svp); - else - width = 3; - } - if (alpha) { Perl_ck_warner(aTHX_ packWARN(WARN_NUMERIC), @@ -864,28 +855,14 @@ Perl_vnumify(pTHX_ SV *vs) digit = SvIV(tsv); } sv = Perl_newSVpvf(aTHX_ "%d.", (int)PERL_ABS(digit)); - for ( i = 1 ; i < len ; i++ ) + for ( i = 1 ; i <= len ; i++ ) { SV * tsv = *av_fetch(av, i, 0); digit = SvIV(tsv); - if ( width < 3 ) { - const int denom = (width == 2 ? 10 : 100); - const div_t term = div((int)PERL_ABS(digit),denom); - Perl_sv_catpvf(aTHX_ sv, "%0*d%d", width, term.quot, term.rem); - } - else { - Perl_sv_catpvf(aTHX_ sv, "%0*d", width, (int)digit); - } + Perl_sv_catpvf(aTHX_ sv, "%03d", (int)digit); } - if ( len > 0 ) - { - SV * tsv = *av_fetch(av, len, 0); - digit = SvIV(tsv); - Perl_sv_catpvf(aTHX_ sv, "%0*d", width, (int)digit); - } - else /* len == 0 */ - { + if ( len == 0 ) { sv_catpvs(sv, "000"); } return sv; |