Blob Blame History Raw
--- perl-5.8.8/pp.c.U34297_C28006	2006-07-13 12:40:37.000000000 -0400
+++ perl-5.8.8/pp.c	2006-07-13 13:03:19.000000000 -0400
@@ -2949,7 +2949,22 @@
     dSP; dTARGET;
     SV *sv = TOPs;
 
-    if (DO_UTF8(sv))
+    if (SvAMAGIC(sv)) {
+	/* For an overloaded scalar, we can't know in advance if it's going to
+	   be UTF-8 or not. Also, we can't call sv_len_utf8 as it likes to
+	   cache the length. Maybe that should be a documented feature of it.
+	*/
+	STRLEN len;
+	const char *const p = SvPV_const(sv, len);
+
+	if (DO_UTF8(sv)) {
+	    SETi(utf8_length((U8*)p, (U8*)p + len));
+	}
+	else
+	    SETi(len);
+
+    } 
+    else if (DO_UTF8(sv))
 	SETi(sv_len_utf8(sv));
     else
 	SETi(sv_len(sv));