proc ?append {v_name args} {
  upvar 1 $v_name v
  if {![info exists v]} {
    error "can't read \"$v_name\": no such variable"
  append v [join $args ""]
} ;# GPS

DKF: I've updated the code above to match the calling convention for append

MC: I've updated the code to return the value of $val and to give the same error message if you try to append to the name of an array, like append does :-)

AMG: Simplified.

See also ?set, ?lappend, ?incr