Tcl list : creation, length, and extracting element

In Tcl everything is a string. List is also a string. The simplest form of list is a string with zero or more space separated words. Lets set a variable with 3 elements list containing 1,2, and 3.

% set var1 “1 2 3”

% set var2 [list 1 2 3]

% set var3 {1 2 3}

Here we set var1,var2, and var3 to a list, with 3 different way.

To return the number of elements in a list we can use llength command.

% llength $var1


To extract an element from list we can use lindex command.

% lindex $var1   1


As we can see list has zero based index. The first element is at index 0. Lindex command can accept end and end-? as argument.

% lindex $var1   end


% lindex $var1  end-1


Thats all for now.

Tcl Tutorial

Do you need a Tcl tutorial ? Salvatore write one that we can read online here :

Also check out a n interesting Tcl language implementation here :

Tcl/Tk : Another hello world

Hello world using tcl/tk presented below may be more clear than oneliner before.

  1. create a label named .label1 with hello world text
  2. create a button named .button1 with OK text and will do exit when clicked.
  3. pack .label1 to make it showed on screen.
  4. pack .button1 to make it showed on screen below .label1.

Here is the result.


Tcl/Tk Hello world in a line

Creating classic hello world program using GUI in Tcl/Tk can be done in few lines or may be only a line !

Oneliner can do below.

pack [button .b1 -text “Hello World” -command exit -width 50]

This line can be read : pack a button named .b1 with hello world text and exit command when clicked.

Save it to hello_oneline.tcl then run on command prompt : wish hello_oneline.tcl.


Click the button and the window will close.

Bye ..

TCL : Useful proc to write message to log file

Logging application activity to a log file is a best practice to do by a programmer. Here is how we can do it in Tcl scripting language.

Line 1 to 7 is a proc definition named writelog with a parameter. Parameter will contain message to be written to log file located in d:/applogYYYYMMDD.txt based on current date of clock command. Different day will have a different log file.

Line 9 to 17 is some test to writelog. If we pass hello as parameter to writelog command then “YYYY-MM-DD HH:mm:ss : hello” will be written to log file. Every call to writelog will create new line and put current date time on the beginning of line.



Installing TCL on OpenBSD 6.6

To bring tcl/tk programming language and some database connectivity for tcl on OpenBSD do command below as root :

pkg_add tcl tk sqlite3-tcl pgtcl

OpenBSD 6.6 can install tcl/tk 8.5 and 8.6.

Two extra package named sqlite3-tcl and pgtcl will give tcl capability to work with sqlite3 database and postgresql database.

Tdbc also a good choice for database connectivity. Tdbc packages on OpenBSD available for mysql, postgres, sqlite3. To add tdbc , we can do pkg_add tdbc-postgres tdbc-mysql tdbc-sqlite3.

Later will write more about tcl/tk.

Where Lua Looks For Modules

As with other programming languange, Lua can add functionality by using require statement. Path to search for modules defined by package.path and package.cpath settings.

package.path     :   Where Lua looks for .lua modules.
package.cpath  :   Where Lua looks for .so/.dll modules.

We can append the path like :

package.path = package.path..”;/home/user/lib/?.lua”

package.cpath = package.cpath..”;/home/user/lib/?.so”