Tcl ci mette a disposizione diversi comandi per l’introspezione: ovvero per conoscere cosa sta accadendo nel nostro programma, per esempio quali variabili sono valorizzate e quali procedure sono implementate.
In questo articolo discuteremo del comando info e di alcuni dei suoi sottocomandi che ci permettono di ottenere tutta una serie di informazioni dal nostro Interprete Tcl.
Ottenere una lista dei comandi disponibili
# sintassi
info commands ?pattern?
Restituisce una lista contenente sia i comandi interni che le procedure, filtrati attraverso ?pattern?.
# esempio
info commands l*
---
list lassign lrange lsearch lappend llength linsert lreplace lreverse lmap lset lrepeat load lindex lsort
Verificare l’esistenza di una variabile
# sintassi
info exists varName
Restituisce 1 se la variabile, o un elemento di un array associativo, esiste nel contesto corrente, altrimenti 0 (zero).
# esempio
set var1 4
puts "Does the variable var1 exist?"
if {[info exists var1]} {
puts "Yes, it does."
} else {
puts "No, it doesn't exist."
}
puts "\nDoes the variable var2 exist?"
if {[info exists var2]} {
puts "Yes, it does."
} else {
puts "No, it doesn't exist."
}
---
Does the variable var1 exist?
Yes, it does.
Does the variable var2 exist?
No, it doesn't exist.
Ottenere una lista delle funzioni matematiche disponibili
# sintassi
info functions ?pattern?
Restituisce una lista delle funzioni matematiche filtrate attraverso ?pattern?.
# esempio
info functions f*
---
tanh tan
Ottenere una lista delle variabili globali
# sintassi
info globals ?pattern?
Restituisce una lista delle variabili globali filtrate attraverso ?pattern?.
# esempio
info globals a*
---
argv0 argv auto_path auto_index argc
Ottenere una lista delle variabili locali
# sintassi
info locals ?pattern?
Restituisce una lista delle variabili locali filtrate attraverso ?pattern?.
# esempio
proc addressBook {} {
set name Mario
set age 38
set country Italy
set city Rome
set Color red
puts "Local variables list with \"c\": [info locals c*]"
}
addressBook
---
Local variables list with "c": country city
Ottenere una lista delle procedure locali
# sintassi
info procs ?pattern?
Restituisce una lista delle procedure Tcl filtrate attraverso ?pattern?.
# esempio
proc myProc {} {
puts "List of procedures:\n"
foreach elm [info procs] {puts \t$elm}
}
myProc
---
List of procedures:
auto_load_index
unknown
auto_import
auto_execok
auto_qualify
auto_load
myProc
tclLog
Ottenere una lista delle variabili locali e globali
# sintassi
info vars ?pattern?
Restituisce una lista delle variabili locali e globali filtrate attraverso ?pattern?.
# esempio
set localVar 10
foreach elm [info vars] {puts $elm}
---
tcl_rcFileName
tcl_version
argv0
argv
tcl_interactive
localVar
auto_path
env
tcl_pkgPath
tcl_patchLevel
argc
tcl_library
tcl_platform
Nel prossimo articolo vedremo come ottenere informazioni dall’Interprete Tcl e sul processo in corso.