ulis: If, for some syntax analyzis, you need to know the level of nested braces inside a list, here is a tiny proc that do that. It returns 0 for "this is a list", 1 for "{this is a list}" or "this {is a} list", and so on. ---- proc listlevel {text} \ { set count 0 set old [llength $text] set new 0 while 1 \ { set text [eval concat $text] set new [llength $text] if {$new != $old} { set old $new; incr count } \ else { break } } return $count } ---- Results: set text "this is a list" puts "$text: [listlevel $text]" -> this is a list: 0 set text {this is a list} puts "$text: [listlevel $text]" -> this is a list: 0 set text [list this is a list] puts "$text: [listlevel $text]" -> this is a list: 0 set text [list "this is a list"] puts "$text: [listlevel $text]" -> {this is a list}: 1 set text {{this is a} list} puts "$text: [listlevel $text]" -> {this is a} list: 1 set text {{this {is a}} list} puts "$text: [listlevel $text]" -> {this {is a}} list: 2 ---- Tcl makes no difference between "this is a list" and [list this is a list] so I gave them the 0 level. You can need to differentiate empty strings, one word strings and multi words strings before nested lists.