Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
76 views

An Introduction To TCL Scripting: John Ousterhout Sun Microsystems Laboratories

This document provides an overview of Tcl scripting. It discusses Tcl syntax and substitution rules, built-in commands, basics of Tcl scripts and commands, variable and command substitution, expressions, lists, control structures like if/for/while, procedures, error handling, and additional Tcl features like file I/O, associative arrays, and accessing Tcl internals. It emphasizes that Tcl commands return string results and control structures are implemented as commands rather than language syntax.

Uploaded by

soma vardhan
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
76 views

An Introduction To TCL Scripting: John Ousterhout Sun Microsystems Laboratories

This document provides an overview of Tcl scripting. It discusses Tcl syntax and substitution rules, built-in commands, basics of Tcl scripts and commands, variable and command substitution, expressions, lists, control structures like if/for/while, procedures, error handling, and additional Tcl features like file I/O, associative arrays, and accessing Tcl internals. It emphasizes that Tcl commands return string results and control structures are implemented as commands rather than language syntax.

Uploaded by

soma vardhan
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 21

An Introduction To Tcl Scripting

John Ousterhout
Sun Microsystems Laboratories
john.ousterhout@eng.sun.com

Tcl/Tk Tutorial, Part II


Language Overview

Two parts to learning Tcl:

1. Syntax and substitution rules:


•Substitutions simple, but may be confusing at first.

2. Built-in commands:
•Can learn individually as needed.
•Control structures are commands, not language syntax.

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 2
Basics

◆Tcl script =
•Sequence of commands.
•Commands separated by newlines, semi-colons.
◆Tcl command =
•One or more words separated by white space.
•First word is command name, others are arguments.
•Returns string result.
◆Examples:
–set a 22; set b 33
–set a 22
set b 33

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 3
Division Of Responsibility

Command
◆Chops commands into words.
Tcl Parser ◆Makes substitutions.
◆Does not interpret values of words.

Words

◆Interpretswords.
Command Procedure ◆Produces string result.

Result
Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 4
Arguments

◆Parser assigns no meaning to arguments (quoting by


default, evaluation is special):
C: x = 4; y = x+10
y is 14
Tcl: set x 4; set y x+10
y is "x+10"
◆Different commands assign different meanings to their
arguments:
set a 122
expr 24/3.2
eval "set a 122"
button .b -text Hello -fg red
string length Abracadabra

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 5
Variable Substitution

◆Syntax: $varName
◆Variable name is letters, digits, underscores.
◆May occur anywhere in a word.
Sample command
Result
set b 66 66
set a b b
set a $b 66
set a $b+$b+$b
66+66+66
set a $b.3 66.3
set a $b4 no such
variable
Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 6
Command Substitution

◆Syntax: [script]
◆Evaluate script, substitute result.
◆May occur anywhere within a word.

Sample
command Result
set b 8 8
set a [expr
$b+2] 10
set a "b-3 is
[expr $b-3]" b-3 is 5
Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 7
Controlling Word Structure

◆Words break at white space and semi-colons, except:


•Double-quotes prevent breaks:
set a "x is $x; y is $y"
•Curly braces prevent breaks and substitutions:
set a {[expr $b*$c]}
•Backslashes quote special characters:
set a word\ with\ \$\ and\ space
◆Substitutions don't change word structure:
set a "two words"
set b $a

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 8
Expressions

◆C-like(int and double), extra support for string operations.


◆Command, variable substitution occurs within expressions.
◆Used in expr, other commands.
Sample command Result
set b 5 5
expr ($b*4) - 3 17
expr $b <= 2 0
expr $a * cos(2*$b) -
5.03443
expr {$b * [fac 4]} 120
set a BillBill
expr {$a < "Anne"} 0

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 9
Lists

◆Zero or more elements separated by white space:


red green blue
◆Braces and backslashes for grouping:
a b {c d e} f
one\ word two three
◆List-related commands:
concat lindex llength lsearch
foreach linsert lrange lsort
lappend list lreplace
◆Examples:
lindex {a b {c d e} f} 2 ➭cde
lsort {red green blue} ➭ blue green red

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 10
Control Structures

