NAME
       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 enclos-
       ing 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 vari-
       able named by otherVar need not exist at the time  of  the
       call;   it  will be created the first time myVar is refer-
       enced, 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 exam-
       ple, 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.


KEYWORDS
       context, frame, global, level, procedure, variable
