Tcl/Tk Substitutionsmechanismen

Vor der Ausführung von Tcl-Skripten werden vom Parser Substitutionen vorgenommen, d.h. bestimmte Textsequenzen eines Skriptes werden durch andere ersetzt. Hierfür gibt es drei verschiedene Arten.

1. Um Variableninhalte zu referenzieren, muss man dem Variablennamen ein Dollar-Zeichen voranstellen. Diese Art der Substitution heißt Variablensubstitution. Der Varieblenname und das Dollar-Zeichen werden in diesem Fall mit dem Variableninhalt ersetzt, wobei es sich natürlich auch wieder um ein Tcl-Skript handeln kann.

2. Bei der Befehlssubstitution ist es möglich, ein in eckige Klammern eingeschlossenes Tcl-Skript durch sein Ergebnis zu ersetzen.

set y [expr 3*$hoehe]

Zunächst wird das in den eckigen Klammern eingeschlossene Skript ausgewertet und durch sein Ergebnis ersetzt. Erst dann folgt die Ausführung des set-Befehls.

3. Um spezielle Zeichen wie z.B. das Dollar-Zeichen, die eckige Klammer usw. darstellen zu können, braucht man die Backslashsubstitution.

set text Der\ Preis\ beträgt\ \$1.

Die Leerzeichen werden durch die Backslashsubstitution nicht mehr als Trennzeichen zwischen zwei Argumenten interpretiert und das Dollar-Zeichen führt nicht mehr zur Referenzierung einer Variable mit dem Namen “1″. Der Inhalt von text ist also tatsächlich: “Der Preis beträgt $1.”.

In bestimmten Situationen ist es aber notwendig, die Substitution von gesamten Tcl-Skripten zu verhindern. Möchte man z.B. in Tk einen Button erzeugen, der bei seiner Betätigung den Inhalt der Variablen a ausgibt, sieht das Skript für die Ausgabe z.B. so aus:

puts “a hat den Wert: $a”

Die Anführungszeichen sorgen lediglich dafür, dass der Text als ein einziger String angesehen wird. Dieses Skript muss nun als Argument bei der Erzeugung des Buttons übergeben werden und zwar eingeschlossen in geschweifte Klammern.

button .b -text “Inhalt von a” -command {puts “a hat den Wert: $a”}

Der Parser würde ohne die geschweiften Klammern die Sequenz $a durch den Inhalt der Variablen a ersetzen. Bei jeder Betätigung des Buttons würde dann aber immer der Wert ausgegeben, den die Variable bei der Erzeugung des Buttons hatte. Die geschweiften Klammern verhindern also die Substitution und der Parser gibt den enthaltenen String so weiter, wie er ihn vorfindet.