ZetCode

Tcl auto_load Command

last modified April 3, 2025

The Tcl auto_load command is part of Tcl's auto-loading mechanism. It automatically loads Tcl procedures when they are first called. This provides on-demand package loading.

Basic Definition

The auto_load command checks if a command exists and attempts to load it if not found. It uses an index of available commands to locate and load the required package.

Syntax: auto_load cmdName. The command returns 1 if it attempts to load the command, 0 otherwise. It doesn't guarantee the command will be available.

Basic auto_load Usage

This example shows the simplest usage of auto_load to attempt loading a command.

basic_auto_load.tcl
if {[auto_load some_command]} {
    puts "Attempted to load some_command"
} else {
    puts "some_command not found in auto_load index"
}

This checks if some_command can be loaded automatically. The auto_load command returns 1 if it finds and loads the command.

Checking Command Existence

Combine auto_load with info commands to verify if a command was successfully loaded.

auto_load_check.tcl
set cmdName "my_proc"
auto_load $cmdName
if {[info commands $cmdName] ne ""} {
    puts "$cmdName is now available"
} else {
    puts "Failed to load $cmdName"
}

This attempts to load my_proc and checks if it exists afterward. The info commands verifies the command's availability.

Loading Standard Library Commands

Many Tcl standard library commands use auto-loading. This example demonstrates loading the file command.

auto_load_stdlib.tcl
if {![info commands file]} {
    auto_load file
    puts "Attempted to load file command"
}
file exists /tmp

This checks if the file command exists, attempts to load it if not, then uses it. Most Tcl installations have core commands pre-loaded.

Working with Custom Packages

For custom packages, you need to set up the auto_path and create proper package index files.

auto_load_custom.tcl
lappend auto_path [file join $env(HOME) my_tcl_libs]
if {[auto_load my_custom_proc]} {
    my_custom_proc
} else {
    puts "Could not load my_custom_proc"
}

This adds a custom library directory to auto_path then attempts to load a procedure from it. The procedure must be properly indexed in a tclIndex file.

Auto Loading with Namespaces

auto_load works with namespaced commands too. This example shows how to load a namespaced command.

auto_load_namespace.tcl
if {[auto_load ::mylib::myfunc]} {
    puts "Loaded ::mylib::myfunc"
    ::mylib::myfunc
}

This attempts to load a command from the mylib namespace. The package must be properly set up with namespace declarations in its index.

Debugging Auto Loading

Use auto_qualify and auto_load_index to debug auto-loading issues.

auto_load_debug.tcl
set cmd "my_command"
set qualified [auto_qualify $cmd ""]
puts "Looking for: $qualified"
parray auto_index

This shows how to check what commands are available for auto-loading. The auto_qualify helps understand how Tcl will look for the command.

Best Practices

This tutorial covered the Tcl auto_load command with practical examples showing its usage in different scenarios.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Tcl Tutorials.