Passing list to Tcl procedure

arguments, list, tcl

Solution

It depends on the version of Tcl you're using, but: For 8.5:

set mylist {a b c}
myprocedure option1 option2 {*}$mylist

For 8.4 and below:

set mylist {a b c}
eval myprocedure option1 option2 $mylist
# or, if option1 and 2 are variables
eval myprocedure [list $option1] [list $option2] $mylist
# or, as Bryan prefers
eval myprocedure \$option1 \$option2 $mylist

Problem

What is the canonical way to pass a list to a Tcl procedure? I'd really like it if I could get it so that a list is automatically expanded into a variable number of arguments. So that something like: ``` set a {b c} myprocedure option1 option2 $a ``` and ``` myprocedure option1 option2 b c ``` are equivalent. I am sure I saw this before, but I can't find it anywhere online. Any help (and code) to make both cases equivalent would be appreciated. Is this considered a standard Tcl convention. Or am I even barking up the wrong tree?

Original source