Я бы создал пространство имен с именами переменных вроде:
proc show {} {
puts $fg::varName
puts $fg::x
}
set p "varName"
namespace eval fg {variable $p FirstValue}
namespace eval fg {variable x "Second variable"}
show
Это работает, я думаю, потому что это вне процедуры. Если я изменю код:
proc show {} {
puts $fg::varName
puts $fg::x
}
# set p ""
proc xx {} {
# global p
set p "varName"
namespace eval fg {variable $p FirstValue}
namespace eval fg {variable x "Second variable"}
show
}
xx
Я получаю ошибку, т. Е. не могу прочитать "p": такой переменной нет .
Это работает, если я раскомментирую
set p ""
и
global p
но это кажется немного громоздким.