Posted to tcl by patthoyts at Sat Dec 09 19:18:56 GMT 2006view pretty

proc InitNickState {nick level somethingelse} {
  variable uid
  set State [namespace current]::nick[incr uid]
  upvar #0 $State state
  set state(nick) $nick
  set state(level) $level
  set state(somethingelse) $somethingelse
  return $State
}

Then to use it:

proc CheckLevel {nick} {
   foreach State [info vars [namespace current]::nick*] {
        if {[set [set $State](nick)] eq $nick} {
        return [set [set $State](level)]
  }
  return -code error "nick not found"
}

or if you keep the State array id you can use
 proc Level {State) {
   upvar #0 $State state
   return $state(nick)
}