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 [L1 ] and timeentry.
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.