[eval] (itself properly seen as a specialization of [uplevel]) is a powerful [Tcl] [command]. Beginning programmers often regard it rather magically, though, and are susceptible to bad habits in its use. Let's straighten those out here: First, dense eval-ing often is a symptom of misunderstanding [http://groups-beta.google.com/group/comp.lang.tcl/msg/a2df315d4ffe4460] [http://groups-beta.google.com/group/comp.lang.tcl/index/browse_frm/thread/c3d6651005e12629/], generally of the "working too hard" [http://groups-beta.google.com/group/comp.lang.tcl/messages/2b9982d1f844cd3b] variety. Also, eval has security implications [[explain]], so it's appropriate systematically to analyze each instance of an eval in any particular application, and explicitly review that they're all "material". ... [RS]: [eval] is no big mystery, just the heart of Tcl :) Very similar to [Lisp] interpreters, an interactive [tclsh] has a read-eval-print loop that could be written, oversimplified, as while 1 { puts -nonewline "% " flush stdout gets stdin command if {$command eq "exit"} break set res [eval $command] puts $res } In general, whenever you have a command in a string or list, or several lists , [eval] is the way to evaluate that. As [eval] removes one layer of word wrapping, one can use it well as long as 8.5's [{expand}] isn't available: eval pack [winfo children .] -fill x