X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Findirect.git;a=blobdiff_plain;f=indirect.xs;h=e144b02a4febf353155eefc2f432ba7734c5cf4d;hp=53b23f60ce7bff4cd1918fafda55278f5e877d1e;hb=8fc94cd143b3b33a9642be69b17389375208dbcf;hpb=3336d670f357e35805f53357a5b72dbb5676a535 diff --git a/indirect.xs b/indirect.xs index 53b23f6..e144b02 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,13 @@ 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; + sv = sv_2mortal(newSVpvn("$", 1)); + sv_catpvn_nomg(sv, s, t - s + 1); + indirect_map_store(o, s, sv); + } } return o;