diff options
author | Ilya Zakharevich <ilya@math.berkeley.edu> | 1998-07-21 19:00:35 -0400 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1998-09-23 02:42:23 +0000 |
commit | 6cef1e77274f883a8b06f0546efeff6e6b8660d8 (patch) | |
tree | bf4b9e2bacfaee26c6b088c262fa38ed4b56dc8d /mg.c | |
parent | aca2d49724bd7cda96bf319bce3078fc016f28f9 (diff) | |
download | perl-6cef1e77274f883a8b06f0546efeff6e6b8660d8.tar.gz |
support match indices via special variables @- and @+
Message-Id: <199807220300.XAA16081@monk.mps.ohio-state.edu>
Subject: [PATCH 5.004_76] @- and @+
p4raw-id: //depot/perl@1800
Diffstat (limited to 'mg.c')
-rw-r--r-- | mg.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -282,6 +282,48 @@ mg_free(SV *sv) #include <signal.h> #endif +int +magic_regdata_cnt(SV *sv, MAGIC *mg) +{ + dTHR; + register char *s; + register I32 i; + register REGEXP *rx; + char *t; + + if (PL_curpm && (rx = PL_curpm->op_pmregexp)) + return rx->lastparen; + return -1; +} + +int +magic_regdatum_get(SV *sv, MAGIC *mg) +{ + dTHR; + register I32 paren; + register char *s; + register I32 i; + register REGEXP *rx; + char *t; + + if (PL_curpm && (rx = PL_curpm->op_pmregexp)) { + paren = mg->mg_len; + if (paren < 0) + return 0; + if (paren <= rx->nparens && + (s = rx->startp[paren]) && + (t = rx->endp[paren])) + { + if (mg->mg_obj) /* @+ */ + i = t - rx->subbase; + else /* @- */ + i = s - rx->subbase; + sv_setiv(sv,i); + } + } + return 0; +} + U32 magic_len(SV *sv, MAGIC *mg) { |