namespace qualifiers is the complement (almost - see below) of namespace tail. It returns the leading namespace qualifiers for string, or, when string is ::, the empty string. Qualifiers are namespace names separated by ::. The operation of namespace qualifiers is purely lexical. It does not check whether the namespace names exist.
The value of
namespace qualifiers ::foo::bar::x
is
::foo::bar
Namespace qualifiers is inconsistent when applied to names in the root namespace:
% namespace qualifiers ::foo::bar ::foo % namespace qualifiers foo::bar foo % namespace qualifiers foo % namespace qualifiers ::foo
This makes it a bit tricky to use correctly. Using ensemble extend it's not hard to write a more ergonomic version:
extend namespace {
proc join {prefix name} {
if {[string match ::* $name]} {
return $name
}
if {$prefix eq "::"} {
return ::$name
}
return ${prefix}::$name
}
proc prefix {name} {
string range $name 0 end-[string length [namespace tail $name]]
}
}With these two procs, $x is always equal to:
namespace join [
namespace prefix $x
] [
namespace tail $x
]