68beba0
diff -up perl-5.10.0/t/op/subst.t.pos perl-5.10.0/t/op/subst.t
68beba0
--- perl-5.10.0/t/op/subst.t.pos	2007-12-18 11:47:08.000000000 +0100
68beba0
+++ perl-5.10.0/t/op/subst.t	2008-07-21 11:01:01.000000000 +0200
68beba0
@@ -7,7 +7,7 @@ BEGIN {
68beba0
 }
68beba0
 
68beba0
 require './test.pl';
68beba0
-plan( tests => 136 );
68beba0
+plan( tests => 139 );
68beba0
 
68beba0
 $x = 'foo';
68beba0
 $_ = "x";
68beba0
@@ -583,3 +583,11 @@ is($name, "cis", q[#22351 bug with 'e' s
68beba0
     is($want,$_,"RT#17542");
68beba0
 }
68beba0
 
68beba0
+{
68beba0
+    my @tests = ('ABC', "\xA3\xA4\xA5", "\x{410}\x{411}\x{412}");
68beba0
+    foreach (@tests) {
68beba0
+       my $id = ord $_;
68beba0
+       s/./pos/ge;
68beba0
+       is($_, "012", "RT#52104: $id");
68beba0
+    }
68beba0
+}
60f59ff
diff -up perl-5.10.0/pp_ctl.c.pos perl-5.10.0/pp_ctl.c
60f59ff
--- perl-5.10.0/pp_ctl.c.pos	2007-12-18 11:47:08.000000000 +0100
60f59ff
+++ perl-5.10.0/pp_ctl.c	2008-07-21 12:31:50.000000000 +0200
60f59ff
@@ -285,7 +285,6 @@ PP(pp_substcont)
60f59ff
     { /* Update the pos() information. */
60f59ff
 	SV * const sv = cx->sb_targ;
60f59ff
 	MAGIC *mg;
60f59ff
-	I32 i;
60f59ff
 	SvUPGRADE(sv, SVt_PVMG);
60f59ff
 	if (!(mg = mg_find(sv, PERL_MAGIC_regex_global))) {
60f59ff
 #ifdef PERL_OLD_COPY_ON_WRITE
60f59ff
@@ -295,10 +294,7 @@ PP(pp_substcont)
60f59ff
 	    mg = sv_magicext(sv, NULL, PERL_MAGIC_regex_global, &PL_vtbl_mglob,
60f59ff
 			     NULL, 0);
60f59ff
 	}
60f59ff
-	i = m - orig;
60f59ff
-	if (DO_UTF8(sv))
60f59ff
-	    sv_pos_b2u(sv, &i);
60f59ff
-	mg->mg_len = i;
60f59ff
+	mg->mg_len = m - orig;
60f59ff
     }
60f59ff
     if (old != rx)
60f59ff
 	(void)ReREFCNT_inc(rx);