I had a file intended to be sourced as well as evalled - that is, it was an executable file but could also be sourced into a running tcl program. Problem: "source" does not take args. So it was impossible to use the same argument parsing system for both modes. Or is it?
proc srcfile { filename args } { global argv set argv $args source $filename }
This proc will, of course, mung your argument vector, so make sure you have parsed it before "srcfile" is used.
NEM: Or you could save and restore it:
proc srcfile-safe {filename args} { global argv set save $argv set argv $args set rc [catch {source $filename} ret] set argv $save return -code $rc $ret }
MGS [2010-05-14]: Note: the above code should really use uplevel to source the file into the calling namespace, and also set the argc variable for completeness.
See also: