[KPV] After having read a criticism of tcl that it doesn't have true pass by reference--you have to fake it with using upvar--I thought I'd write a tcl-only clone of ''proc'' called ''xproc'' that will automatically give you pass by reference ala C++ syntax. Specifically, you say ''proc myproc {arg1 &arg2 arg3 &arg4} {body}'' and arg2 and arg4 will automatically be pass by reference. proc xproc {pname arglist body} { set newarglist {} set ups "" foreach arg $arglist { if {[string match "&*" $arg]} { set arg [string range $arg 1 end] append ups "upvar 1 \$_$arg $arg;" lappend newarglist _$arg } else { lappend newarglist $arg } } set newbody [concat $ups $body] set newproc [list proc $pname $newarglist $newbody] eval $newproc } Here's a sample usage: xproc myproc {&arr} { foreach n [array names arr] { puts "arr($n) => $arr($n)" } } array set myarray {1 one 2 two 3 three} myproc myarray