Modularization - source
The source
command will load a file
and execute it. This allows a program to be broken up into multiple
files, with each file defining procedures and variables for a
particular area of functionality. For instance, you might have a
file called database.tcl
that contains all the
procedures for dealing with a database, or a file called
gui.tcl
that handles creating a graphical user
interface with Tk. The main script can then simply include each
file using the source
command. More
powerful techniques for program modularization are discussed in the
next lesson on packages.
This command can be used to:
- separate a program into multiple files.
- make a library file that contains all the procs for a particular set of functions.
- configure programs.
- load data files.
source
fileName
- Reads the script in
fileName
and executes it. If the script executes successfully,source
returns the value of the last statement in the script. - If there is an error in the script,
source
will return that error. - If there is a return (other than within a
proc
definition) thensource
will return immediately, without executing the remainder of the script. - If
fileName
starts with a tilde (~
) then$env(HOME)
will substituted for the tilde, as is done in thefile
command.
Example
sourcedata.tcl:
# Example data file to be sourced set scr [info script] proc testproc {} { global scr puts "testproc source file: $scr" } set abc 1 return set aaaa 1
sourcemain.tcl:
set filename "sourcedata.tcl" puts "Global variables visible before sourcing $filename:" puts "[lsort [info globals]]\n" if {[info procs testproc] eq ""} { puts "testproc does not exist. sourcing $filename" source $filename } puts "\nNow executing testproc" testproc puts "Global variables visible after sourcing $filename:" puts "[lsort [info globals]]\n"