Tcl/Tk Normale Variablen

Eine Besonderheit von Tcl besteht in der Verarbeitung von Variablen. Es gibt nämlich nur einen einzigen Typ und zwar den Typ String. Die Variablen werden mit dem Kommando set implizit deklariert. Die Eingabe

set a 20

legt die Variable a mit dem String 20 als Inhalt an. Bei einem nachfolgendem Kommando, wie z.B.

expr 2+$a

ist es allerdings erforderlich, dass der String in a einen Zahlenwert repräsentiert.

Bei der Wahl von Variablennamen gibt es keine Beschränkungen. Er kann Zahlen, Sonderzeichen und sogar das Leerzeichen enthalten. Man könnte also mit der Eingabe von

set 2,3 zahl

die Variable des Namens 2,3 mit dem String zahl als Inhalt anlegen.
Listen

Listen stellen eine besondere Form von Variablen dar. Werden mehrere Elemente, getrennt durch Leer- oder Tabulatorzeichen, in einer Variablen abgelegt, so handelt es sich um eine Liste. Sie lassen sich ebenfalls mit dem Befehl set anlegen.

set liste {rot grün blau gelb pink}

Der Code erzeugt eine Liste mit fünf Elementen. Der Vorteil von Listen besteht darin, dass eine Reihe von Befehlen zu deren Bearbeitung existieren, z.B. um Elemente zu extrahieren, zu suchen, sortieren usw.
Arrays

Variablen können aber auch in Form von Arrays angelegt werden. Die Syntax hierfür ist dann varName(elementName). Für die Form des Elementnamens gibt es keine Beschränkungen, es können beliebige Strings eingesetzt werden. Prinzipiell ist es nur möglich eindimensionale Arrays zu erzeugen, allerdings kann man den Elementnamen so definieren, dass mehrdimensionale Arrays simuliert werden.

set array(1,1) 12
set array($k,$l) $wert

Das Array erscheint durch die Verwendung des Kommas zweidimensional. Für Tcl ist aber z.B. die Angabe “1,1″ ein einzelner, normaler Index.
Variablenkontexte

Jedes Tcl-Skript wird in einem bestimmten Variablenkontext ausgeführt. Bei jedem Aufruf einer Prozedur wird für sie ein neuer Kontext angelegt, der im Prozedurenstack verwaltet wird. Auf unterster Ebene befindet sich der globale Kontext. Werden Prozeduren verschachtelt aufgerufen, so entsteht eine Kontexthierarchie. Innerhalb einer Prozedur sind nur die dort erzeugten oder die durch formale Parameter übergebenen Variablen sichtbar. Mit den Befehlen global und upvar besteht aber die Möglichkeit eine Verbindung zu Variablenkontexten anderer Ebenen zu schaffen.