Tcl info exists

tcl
11,342
% info level
0
% info exists g_log_file_name
0
% set g_log_file_name whatever
whatever
% info exists g_log_file_name
1

Hence the reason you observe is probably because the variable is really always unset at the time your if command is executed.

Possible reasons for this I can imagine are:

  • It's just not set: literally, no code attempt to do this;
  • The external code sets some other variable: name mismatch;
  • The external code sets a variable in some other interpreter: in a C code embedding Tcl, there can be any number of Tcl interpreters active at any moment (and those are free to create child interpreters as well);

I'm not sure abot the long forgotten version of Tcl you have at hand, but 8.x has the trace command which can be used to log accesses to a particular variable—you could try to use it to see what happens.

Share:
11,342
ilya1725
Author by

ilya1725

C/C++ from 1996 LabVIEW Tcl

Updated on June 24, 2022

Comments

  • ilya1725
    ilya1725 almost 2 years

    I have a curious case of Tcl that perhaps I just don't understand. The following code is done at the top level (not inside of any procedure):

    if {![info exists g_log_file_name]} {
        set g_log_file_name "default.txt"
    }
    

    What I hope it would do is to declare a global variable with some value if it wasn't declared yet (which can be done at some other script or C application). However, the if statement always false. I ran on Tcl 7.4.

    What may be the problem?

    Thank you so much.

  • Donal Fellows
    Donal Fellows about 12 years
    There was variable tracing in 7.4 (it's key machinery for Tk) though it's the old-style syntax. (Command and execution tracing are much later additions.)