if {0} { Martin Lemburg here some procedures ...
... a variable in the current or any parent namespace: }
proc getFullNspcVarName {args} { switch -exact -- [llength $args] { 1 { set nspc [uplevel namespace current]; set varname [lindex $args 0]; } 2 { foreach {nspc varname} $args {break;} if {[catch {namespace parent $nspc}]} { error "no such namespace \"$nspc\""; } } default { error "wrong # args: should be \"getFullNspcVarName ?namespace? varname\""; } } while {![info exists ${nspc}::$varname]} { if {$nspc == "::"} { return ""; } set nspc [namespace parent $nspc]; } return ${nspc}::$varname; }
(See also namespace which.)
proc varExistsInNspc {args} { if {[catch {set result [uplevel getFullNspcVarName $args]} reason]} { error $reason; } if {$result == ""} { return 0; } return 1; } proc nspcVar2LocalVar {args} { if {[catch {set result [uplevel getFullNspcVarName $args]} reason]} { error $reason; } if {$result == ""} { return 0; } set varname [namespace tail $result]; if {[uplevel info exists $varname]} { error "namespace var \"$result\" already exists"; } uplevel upvar $result $varname; return 1; } # demo and test: