PP(pp_scmp)
{
dSP; dTARGET; tryAMAGICbin(scmp,0);
-#ifndef NV_PRESERVES_UV
- if (SvROK(TOPs) && SvROK(TOPm1s)) {
- SETi(PTR2UV(SvRV(TOPs)) - PTR2UV(SvRV(TOPm1s)));
- RETURN;
- }
-#endif
{
dPOPTOPssrl;
int cmp = ((PL_op->op_private & OPpLOCALE)
sv_pos_u2b(sv, &pos, &rem);
tmps += pos;
sv_setpvn(TARG, tmps, rem);
+#ifdef USE_LOCALE_COLLATE
+ sv_unmagic(TARG, 'o');
+#endif
if (utf8_curlen)
SvUTF8_on(TARG);
if (repl) {
while (++MARK <= SP) {
SV *keysv = *MARK;
SV **svp;
- I32 preeminent = SvRMAGICAL(hv) ? 1 : hv_exists_ent(hv, keysv, 0);
+ I32 preeminent = SvRMAGICAL(hv) ? 1 :
+ realhv ? hv_exists_ent(hv, keysv, 0)
+ : avhv_exists_ent((AV*)hv, keysv, 0);
if (realhv) {
HE *he = hv_fetch_ent(hv, keysv, lval, 0);
svp = he ? &HeVAL(he) : 0;