◆C-like appearance.
◆Just commands that take Tcl scripts as arguments.
◆Example: list reversal.
set b ""
set i [expr [llength $a] - 1]
while {$i >= 0} {
lappend b [lindex $a $i]
incr i -1
}
◆Commands:
if for switch break
foreach while eval continue

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 11
Procedures

◆proc command defines a procedure:


proc sub1 x {expr $x-1}
name body
list of argument names
◆Procedures behave just like built-in commands:
sub1 3 ➭2
◆Arguments can have defaults:
proc decr {x {y 1}} {
expr $x-$y
}
◆Scoping: local and global variables.

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 12
Procedures, cont'd

◆Variable-length argument lists:


proc sum args {
set s 0
foreach i $args {
incr s $i
}
return $s
}

sum 1 2 3 4 5
➭ 15
sum
➭0

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 13
Errors

◆Errors normally abort commands in progress,


application displays error message:
set n 0
foreach i {1 2 3 4 5} {
set n [expr {$n + i*i}]
}
➭ syntax error in expression "$n + i*i"
◆Global variable errorInfo provides stack trace:
set errorInfo
➭ syntax error in expression "$n + i*i"
while executing
"expr {$n + i*i}"
invoked from within
"set n [expr {$n + i*i}]..."
("foreach" body line 2)
...

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 14
Advanced Error Handling

◆Can intercept errors:


catch {expr {2 +}} msg
➭1
set msg
➭ syntax error in expression "2 +"
◆Can generate errors:
error "bad argument"
◆Global variable errorCode holds machine-readable
information about errors (e.g. UNIX errno value).

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 15
Additional Tcl Features:

◆String manipulation commands:


regexp format split string
regsub scan join
◆File I/O commands:
open gets seek flush glob
close read tell cd
puts source eof pwd
◆Subprocesses with exec command:
exec grep foo << $input | wc

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 16
Additional Tcl Features, cont'd

◆Associative arrays:
set x(fred) 44
set x(2) [expr $x(fred) + 6]
array names x
➭ fred 2
◆Variable scoping:
global uplevel upvar
◆Access to Tcl internals:
info rename trace

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 17
Additional Tcl Features, cont'd

◆Autoloading:
–unknown procedure invoked when command doesn't
exist.
•Loads procedures on demand from libraries.
•Uses search path of directories.
◆Coming soon (Tcl 7.5):
•Dynamic loading of binaries: load command.
•Security: Safe-Tcl.
•Event-driven I/O.
•Socket support.

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 18
More On Substitutions

◆Keep substitutions simple: use commands like format for


complex arguments.
◆Use eval for another level of expansion:
exec rm *.o
➭ *.o: No such file or directory
glob *.o
➭ a.o b.o
exec rm [glob *.o]
➭ a.o b.o: No such file or directory
eval exec rm [glob *.o]

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 19
Commands And Lists: Quoting Hell

◆Listsparse cleanly as commands: each element becomes


one word.
◆To create commands safely, use list commands:
button .b -text Reset -command {set x $initValue}
(initValue read when button invoked)
... -command "set x $initValue"
(fails if initValue is "New York": command is
"set x New York")
... -command "set x {$initValue}"
(fails if initValue is "{": command is "set x {{}")
... -command [list set x $initValue]
(always works: if initValue is "{" command is "set x \{")

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 20
Tcl Syntax Summary

◆Script = commands separated by newlines or semicolons.


◆Command = words separated by white space.
◆$ causes variable substitution.
◆[] causes command substitution.
◆"" quotes white space and semi-colons.
◆{} quotes all special characters.
◆\ quotes next character, provides C-like substitutions.
◆# for comments (must be at beginning of command).

Tcl/Tk Tutorial Part II: Tcl Scripting December 12, 1995, slide 21

You might also like