The code example below demonstrates a couple of helper procs for working with variables and referances. ====== namespace eval helpers { variable cntA 0 variable cntB 0 variable stepSize 1 variable totalCalls 0 proc updateCounters {up dn msg} { references up dn variables stepSize totalCalls puts "--- $msg ---" incr up $stepSize incr dn [expr {-$stepSize}] incr totalCalls } updateCounters cntA cntB "Incrementing A" puts "A = $cntA, B = $cntB, total calls = $totalCalls" updateCounters cntA cntB "Incrementing A" puts "A = $cntA, B = $cntB, total calls = $totalCalls" updateCounters cntB cntA "Incrementing B" puts "A = $cntA, B = $cntB, total calls = $totalCalls" set stepSize 2 updateCounters cntB cntA "Incrementing B" puts "A = $cntA, B = $cntB, total calls = $totalCalls" } ====== ------ The output is as follows: ====== --- Incrementing A --- A = 1, B = -1, total calls = 1 --- Incrementing A --- A = 2, B = -2, total calls = 2 --- Incrementing B --- A = 1, B = -1, total calls = 3 --- Incrementing B --- A = -1, B = 1, total calls = 4 ====== ------ The helper procs are shown below. ====== proc variables {args} { foreach arg $args { uplevel variable $arg } } proc references {args} { foreach arg $args { set otherVar [uplevel [format {set %s} $arg]] uplevel [format { unset %s upvar %s %s } $arg $otherVar $arg] } } ====== <>Enter Category Here