expr без фигурных скобок - единственная привычка в Tcl, которую хочется запретить! Выглядит как придирка к стилю, а на деле нет.
set qty {[puts "side effect"; list 3]}
puts [expr {$qty == 3}]
puts [expr $qty == 3]
Строка со скобками печатает 0. Компилятор байткода видит $qty == 3 как выражение, читает переменную один раз и сравнивает странную строку с 3. Строка без скобок печатает side effect, а потом 1. Tcl подставляет $qty, пока собирает слова команды, expr получает текст [puts "side effect"; list 3] == 3 и делает свой собственный круг подстановок, который и запускает команду в квадратных скобках. Две подстановки, и вторая выполняет всё, что лежало в переменной.
Это весёлая часть. Тихая часть касается скорости, потому что форму без скобок нельзя скомпилировать заранее, и она разбирается при каждом выполнении. Проверено здесь на 9.1, но так было очень давно.