NAME
       switch  -  Evaluate one of several scripts, depending on a
       given value

SYNOPSIS
       switch ?options? string pattern body ?pattern body ...?

       switch ?options? string {pattern body ?pattern body ...?}


DESCRIPTION
       The switch command matches  its  string  argument  against
       each  of  the  pattern  arguments in order.  As soon as it
       finds a pattern that matches string it evaluates the  fol-
       lowing  body argument by passing it recursively to the Tcl
       interpreter and returns the result of that evaluation.  If
       the  last pattern argument is default then it matches any-
       thing.  If no  pattern  argument  matches  string  and  no
       default is given, then the switch command returns an empty
       string.

       If the initial arguments to switch start with - then  they
       are  treated  as  options.  The following options are cur-
       rently supported:

       -exact    Use exact matching when comparing  string  to  a
                 pattern.  This is the default.

       -glob     When  matching string to the patterns, use glob-
                 style matching (i.e. the same as implemented  by
                 the string match command).

       -regexp   When  matching string to the patterns, use regu-
                 lar expression matching  (as  described  in  the
                 re_syntax reference page).

       --        Marks  the end of options.  The argument follow-
                 ing this one will be treated as string  even  if
                 it starts with a -.

       Two  syntaxes  are provided for the pattern and body argu-
       ments.  The first uses a separate argument for each of the
       patterns  and commands; this form is convenient if substi-
       tutions are desired on some of the patterns  or  commands.
       The  second  form  places all of the patterns and commands
       together into a single argument; the  argument  must  have
       proper list structure, with the elements of the list being
       the patterns and commands.  The second form makes it  easy
       to  construct multi-line switch commands, since the braces
       around the whole list make it  unnecessary  to  include  a
       backslash  at  the  end  of  each line.  Since the pattern
       arguments are in braces in the second form, no command  or
       variable  substitutions are performed on them;  this makes
       the behavior of the second form different than  the  first
       form in some cases.

       If a body is specified as ``-'' it means that the body for
       the next pattern should also be used as the body for  this
       pattern (if the next pattern also has a body of ``-'' then
       the body after that is used, and  so  on).   This  feature
       makes  it  possible  to  share a single body among several
       patterns.

       Beware of how you place comments in switch commands.  Com-
       ments  should  only be placed inside the execution body of
       one of the patterns, and not intermingled  with  the  pat-
       terns.

       Below are some examples of switch commands:
              switch abc a - b {format 1} abc {format 2} default {format 3}
       will return 2,
              switch -regexp aaab {
                ^a.*b$ -
                b {format 1}
                a* {format 2}
                default {format 3}
              }
       will return 1, and
              switch xyz {
                a
                   -
                b
                   {
                   # Correct Comment Placement
                   format 1
                }
                a*
                   {format 2}
                default
                   {format 3}
              }
       will return 3.


SEE ALSO
       for(n), if(n), regexp(n)


KEYWORDS
       switch, match, regular expression
