the problem actually lies in the 'nesting' of the interpolations being done.

${if(this){return 'this';}} is fine, because the single quotes do not result in this during eval:

eval ""this""; <- problem.

eval "'this'"; <- evaluated properly.

So the problem is I need to find a way to interpolate the contents of $1 and *then* have those contents interpolated again. I think I'm on the right track now, but thanks for the boilerplate, some of that looks to be useful reading.