All sorts of languages have Perl-style regexps these days, including ColdFusion. However, that doesn't mean that they're going to be easy to use. I wanted to write a version of XmlFormat (a function that escapes text for use in XML) that would not eat newlines. Pretty simple, no?
Here's the error message I got on my first attempt.
Missing argument name.
When using named parameters to a function, every parameter must have a name.
[...]
coldfusion.compiler.CFMLParserBase$MissingNameException: Missing argument name.
at coldfusion.compiler.cfml40.FunctionParameters(cfml40.java:3374)
at coldfusion.compiler.cfml40.ComplexReference(cfml40.java:3296)
at coldfusion.compiler.cfml40.VariableReference(cfml40.java:3262)
at coldfusion.compiler.cfml40.PrimaryExpression(cfml40.java:3153)
at coldfusion.compiler.cfml40.UnaryExpression(cfml40.java:3087)
[and much more of this wonderful stack trace]
Here's the code I was trying to run.
newText = REReplace(text, "\n", "
", "ALL");
U huh. Well it turns out that the parser (or was it really the lexer?) was getting confused by that unguarded hash (#). Normally those are used in ColdFusion to interpolate variables in strings. Okay, but zero marks for clear compiler error messages.
Solution? Double the hash (##).