info - Return information about the state of the Tcl interpreter
info option ?arg arg ...?
http://purl.org/tcl/home/man/tcl8.4/TclCmd/info.htm
What are some common uses of the info command in day to day programming?
With info, you can find out about your tcl environment. For example
proc ls {{ns ::} {all no}} { puts "namespace $ns" foreach child [namespace children $ns] { if { "all" == $all } { list $child all } { puts "namespace $child" } } set pat "[set ns]::*" foreach proc [info procs $pat] { puts "proc $proc" } foreach var [info vars $pat] { if { [array exists $var] } { puts "array $var" } { puts "variable $var" } } }
See tkinspect
In How can I tell where a proc was called , comp.lang.tcl, 2001-05-30, in response to a question about finding a way to tell who called a particular proc, Bruce Hartweg wrote (modified): In response to a question about finding a way to tell who called a particular proc, Bruce Hartweg wrote on news:comp.lang.tcl (in message [email protected] ):
# quick tester: proc who_called {} { proc who_called {} { puts "I was called from '[lindex [info level -1] 0]' - but first call was to '[lindex [info level 1] 0]'" } proc a {} who_called proc a {} {who_called} proc b {} {who_called} proc c {} {who_called} proc d {} {a} proc e {n} {$n} # end # end Output: Output:
% a I was called from 'a' - but first call was to 'a' % b I was called from 'b' - but first call was to 'b' % c I was called from 'c' - but first call was to 'c' % d I was called from 'a' - but first call was to 'd' % e a I was called from 'a' - but first call was to 'e' % e b I was called from 'b' - but first call was to 'e' % e c I was called from 'c' - but first call was to 'e' % e d I was called from 'a' - but first call was to 'e'
Will Taylor writes: And Will Taylor writes: I find a backtrace useful -- putting these two stmts in the proc in question:
set backtrace ""; getBackTrace backtrace puts stderr "<the-proc-in-question>: `$backtrace'" Here is the backtrace proc:
proc getBackTrace { backTraceRef } { upvar $backTraceRef backTrace set startLevel [expr {[info level] - 2}] set startLevel [expr {[info level] - 2}] for {set level 1} {$level <= $startLevel} {incr level} { append backTrace "[lindex [info level $level] 0] => " } }
The Bag of algorithms makes a couple of mentions of backtracing, and even has other uses of info ... . Note also that the Bag of algorithms makes a couple of mentions of backtracing, and even has other uses of [info ...].
AM: A common idiom that I use: AM A common idiom that I use:
set scriptdir [file dirname [info script]] so that I know where my other scripts or data files that need to be sourced/read are located. Another use: detect the difference between running the script [main script%|%on its own] or as a package: Another use: detect the difference between running the script on its own or as a package:
if { [file tail [info script]] == [file tail $::argv0] } { # The script is running on its own! }
There is one particular caveat: the command will return an empty string when it is called in an event handler - then there is no script being "sourced" anymore! So, save the result when you need it later on (that is: later on in the process, not later in the source file).
See also: