Several [Tcl] commands, including [expect] and [switch], take a '--'. [RS] calls this, "the switch to end all switches". Here's why: What is the difference between switch $variable {... and switch -- $variable {... ? None--mostly; if, however, $variable contains a string such as "-glob", then the first form will be interpreted as switch -glob {... Do you see the problem? Do you see how your datum might be interpreted as a command "switch"? In casual English words, the '--' says, "treat everything that follows like data, '''not''' as a 'switch' or 'flag' ..." Alas, not every tcl command which takes a switch/flag recognizes -- as a valid entry. This means that the casual tcl programmer needs to check regularly to see if the command being coded accepts the -- or not. It surely would be nice if all tcl commands which take a -argument also accepted -- ... [MG] Not all commands need them. For instance, [lsearch] takes -args, but its last two arguments are always the list and the value to find, so any other arguments are always switches. It's only really in things like [switch], [regexp], etc, which can take both a variable number of -arg switches and a variable number of string arguments, where the -- switch is ''needed'' to tell where -args end off and 'normal' args begin. (Not that it would hurt if -- was available for the others too, but I think that's why it's not currently.) [AMG]: This form of [switch] is an example of a command that doesn't need -- [http://www.tcl.tk/man/tcl8.6/TclCmd/switch.htm#M11]. Since it (presumably) contains all match patterns and bodies grouped in a single word, switch knows that the second-to-last word is the match string and not an option. Also, let's call them options and not switches, to avoid confusing them with the [[switch]] command. ;^) So, what's a valid example of a place where -- is needed? The alternate form of [[switch]] is one: ====== switch $variable\ pattern1 {body1}\ pattern2 {body2}\ pattern3 {body3} ====== Another is [[[regexp]]]: ====== regexp -- {-[a-z]+} $argument ====== Although I omit the -- option to regexp if I can guarantee the regular expression does not begin with a minus sign. Others? It would be nice to have a more-or-less complete list. [AMG]: In general, -- is needed when a command takes any number of option arguments followed by any number of non-option arguments. When the number of non-option arguments is fixed (e.g. always one) or is a function of the option arguments, -- isn't needed to distinguish between options and non-options. <> Syntax