Talk to me, Tcl

Difference between version 8 and 9 - Previous - Next
[Richard Suchenwirth] 2005-09-04 - ''The following is a chapter in the WikiBook http://en.wikibooks.org/wiki/Programming:Tcl I'm currently working on (mostly by pasting, and polishing, pages from this Wiki :^) . Everybody is welcome to check it out. But I'll continue to put my pages on Tcl here first, and copy them to the WikiBook where appopriate.''

[RLH] Thanks for helping to flesh out the wikibook. 
[RS] Welcome - it has grown from less-than-a-page to a kind of brochure by now :)
[AMG], regarding [[help]]: I put a '''-help''' option in my [[timebox]] widget, found at [http://andy.junkdrome.org/devel/timebox/] and [timeentry].

----
===Interaction with Tcl===

Tcl itself is quite a good teacher. Don't be afraid to do something wrong, as you'll most often get a helpful error message. When tclsh is called with no arguments, it starts in interactive mode and displays a "%" prompt. You type something in, and see what comes out (the result, or an error message). 
Here's a commented session transcript:

 % hello
 invalid command name "hello"
OK, so we're supposed to type in a command. Although it doesn't look so, here's one:
 % hi
     1  hello
     2  hi
Interactive tclsh tries to guess what we mean, and "hi" is the umambiguous prefix of the "history" command, whose results we see here. Another command worth remembering is "info":
 % info
 wrong # args: should be "info option ?arg arg ...?"
Error message: it tells us there should be at least one option, and optionally more arguments.
 % info option
 bad option "option": must be args, body, cmdcount, commands, complete, default,
 exists, functions, globals, hostname, level, library, loaded, locals, nameofexecutable,
 patchlevel, procs, script, sharedlibextension, tclversion, or vars
Another helpful error: "option" is not an option, but the valid ones are listed. 
To get information about commands, it makes sense to type the following (v 8.4.12):
 % info commands
 tell socket subst lremove open eof tkcon_tcl_gets pwd glob list exec pid echo 
 dir auto_load_index time unknown eval lrange tcl_unknown fblocked lsearch gets 
 auto_import case lappend proc break dump variable llength tkcon auto_execok 
 return pkg_mkIndex linsert error bgerror catch clock info split thread_load 
 loadvfs array if idebug fconfigure concat join lreplace source fcopy global 
 switch which auto_qualify update tclPkgUnknown close clear cd for auto_load 
 file append format tkcon_puts alias what read package set unalias 
 pkg_compareExtension binary namespace scan edit trace seek while flush after 
 more vwait uplevel continue foreach lset rename tkcon_gets fileevent regexp 
 tkcon_tcl_puts observe_var tclPkgSetup upvar unset encoding expr load regsub 
 history exit interp puts incr lindex lsort tclLog observe ls less string

Oh my, quite many... How many?
 % llength [info commands]
 115

Now for a more practical task - let's let Tcl compute the value of Pi.
 % expr acos(-1)
 3.14159265359
Hm.. can we have that with more precision?
 % set tcl_precision 17
 17
 % expr acos(-1)
 3.1415926535897931
Back to the first try, where "hello" was an invalid command. Let's just create a valid one:
 % proc hello {} {puts Hi!}
Silently acknowledged. Now testing:
 % hello
 Hi!

It surely would be nice if Tcl had a ''help'' command. [TclX] had a nice one - too bad it didn't catch on more.
----
!!!!!!
%| [Category Tutorial] |%
!!!!!!