Tcl procs (they're Tcl's functions) can pass information back via the
return command, and they can access data in the top level of code via the
global commands. Incoming parameters can be passed in 'by name' so that any values altered within the proc are also altered in the calling code - there's an example
here using the
upvar command and another
here.
A further facility -
uplevel - allows you to run a command in the scope of the proc that called your code. It
can be useful for setting an extra return value, but it's also a command that allows all sorts of horrors - so be careful. And remember that any variables that you reference in the
uplevel command that are prefixed with a $ will be interpretted / substituted before the uplevel command is even run - so will be from the
local scope. There's an example of uplevel in use
here if you want to see what I mean!
(written 2009-10-24)
Associated topics are indexed under
T213 - Tcl/Tk - Libraries, Packages and Namespaces [3418] Tcl packages, pkg_mkIndex, pkgIndex.tcl -what are they and why use them. - (2011-09-03)
[3417] What is a namespace and why do we need them? - (2011-09-03)
[3066] Separating groups of variables into namespaces - (2010-11-24)
[1529] Tcl - learning how to use namespaces, packages and libraries together - (2008-02-02)
[1339] Packages and Namespaces are like Suitcases and Aircraft - (2007-09-09)
[146] example of Tcl namespaces and packages - (2004-12-10)
T207 - Tcl/Tk - Procedures and Variable Scope [3414] Passing back multiple results in Tcl - upvar and uplevel - (2011-09-01)
[3192] Tcl - Some example of HOW TO in handling data files and formats - (2011-03-04)
[2929] Passing a variable number of parameters in to a function / method - (2010-08-20)
[2520] Global and Enable - two misused words! - (2009-11-30)
[2466] Tcl - passing arrays and strings in and back out of procs - (2009-10-22)
[1782] Calling procs in Tcl and how it compares to Perl - (2008-09-02)
[1404] Tcl - global, upvar and uplevel. - (2007-10-24)
[1163] A better alternative to cutting and pasting code - (2007-04-26)
[775] Do not duplicate your code - (2006-06-23)
[409] Functions and commands with dangerous names - (2005-08-11)
[308] Call by name v call by value - (2005-05-11)
[122] Passing arrays to procs in Tcl - (2004-11-18)
[96] Variable Scope - (2004-10-22)
Some other Articles
Pantomimes around Melksham - 2009/2010 seasonAccidentally typed ci rather than vi?How did I do THAT?By train ...Tcl - uplevel to run code at calling levelQuick easy and dangerous - automated logins via Tcl / ExpectUsing Tcl and Expect to automate repetitive jobsExploring Old Railwayssplit and join in tcl and expectA short form of if ... then ... else