upvar(1tcl)
upvar --
create link to variable in a different stack frame
Synopsis
upvar [level] otherVar myVar
[otherVar myVar ...]
Description
This command arranges for one or more local variables in
the current procedure to refer to variables in an enclosing
procedure call or to global variables. level may
have any of the forms permitted for the uplevel
command, and may be omitted if the first letter of the
first otherVar isn't # or a digit (it defaults to
1). For each otherVar argument, upvar
makes the variable by that name in the procedure frame
given by level (or at global level, if
level is #0) accessible in the current procedure
by the name given in the corresponding myVar
argument. The variable named by otherVar need
not exist at the time of the call; it will be created the
first time myVar is referenced, just like an
ordinary variable. upvar may only be invoked
from within procedures. myVar may not refer to
an element of an array, but otherVar may refer to
an array element. upvar returns an empty
string.
The upvar command simplifies the implementation
of call-by-name procedure calling and also makes it easier
to build new control constructs as Tcl procedures. For
example, consider the following procedure:
proc add2 name {
upvar $name x
set x [expr $x+2]
}
add2 is invoked with an argument giving the name
of a variable, and it adds two to the value of that
variable. Although add2 could have been
implemented using uplevel instead of
upvar, upvar makes it simpler for
add2 to access the variable in the caller's
procedure frame.
If an upvar variable is unset (e.g. x
in add2 above), the unset operation
affects the variable it is linked to, not the
upvar variable. There is no way to unset an
upvar variable except by exiting the procedure in
which it is defined. However, it is possible to retarget
an upvar variable by executing another
upvar command.
25 April 2004
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004