Those seem like they would make it bearable. Also GNU m4 has an extension to standard m4 which doesn't replace builtin macro names that take arguments if you omit the (). Without that, every unquoted occurrence of words like format, index, join, quote, builtin, define, copy, or capitalize silently vanishes. It's a nightmare. You can also avoid this problem with changeword or -P.