вполне корректном на первый взгляд коде. Код, в одном случае корректно работающий, в другом начинал содержать явные
ошибки синтаксиса (например, число аргументов функции менялось на непотребное).
В мануале как-то этот момент плавно обтекается, но работает это извращение так:
Значение макропеременной просто __ПОДСТАВЛЯЕТСЯ__ в выполняемый код. Со всеми своими символами, включая и синтаксически значимые - можно и скобки, в которых аргументы перечислены, закрыть и через запятую ещё добавить.
И ещё - никаких кавычек!
Как будто каждая строка (возьму perl для аналогии) - eval("....$vat ... $var ...") - есть где багу разгуляться.
SQL Injection отдыхает - тут в каждой второй строке данные подставляются в код.
Всё сильнее и сильнее хочется водки!