static S dollarVarsToStars_underscoresWithDollarQ(S s) { ret dollarVarsToStars_underscoresWithDollarQ(s, null); } static S dollarVarsToStars_underscoresWithDollarQ(S s, L varNames_out) { ret join(dollarVarsToStars_underscoresWithDollarQ(javaTok(s), varNames_out)); } static L dollarVarsToStars_underscoresWithDollarQ(L tok, L varNames_out) { for (int i = 1; i < l(tok); i += 2) { S t = tok.get(i); if (isDollarVar(t)) { listAdd(varNames_out, t); tok.set(i, t.startsWith("$_q_") ? "*" // "quoted" var : joinWithSpace(rep("*", underscoreWordCount(t)))); } else if (eq(t, "*")) listAdd(varNames_out, "*"); } ret tok; }