Misusing ensemble mechanisms to parse options of a command. '''globby''' has the same syntax as [glob]. proc globby {args} { array set Opt {complain 1 tails 0} set patterns [namespace eval globby_parse [list globby] $args] # Do actual operation... list [array get Opt] $patterns } namespace eval globby_parse { namespace export -* proc -directory {directory args} { upvar 2 Opt Opt set Opt(dir) $directory uplevel 1 [list globby {*}$args] } proc -join {args} { list [join $args [file separator]] } proc -nocomplain {args} { upvar 2 Opt Opt set Opt(complain) 0 uplevel 1 [list globby {*}$args] } proc -path {pathPrefix args} { upvar 2 Opt Opt set Opt(path) $pathPrefix uplevel 1 [list globby {*}$args] } proc -tails {args} { upvar 2 Opt Opt set Opt(tails) 1 uplevel 1 [list globby {*}$args] } proc -types {D typeList args} { upvar 2 Opt Opt set Opt(types) $typeList uplevel 1 [list globby {*}$args] } proc -- {args} {return $args} proc unknown {cmd opt args} { if {[string match -* $opt]} then { return -code error\ "bad option \"$opt\": must be -directory, -join,\ -nocomplain, -path, -tails, -types, or --" } else { list [namespace which --] $opt } } namespace ensemble create -command [namespace current]::globby\ -unknown [namespace which unknown] } ---- [DKF]: It would be interesting to see how this changes when using `[tcl::unsupported]::[tailcall]` instead of `[uplevel] 1`. ---- !!!!!! %| [Category Argument Processing] |% !!!!!!