[perl #124153] Fix require(v5.6)
authorFather Chrysostomos <sprout@cpan.org>
Fri, 27 Mar 2015 20:30:29 +0000 (13:30 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 27 Mar 2015 20:30:29 +0000 (13:30 -0700)
For some reason the argument to require v5.6 has the NOK flag on,
but the parenthesized version lacks that flag, so the code added in
v5.21.3-504-ged6f447 to precompute the hash was wrong, and caused
require(v5.6) to lose its vstringness.

op.c
t/comp/require.t

diff --git a/op.c b/op.c
index 3000c44..9404a47 100644 (file)
--- a/op.c
+++ b/op.c
@@ -10775,7 +10775,8 @@ Perl_ck_require(pTHX_ OP *o)
            unshare_hek(hek);
            SvFLAGS(sv) |= was_readonly;
          }
-         else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv)) {
+         else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv)
+               && !SvVOK(sv)) {
            s = SvPV(sv, len);
            if (SvREFCNT(sv) > 1) {
                kid->op_sv = newSVpvn_share(
index be43c63..b3e4995 100644 (file)
@@ -34,7 +34,7 @@ if (grep -e, @files_to_delete) {
 
 my $Is_EBCDIC = (ord('A') == 193) ? 1 : 0;
 my $Is_UTF8   = (${^OPEN} || "") =~ /:utf8/;
-my $total_tests = 56;
+my $total_tests = 57;
 if ($Is_EBCDIC || $Is_UTF8) { $total_tests -= 3; }
 print "1..$total_tests\n";
 
@@ -70,6 +70,10 @@ eval { require v5.5.630; };
 print "# $@\nnot " if $@;
 print "ok ",$i++," - require 5.5.630\n";
 
+eval { require(v5.5.630); };
+print "# $@\nnot " if $@;
+print "ok ",$i++," - require(v5.5.630) with parens [perl #124153]\n";
+
 sub v5 { die }
 eval { require v5; };
 print "# $@\nnot " if $@;