static SS matchDollarVarsIC_underscores(S pat, S s) { if (pat == null || s == null) null; new L vars; S pat2 = dollarVarsToStars_underscores(pat, vars); new Matches m; if (!match(pat2, s, m)) null; new SS map; int v = 0; for (int i = 0; i < l(m.m); ) { S var = vars.get(v++); int n = underscoreWordCount(var); S value = joinWithSpace(subStringArray(m.m, i, i+n)); if (startsWith(var, "$_q_", m)) { // q = quoted if (!isQuoted(value) || !strictPutIC(map, "$" + m.get(0), unquote(value))) null; } else if (!strictPutIC(map, var, value)) null; i += n; } ret map; }