Documentation
Basics
~ $ tclsh
% set a 2
2
% expr 1 + 2
3
% puts $a
2
% set c [expr $a + 1] # result of cmd in [ ] is substituted
3
% set d "$a $c" # var $a and $c is substituted
2 3
% set e {$a $c} # var $a and $c is not substituted.
$a $c
% set x y
y
% set $x 0
0
% puts $y
0
% while {$c > 1} {set c [expr $c - 1]; puts $c}
2
1
%
Note that
set c 3; while "$c > 1" {set c [expr $c - 1]; puts $c}
is the same as
set c 3; while "3 > 1" {set c [expr $c - 1]; puts $c}
List
% set x {a b c d}
a b c d
% set y "a b c d"
a b c d
% llength $x
4
% lindex $x 2
c
% lappend x e
a b c d e
% puts $x
a b c d e
% set x "$x f"
a b c d e f
% foreach i $x {
puts $i
}
a
b
c
d
e
f
% foreach {i j} $x {
puts "$i $j"
}
a b
c d
e f
Array/Hash
~ $ tclsh
% set a(2) 4
4
% set a(1) 2
2
% set a(1000) 2000
2000
% set b(ftp) 21
21
% set b(http) 80
80
% set b(ssh) 22
22
% set a(zero) 0
0
% array name b
http ssh ftp
% array name *p
% array get b
http 80 ssh 22 ftp 21
% foreach {key value} [array get b] {
puts "$key uses port $value"
}
http uses port 80
ssh uses port 22
ftp uses port 21
Control Structure
% while {$c > 1} {set c [expr $c - 1]; puts $c}
2
1
% for {set x 0} {$x < 10} {incr x} {
puts $x
}
0
1
2
3
4
5
6
7
8
9
% set x 10
10
% incr x 2
12
% incr x -3
9
% incr x 0.3
expected integer but got "0.3"
% if {$x > 0} {puts "postive"} elseif {$x < 0} {puts "negative"} else {puts "zero"}
postive
%
%
%
% proc factorial {n} {
set product 1
for {set i 1} {$i <= $n} {incr i} {
set product [expr $product*$i]
}
return $product
}
% factorial 3
6
% factorial 0
1
%
%
% proc callonetime {x} {
puts $x
proc callonetime {x} {
puts "you can only call this proc once!"
}
}
% callonetime 10
10
% callonetime 10
you can only call this proc once!
%
Global Variable
% global x
% set x 1
1
% proc foo {} {
global x
puts $x
}
% foo
1
%
Regexp
set VAR "This is a test string"
if {[regexp -nocase [subst -nocommands -nobackslashes {something here:[\s\w]+:$VAR}]} then {
...
}