Indirect References
Earlier I described how the single-argument set command is useful to separate variable names from other adjacent characters. This can be used for arbitrarily complex indirect references. For example, the following commands dynamically form a variable name from the contents of b and a literal c character. This result is taken as another variable name, and its contents are assigned to d.
set xc 1 set b x set d [set [set b]c] ;# sets d to value of xc
This type of indirection works with array names too. For example, the following sequence stores an array name in a and then retrieves a value through it.
set a(1) foo set a2 a puts [set [set a2](1)]
In contrast, replacing either of the set commands with the $ notation fails. The first of the next two commands incorrectly tries to use a2 as the array name.
tclsh>puts [set $a2(1)]can't read "a2(1)": variable isn't array tclsh>puts $[set a2](1)$a(1)
In the second command, the dollar sign is substituted literally because there is not a variable name immediately following it when it is first scanned.
Variable Information
Tcl provides the info command to obtain assorted pieces of internal information about Tcl. The most useful of the info operations is "info exists“. Given a variable name, "info exists" returns 1 if the variable exists or 0 otherwise. Only variables accessible from the current scope are checked. For example, the following command shows that haha has not been defined. An attempt to read it would fail.
tclsh>
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access