Kurz: Tcl (Tool Command Language, 1988, John Ousterhout) ist eine kleine, einbettbare Skriptsprache mit extrem einfacher Syntax: Alles ist ein Befehl, und alles ist ein String.
Teil des Kurses Tcl
Was ist Tcl?
Tcl (Tool Command Language, 1988, John Ousterhout) ist eine kleine, einbettbare Skriptsprache mit extrem einfacher Syntax: Alles ist ein Befehl, und alles ist ein String. Ein Programm ist eine Folge von Befehlen der Form befehl arg1 arg2 .... Es gibt nur wenige Regeln (die zwölf Regeln der Dodekalogie), dafür sind sie überall gleich.
Tcl wird in der Chip-Entwicklung (EDA-Werkzeuge), für Netzwerk- und Testautomatisierung (Expect), in Datenbanken (SQLite stammt von Tcl-Autor D. Richard Hipp) und für grafische Oberflächen mit Tk eingesetzt – Tk wird auch von Python (tkinter) und Perl verwendet.
Ausführen
tclsh hallo.tcl # Skript ausführen
tclsh # interaktive Konsole (%-Eingabeaufforderung)
wish gui.tcl # Skript mit Tk-OberflächeDas erste Programm
puts "Hallo, Welt!"
set name "Mia"
puts "Hallo, $name!"
puts "1 + 2 = [expr {1 + 2}]"
puts -nonewline "ohne Zeilenumbruch"
puts ""
puts stdout "auf stdout"Ausgabe:
Hallo, Welt!
Hallo, Mia!
1 + 2 = 3
ohne Zeilenumbruch
auf stdoutset setzt Variablen, $name liest sie, [...] führt einen Befehl aus und setzt das Ergebnis ein (Befehlssubstitution), expr rechnet.
Die drei Anführungsarten
Das ist der Schlüssel zu Tcl:
| Schreibweise | Wirkung |
|---|---|
"text $x [cmd]" | Substitution von Variablen und Befehlen |
{text $x [cmd]} | keine Substitution (wörtlicher Text) |
[cmd args] | Befehl ausführen und Ergebnis einsetzen |
set x 5
puts "Doppelt: $x und [expr {$x * 2}]"
puts {Geschweift: $x und [expr {$x * 2}]}
puts "Maskiert: \$x und \[kein Befehl\]"
puts "Tab:\tZeilenumbruch folgt\nZweite Zeile"
set text "a b c"
puts [llength $text]
puts "Unicode: äöü € ä"Ausgabe:
Doppelt: 5 und 10
Geschweift: $x und [expr {$x * 2}]
Maskiert: $x und [kein Befehl]
Tab: Zeilenumbruch folgt
Zweite Zeile
3
Unicode: äöü € äRechnen mit expr
Rechnen geschieht mit expr. Setze den Ausdruck in geschweifte Klammern – das ist schneller und sicherer:
puts [expr {7 + 2}]
puts [expr {7 / 2}]
puts [expr {7 / 2.0}]
puts [expr {7 % 3}]
puts [expr {2 ** 10}]
puts [expr {sqrt(16)}]
puts [expr {abs(-5)}]
puts [expr {max(3, 9, 4)}]
puts [expr {round(3.5)}]
puts [expr {int(3.99)}]
puts [expr {10 > 5 && 3 < 4}]
puts [expr {"abc" eq "abc"}]
puts [expr {5 == 5.0}]
puts [expr {2 ** 100}]
puts [format "%.3f" [expr {atan(1) * 4}]]
set a 4
incr a
incr a 10
puts $aAusgabe:
9
3
3.5
1
1024
4.0
5
9
4
3
1
1
1
1267650600228229401496703205376
3.142
15Achtung
Ohne Klammern wertet Tcl den Ausdruck doppelt aus (
expr $a + $bstattexpr {$a + $b}) – langsamer und anfällig für Fehler. Ganzzahldivision7 / 2ergibt3, nicht3.5.
Merke
- Ein Tcl-Programm ist eine Folge von Befehlen:
befehl arg1 arg2 setsetzt Variablen,$xliest,[befehl]setzt das Ergebnis ein"..."substituiert,{...}nicht;expr {...}rechnet- Alles ist ein String; Zahlen werden bei Bedarf als Zahlen interpretiert
Übungsaufgabe
Berechne die Hypotenuse eines Dreiecks mit den Katheten 3 und 4 mit expr.
Quiz zur Selbstkontrolle
Was bewirkt {...} in Tcl?
- Verhindert Substitutionen: der Text bleibt wörtlich (richtig)
- Erzeugt ein Array
- Beginnt eine Funktion
- Startet einen Befehl
Wie führt man einen Befehl aus und setzt sein Ergebnis ein?
- [befehl] (richtig)
- (befehl)
- $befehl
- {befehl}
Was ergibt expr {7 / 2}?
- 3 (richtig)
- 3.5
- 4
- Einen Fehler
Weiter im Kurs
Weiter: Kontrollfluss und Prozeduren
Alle Kapitel: Tcl im Überblick