Tool Command Language (Tcl)初体验

Tcl只有一种语法: command arg arg ....windows

这种设计真的是很是好,简洁,快速!app

它和不少程序设计语言不同,它没有关键词!譬如if, switch在Tcl中也是命令。dom

初次体验Tcl的感受是:利用Tcl来构建一些东西的时候,只作两件事情:一,调用命令;二,直接给参数或者用替换的方法给参数。 仅有的一种语法在有了“可替换“这个特性后,果真强大了不少!可见,好的设计,真的是至简的设计。你没法再用更少的东西来达到相同的目的了。ui

Tcl也是支持结构化的,好比c中的function,能够对应为Tcl中的proc(procedure的简称)。设计

proc procName args... {unix

main bodyorm

}server

这样就至关于定义了一个procedure。其实,它仍是个命令,这个命令作的事情的,当procName被调用时,执行mainbody.ip

如下给出我初步试验的脚本和结果:get

#test tcl built-in commands puts "======================start==========================" #print "running" after 5 seconds puts "waiting for 1 second ..." after 1000 puts "running ..." #append var(="Hello") with " " and "World!" set var {} append var "Hello" " " "World!" puts ${var} #test command 'for', 'if' and 'incr' #output the odd number between [1:10] for {set i 1} {$i <= 10} {incr i} {     if {$i%2 != 0} {puts $i} } #command substitution set var [expr 1+2+3] puts $var #file puts [file attributes tmp.tcl] puts [file atime tmp.tcl] puts [file channels *err] puts [file dirname ~] puts [file dirname ~/Desktop] #file copy tmp.tcl commandtest.tcl set flag [file executable commandtest.tcl] if {$flag == 1} {     puts "commandtest.tcl is executable" } if {$flag == 0} {     puts "commandtest.tcl is not executable" } file mkdir testdir1 testdir2 testdir3 puts [file normalize commandtest.tcl] puts [file separator] #test 'proc' and 'cd' proc mypwd args {     return [file normalize ./] } puts [mypwd] set current_dir [file normalize ./] cd /home/chenqi/Desktop puts [mypwd] cd ${current_dir} puts [mypwd] #test pwd puts [pwd] #test 'file stat', 'array' and 'foreach' file stat commandtest.tcl var_stat_array foreach {field value} [array get var_stat_array] {     puts "field: $field; value: $value" } puts $::tcl_platform(platform) #test 'switch' switch  $::tcl_platform(platform) {     unix {     puts "the platform is unix"     }     windows {     puts "the platform is windows"     } } #test 'exec' puts "executing 'uname -r' command" puts [exec uname -r] #test time puts [time {     puts [exec find /home/chenqi/MyPro/CFiles/ -name *.c] }] puts "===================end=================================" ======================start========================== waiting for 1 second ... running ... Hello World! 1 3 5 7 9 6 -group root -owner root -permissions 00644 1336199519 stderr / ~ commandtest.tcl is executable /home/chenqi/MyPro/ShellScript/tcl/commandtest.tcl / /home/chenqi/MyPro/ShellScript/tcl /home/chenqi/Desktop /home/chenqi/MyPro/ShellScript/tcl /home/chenqi/MyPro/ShellScript/tcl field: mtime; value: 1336203195 field: atime; value: 1336203234 field: gid; value: 0 field: nlink; value: 1 field: mode; value: 33261 field: type; value: file field: ctime; value: 1336203195 field: uid; value: 0 field: ino; value: 2360375 field: size; value: 1724 field: dev; value: 2056 unix the platform is unix executing 'uname -r' command 2.6.32-21-generic /home/chenqi/MyPro/CFiles/temp/bufsiz.c /home/chenqi/MyPro/CFiles/Chapter-1/Hello.c /home/chenqi/MyPro/CFiles/POSIX_Threads/autobakup.c /home/chenqi/MyPro/CFiles/POSIX_Threads/thread1.c /home/chenqi/MyPro/CFiles/virtual_process/virt_proc.c /home/chenqi/MyPro/CFiles/virtual_process/test.c /home/chenqi/MyPro/CFiles/virtual_process/hash.c /home/chenqi/MyPro/CFiles/virtual_process/pid.c /home/chenqi/MyPro/CFiles/IPC/semaphores/cfunc.c /home/chenqi/MyPro/CFiles/IPC/pipes/named_pipes/client.c /home/chenqi/MyPro/CFiles/IPC/pipes/named_pipes/server.c /home/chenqi/MyPro/CFiles/IPC/pipes/named_pipes/tmp/procB.c /home/chenqi/MyPro/CFiles/IPC/pipes/named_pipes/tmp/procA.c /home/chenqi/MyPro/CFiles/IPC/pipes/named_pipes/server_with_queue.c /home/chenqi/MyPro/CFiles/IPC/pipes/pipes_as_stdio/pipe_as_stdout.c /home/chenqi/MyPro/CFiles/IPC/pipes/pipes_as_stdio/pipe_as_stdin.c /home/chenqi/MyPro/CFiles/IPC/pipes/unnamed_pipes/procB.c /home/chenqi/MyPro/CFiles/IPC/pipes/unnamed_pipes/procA.c /home/chenqi/MyPro/CFiles/IPC/signals/test.c /home/chenqi/MyPro/CFiles/IPC/signals/getpidbyname.c /home/chenqi/MyPro/CFiles/IPC/signals/test2.c /home/chenqi/MyPro/CFiles/programming-pearls/chapter1/qsort.c /home/chenqi/MyPro/CFiles/programming-pearls/chapter1/mergesort.c /home/chenqi/MyPro/CFiles/programming-pearls/chapter1/tmp/test.c /home/chenqi/MyPro/CFiles/programming-pearls/chapter1/bitmap_sort.c /home/chenqi/MyPro/CFiles/programming-pearls/chapter1/generate_random.c 4776 microseconds per iteration ===================end=================================

相关文章
相关标签/搜索