異なるスタックフレームの変数へのリンクを作成します。...?解説このコマンドはカレントプロシージャの1つ、又は複数のローカル変数を、上級プロシージャ変数あるいはグローバル変数にリンクさせるためのものです。コマンドで使用可能なものと同じです。otherVarの最初の文字が#か数値でなければlevelは省略されます(既定値は1)。指定されたプロシージャフレームの中でotherVarという変数を作成し、そして現在のプロシージャから対応するmyVar引数によって指定された名前で、この作成された変数をアクセス可能にします。otherVarによって指定された変数はコールの時に存在する必要がありません。変数とまったく同じように初めてmyVarが参照される時点で作成されます。upvarが実行される時に名前がmyVarである変数は存在してはなりません。MyVarは常に配列の要素ではなく変数の名前として扱われます。ように、配列の要素にみえても作成されるのは普通の変数です。OtherVarはスカラ変数、配列または配列要素を参照することができます。Upvarの戻り値は空白の文字列です。upvarコマンドは名指しでプロシージャをコールする場合のインプリメントを簡単化します。Tclのプロシージャとして新しい制御構造を作成することを容易にします。次のプロシージャを見てみましょう。$x+2]}Add2は変数名として指定する引数でコールされます。引数変数の値に2をプラスします。add2はupvarの代わりにuplevelを使用することも可能ですが、upvarを使うことによってadd2が一層簡単にコール側プロシージャフレームの変数にアクセスすることができます。evalはプロシージャ呼び出し以外にTclの命名文脈を変えるもう1つの方法です。upvarは1つのコールフレームをスタックに追加することでnamespace文脈を表します。evalコマンドの別のコールレベルとしてカウントされます。evalコマンドのいずれかであるコマンドを表すリストを返します。おいてトップレベルのスクリプトを評価します。unset操作を影響するのはupvar変数ではなく、その変数に連結されている変数です。定義されるプロシージャが終了する時以外はupvar変数をunsetする方法がありません。別のupvarコマンドを実行することによってupvar変数を新しいターゲットに関連させることは可能です。traceとupvarUpvarは簡単ではあるが予期しない形でトレースと相互に作用する場合があります。変数トレースがotherVar上で定義された場合、そのトレースはmyVarを使うアクションによって実行されます。トレースプロシージャはotherVarの名前よりmyVarの名前を優先的に渡します。次のコードの出力は、originalVarでなく、localVarです。特別な要素上のトレースが実行される)。