This extends the command '''string''' to accept a new sub-command '''append''': if {[catch {string append}]} then { rename string STRING_ORIGINAL proc string {cmd args} { switch -regexp -- $cmd { ^a(p(p(e(n(d)?)?)?)?)?$ { uplevel [list join $args {}] } default { if {[catch { set result [uplevel [list STRING_ORIGINAL $cmd] $args] } err]} then { return -code error\ [STRING_ORIGINAL map\ [list\ STRING_ORIGINAL string\ ": must be bytelength,"\ ": must be append, bytelength,"]\ $err] } else { set result } } } } } Now test it: % string append ham - and - eggs ham-and-eggs % Now test an "original" sub-command: % string match -nocase ham and 0 % Result is 0 -- indeed, that is true. Now test an erraneous situation: % string match -nocase ham and eggs wrong # args: should be "string match ?-nocase? pattern string" % The error message hides the '''STRING_ORIGINAL''' and shows up '''string''' instead. Another error: % string brumm bad option "brumm": must be append, bytelength, compare, (...) % The error message shows the sub-commands inclusive the newly created append. See also [wrapping commands]. ---- [Lars H], 28 July 2006: Wouldn't '''string concat''' have been a more appropriate name? I know I expected a name involving "concat" for this operation when I was a Tcl beginner (and thus tried some monstrous constructions involving [concat] when I really only wanted to do [[set a "$b$c"]]). See also [cconcat]. [NEM]: Yes, '''string concat''' would be better. The -append commands also usually operate on a ''variable'' rather than simply concatenating arguments (e.g. [lappend], [append], and the [dict] variants). Indeed, what is being appended to in this case? Also, what is the [uplevel] for? Just [[join $args {}]] would do it. [wdb] My idea was based on the Scheme function ''(string-append str1 str2 ...)''. As a native German speaker, I was more comfortable with the word ''append'' than with ''concatenate'' ... but, if everybody agrees, I'll be happy to change the name of the sub-cmd from '''string append''' to [string concat}. I'm more interested in what it does than how it is named. ---- [[ Category ? ]]