if (prog->reganch & ROPT_GPOS_SEEN) {
MAGIC *mg;
- int pos = 0;
- if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)
- && (mg = mg_find(sv, 'g')) && mg->mg_len >= 0)
- pos = mg->mg_len;
- PL_reg_ganch = startpos + pos;
+ if (!(flags & REXEC_IGNOREPOS) && sv && SvTYPE(sv) >= SVt_PVMG
+ && SvMAGIC(sv) && (mg = mg_find(sv, 'g')) && mg->mg_len >= 0)
+ PL_reg_ganch = strbeg + mg->mg_len;
+ else
+ PL_reg_ganch = startpos;
}
/* Simplest case: anchored match need be tried only once. */
if (PL_reg_sv) {
/* Make $_ available to executed code. */
- if (PL_reg_sv != GvSV(PL_defgv)) {
- SAVESPTR(GvSV(PL_defgv));
- GvSV(PL_defgv) = PL_reg_sv;
+ if (PL_reg_sv != DEFSV) {
+ /* SAVE_DEFSV does *not* suffice here for USE_THREADS */
+ SAVESPTR(DEFSV);
+ DEFSV = PL_reg_sv;
}
if (!(SvTYPE(PL_reg_sv) >= SVt_PVMG && SvMAGIC(PL_reg_sv)
}
/*
- - regclass - determine if a character falls into a character class
+ - reginclass - determine if a character falls into a character class
*/
STATIC bool