summaryrefslogtreecommitdiff
path: root/toke.c
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2007-01-12 03:31:12 +0100
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2007-01-15 16:26:17 +0000
commitcde0cee5716418bb58782f073048ee9685ed2368 (patch)
treec2a691ebb8348e48a5171a60b617299632146e12 /toke.c
parent780a5241a93925d81e932db73df46ee749b203b9 (diff)
downloadperl-cde0cee5716418bb58782f073048ee9685ed2368.tar.gz
Add support for /k modfier for matching along with ${^PREMATCH}, ${^MATCH}, ${^POSTMATCH}
Message-ID: <9b18b3110701111731x29b1c63i57b1698f769b3bbc@mail.gmail.com> (with tweaks) p4raw-id: //depot/perl@29831
Diffstat (limited to 'toke.c')
-rw-r--r--toke.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/toke.c b/toke.c
index f9f0627121..dcbf3d6360 100644
--- a/toke.c
+++ b/toke.c
@@ -10763,20 +10763,16 @@ void
Perl_pmflag(pTHX_ U32* pmfl, int ch)
{
PERL_UNUSED_CONTEXT;
- if (ch == 'i')
- *pmfl |= PMf_FOLD;
- else if (ch == 'g')
- *pmfl |= PMf_GLOBAL;
- else if (ch == 'c')
- *pmfl |= PMf_CONTINUE;
- else if (ch == 'o')
- *pmfl |= PMf_KEEP;
- else if (ch == 'm')
- *pmfl |= PMf_MULTILINE;
- else if (ch == 's')
- *pmfl |= PMf_SINGLELINE;
- else if (ch == 'x')
- *pmfl |= PMf_EXTENDED;
+ if (ch<256) {
+ char c = (char)ch;
+ switch (c) {
+ CASE_STD_PMMOD_FLAGS_PARSE_SET(pmfl);
+ case 'g': *pmfl |= PMf_GLOBAL; break;
+ case 'c': *pmfl |= PMf_CONTINUE; break;
+ case 'o': *pmfl |= PMf_KEEP; break;
+ case 'k': *pmfl |= PMf_KEEPCOPY; break;
+ }
+ }
}
STATIC char *
@@ -10786,7 +10782,7 @@ S_scan_pat(pTHX_ char *start, I32 type)
PMOP *pm;
char *s = scan_str(start,!!PL_madskills,FALSE);
const char * const valid_flags =
- (const char *)((type == OP_QR) ? "iomsx" : "iogcmsx");
+ (const char *)((type == OP_QR) ? "iomsxk" : "iogcmsxk");
#ifdef PERL_MAD
char *modstart;
#endif
@@ -10887,7 +10883,7 @@ S_scan_subst(pTHX_ char *start)
s++;
es++;
}
- else if (strchr("iogcmsx", *s))
+ else if (strchr("iogcmsxk", *s))
pmflag(&pm->op_pmflags,*s++);
else
break;