[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] |%
!!!!!!