Posted to tcl by aspect at Thu Jul 10 14:45:31 GMT 2014view pretty

proc withArray {name args} {
    upvar 1 $name a
    set script [lmap name [array names a] {
        list upvar 1 a($name) $name
    }]
    set script [join $script \n]
    append script \n[concat {*}$args]    ;# mostly I do this out of superstition
    apply [list {} $script]
}

proc test {} {
    set a(bar) 3
    set a(baz) 10
    withArray a {
        set foo [expr {$bar+$baz}]
        incr baz                                                                                                                                                                                                    
    }   
    parray a
}   

test

#a(bar) = 3
#a(baz) = 11
#a(foo) = 13