TclTcl (originally from "Tool Command Language", but nonetheless conventionally rendered as "Tcl" rather than "TCL"; and pronounced like "tickle") is a scripting language created by John Ousterhout that is generally thought to be easy to learn, but powerful in the right hands. It is most commonly used for rapid prototyping, scripted applications, GUIs and testing.
FeaturesTcl's features include:
While Tcl itself does not provide an object oriented framework, the language itself can be extended to provide new features as required. Indeed, many C extensions have been written to provide OO functionality, including the XOTcl and incr Tcl packages. Other OO extensions, including Snit, are written entirely in Tcl. SyntaxVery simple and consistent syntaxTcl has a very simple syntax which is applied in a consistent way. A Tcl script consists of several commands. A command is a list of words separated by whitespace. word0 word1 word2 ... wordN The first word is the name of a command, which is not built into the language, but which is in the library. The following words are arguments. So we have: commandName argument1 argument2 ... argumentN Instead of an argument, you may put another command in square brackets. The subcommand is evaluated first and the result is substituted as the argument. If you put something in curly braces as an argument, it is not evaluated but handed directly to the command as the argument. To summarize: there is one basic construct and only the block, the curly braces and the backslash have a special meaning besides the quotes. The single equality sign (=) for example is not used at all, and the double equality sign (==) is the test for equality. All commands have the same structure - a keyword which is followed by several parameters. A command is terminated by a newline or a semicolon. Even comments are just commands which happen to do nothing. Tcl is not statically typed: each variable may contain integers, floats or strings. Symbols with a special meaning * $ for accessing the content of a variable
* evaluation of subcommand
* ""
* {} deferring evaluation - construction of a list
* \ line continuation
* # comment
Some examples of commandsAssignments are made with the command set, no equality sign. set variable value
while { aTCLcommandWhichEvalutesToAnInteger } { aTCLcommand
anotherTclCommand
....
}
If command if {$x < 0} {
set x 0
}
Commands may have no arguments pwd gives back the current working directory. With set wdir [pwd] you store the string describing the working directory in the variable wdir.
A command may give back as a result a list glob aPattern gives back a list of file names in the working directory whose names match aPattern. ProceduresProcedures are defined as follows proc nameOfProc { argumentList } {
....
....
}
Associative arraysThe following code snippet creates and initializes an associative array. set capital(France) Paris set capital(Italy) Rome set capital(Germany) Berlin set capital(Poland) Warsaw set capital(Russia) Moscow set capital(Spain) Madrid To query it use and put the result on standard output use puts $capital(Italy) To get a list of all countries for which a capital is defined use array names capital The result is an unsorted Poland Spain Russia Germany Italy France If you like to have it sorted use lsort [array names capital] GUI and ExpectThe most popular Tcl extension is the Tk toolkit, which provides a graphical user interface library for a variety of operating systems. Each GUI consists of one or more frames. Each frame has a layout manager. Another popular extension is Expect, which allows automated driving of terminal-based programs (such as passwd, ftp, telnet and command driven shells). ExamplesEcho serverA simple working example, demonstrating event-based handling of a socket, follows.
#!/bin/sh
# next line restarts using tclsh in path \
exec tclsh $0 ${1+"$@"}
# echo server that can handle multiple
# simultaneous connections.
proc newConnection { sock addr port } {
# client connections will be handled in
# line-buffered, non-blocking mode
fconfigure $sock -blocking no -buffering line
# call handleData when socket is readable
fileevent $sock readable [ list handleData $sock ]
}
proc handleData { sock } {
puts $sock [ gets $sock ]
if { [ eof $sock ] } {
close $sock
}
}
# handle all connections to port given
# as argument when server was invoked
# by calling newConnection
set port [ lindex $argv 0 ]
socket -server newConnection $port
# enter the event loop by waiting
# on a dummy variable that is otherwise
# unused.
vwait forever
Digital clockAnother example using Tk (from A simple A/D clock (http://mini.net/tcl/2563.html)) and timer events, a digital clock in three lines of code:
proc every {ms body} {eval $body; after $ms [info level 0]}
pack [label .clock -textvar time]
every 1000 {set ::time [clock format [clock sec] -format %H:%M:%S]} ;# RS
Explainer: the first line defines a command, "every", which re-schedules an action ('body') every 'ms' milliseconds; the second creates a label whose content is bound to the variable 'time'; the third line arranges so that the variable 'time' is updated to formatted local time every second. List of content of associative arrayIn an array tcl_platform, platform-specific properties are kept. A list of the names of the properties is obtained by array names tcl_platform The following snippet lists them together with their values foreach i [array names tcl_platform] {
puts [ concat $i= $tcl_platform($i) ]
}
foreach i [lsort [array names tcl_platform]] {
puts [ concat $i= $tcl_platform($i) ]
}
This demonstrates how commands may be nested. In fact they may be nested to any depth. External links
de:Tcl es:TCL fr:Tool Command Language it:Tcl/Tk pl:Tcl ru:Tcl fi:TCL sv:Tcl tr:Tcl zh:Tcl
Categories: Programming languages | Scripting languages |
|
This article is licensed under the GNU Free Documentation License. It uses material from Wikipedia article. Browse Wikipedia for more information. |