Updated 2012-07-21 03:21:50 by RLE

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: