+
+ /* This need to come after SvPV to ensure that string overloading has
+ fired off. */
+
+ left_utf = DO_UTF8(left);
+ right_utf = DO_UTF8(right);
+
+ if (left_utf && !right_utf) {
+ /* Avoid triggering overloading again by using temporaries.
+ Maybe there should be a variant of sv_utf8_upgrade that takes pvn
+ */
+ right = newSVpvn_flags(rsave, rightlen, SVs_TEMP);
+ sv_utf8_upgrade(right);
+ rsave = rc = SvPV_nomg_const(right, rightlen);
+ right_utf = TRUE;
+ }
+ else if (!left_utf && right_utf) {
+ left = newSVpvn_flags(lsave, leftlen, SVs_TEMP);
+ sv_utf8_upgrade(left);
+ lsave = lc = SvPV_nomg_const(left, leftlen);
+ left_utf = TRUE;
+ }
+