X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Findirect.git;a=blobdiff_plain;f=indirect.xs;h=7c0144689d9106519b44b62882a6749bdfb495db;hp=53b23f60ce7bff4cd1918fafda55278f5e877d1e;hb=3b965096935eb9216e70a0f6b8ab70d156fb371a;hpb=a26912556e065ea799bd946af5274c089c817838 diff --git a/indirect.xs b/indirect.xs index 53b23f6..7c01446 100644 --- a/indirect.xs +++ b/indirect.xs @@ -112,6 +112,14 @@ STATIC const char *indirect_find(pTHX_ SV *sv, const char *s) { STRLEN len; const char *p = NULL, *r = SvPV_const(sv, len); + if (len >= 1 && *r == '$') { + ++r; + --len; + s = strchr(s, '$'); + if (!s) + return NULL; + } + p = strstr(s, r); while (p) { p += len; @@ -214,10 +222,15 @@ STATIC OP *indirect_ck_padany(pTHX_ OP *o) { const char *s = PL_parser->oldbufptr, *t = PL_parser->bufptr - 1; while (s < t && isSPACE(*s)) ++s; - while (t > s && isSPACE(*t)) --t; - sv = sv_2mortal(newSVpvn(s, t - s + 1)); - - indirect_map_store(o, s, sv); + if (*s == '$' && ++s <= t) { + while (s < t && isSPACE(*s)) ++s; + while (s < t && isSPACE(*t)) --t; + if (!isALPHA(*s)) + return o; + sv = sv_2mortal(newSVpvn("$", 1)); + sv_catpvn_nomg(sv, s, t - s + 1); + indirect_map_store(o, s, sv); + } } return o;