Okay analysis, debatable fix. (The fix will inc
the refcount of all temporary match objects,
like for example tied(%h) =~ /^.../ from Tie/RefHash.t,
which will then cause griping at untie() time
("inner references remain").
Fix for ID
20010407.006: PL_reg_sv got wiped out
by freetemps if the match target was a temporary
(like function_call() =~ /.../), which in turn meant
that the $1 et al stopped working if they had UTF-8
in them. Therefore bump up the refcount of PL_reg_sv.
p4raw-id: //depot/perl@11712
TARG = DEFSV;
EXTEND(SP,1);
}
- PL_reg_sv = TARG;
+ PL_reg_sv = SvREFCNT_inc(TARG);
PUTBACK; /* EVAL blocks need stack_sp. */
s = SvPV(TARG, len);
strend = s + len;
TARG = DEFSV;
EXTEND(SP,1);
}
- PL_reg_sv = TARG;
+ PL_reg_sv = SvREFCNT_inc(TARG);
do_utf8 = DO_UTF8(PL_reg_sv);
if (SvFAKE(TARG) && SvREADONLY(TARG))
sv_force_normal(TARG);
$| = 1;
-print "1..684\n";
+print "1..686\n";
BEGIN {
chdir 't' if -d 't';
$c = pos;
print "$a $b $c" eq 'ba:ba ad:ae 10' ? "ok 684\n" : "not ok 684\t# $a $b $c\n";
}
+
+{
+ package ID_20010407_006;
+
+ sub x {
+ "a\x{1234}";
+ }
+
+ my $x = x;
+ my $y;
+
+ $x =~ /(..)/; $y = $1;
+ print "not " unless length($y) == 2 && $y eq $x;
+ print "ok 685\n" if length($y) == 2;
+
+ x =~ /(..)/; $y = $1;
+ print "not " unless length($y) == 2 && $y eq $x;
+ print "ok 686\n";
+}