X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp_hot.c;h=3ab4f304e7b9f59f58d2e15e20161627d8a0c069;hb=2680586ee66b8de4d2b5f26a2013220f2bec9d5f;hp=b1bf2708661e8db48ff1882c37b7ecd53855db1c;hpb=fbad3eb55c1f8c84d1dfd0e484ecddeffc891e79;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp_hot.c b/pp_hot.c index b1bf270..3ab4f30 100644 --- a/pp_hot.c +++ b/pp_hot.c @@ -855,7 +855,7 @@ PP(pp_match) register char *s; char *strend; I32 global; - I32 r_flags; + I32 r_flags = 0; char *truebase; register REGEXP *rx = pm->op_pmregexp; bool rxtainted; @@ -904,14 +904,18 @@ PP(pp_match) if (mg && mg->mg_len >= 0) { if (!(rx->reganch & ROPT_GPOS_SEEN)) rx->endp[0] = rx->startp[0] = s + mg->mg_len; + else if (rx->reganch & ROPT_ANCH_GPOS) { + r_flags |= REXEC_IGNOREPOS; + rx->endp[0] = rx->startp[0] = s + mg->mg_len; + } minmatch = (mg->mg_flags & MGf_MINMATCH); update_minmatch = 0; } } } - r_flags = ((gimme != G_ARRAY && !global && rx->nparens) - || SvTEMP(TARG) || PL_sawampersand) - ? REXEC_COPY_STR : 0; + if ((gimme != G_ARRAY && !global && rx->nparens) + || SvTEMP(TARG) || PL_sawampersand) + r_flags |= REXEC_COPY_STR; if (SvSCREAM(TARG) && rx->check_substr && SvTYPE(rx->check_substr) == SVt_PVBM && SvVALID(rx->check_substr))