Posted at
TclDay 1

TclでHello, world!


前置き

ActiveTcl 8.6 + Windows10 Japanese 64bitで動作確認しました。

スクリプト冒頭3行の

#!/bin/sh

#\
exec tclsh "$0" ${1+"$@"}

#!/bin/sh

#\
exec wish "$0" ${1+"$@"}

はActiveTclで実行する場合は不要なので以下では省略します。UNIX OSやCygwinでファイル名だけで実行する場合は必要です。


Tcl編


実行方法

> c:\activetcl\bin\tclsh.exe hello.tcl



シンプルにHello, world! ~その1~


hello.tcl

puts {Hello, world!}



シンプルにHello, world! ~その2~


hello.tcl

puts "Hello, world!"



標準エラー出力にHello, world!


hello.tcl

puts stderr "Hello, world!"



細切れにHello, world!


hello.tcl

puts -nonewline "Hello"

puts -nonewline ", world!"
puts -nonewline "\n"


printf風にHello, world!


hello.tcl

puts -nonewline [format "%s, %s!\n" Hello world]



変数に入れてからHello, world! ~その1~


hello.tcl

set foo "Hello, world!"

puts $foo


変数に入れてからHello, world! ~その2~


hello.tcl

set foo Hello

set bar world
puts "$foo, $bar!"


変数に入れてからHello, world! ~その3~


hello.tcl

set foo Hello

set bar world
puts "[set foo], [set bar]!"


リストをつなげてHello, world!


hello.tcl

set foo [list Hello world!]

puts [join $foo ", "]


関数の処理でHello, world!


hello.tcl

proc helloworld {} {

puts "Hello, world!"
}
helloworld


関数の戻り値でHello, world!


hello.tcl

proc helloworld {} {

return "Hello, world!"
}
puts [helloworld]


シリアルポートにHello, world!

COM1とCOM2がクロスケーブルで接続されているとして。


hello.tcl

set ch1 [open "\\\\.\\COM1" r+]

fconfigure $ch1 -mode 9600,n,8,1
set ch2 [open "\\\\.\\COM2" r+]
fconfigure $ch2 -mode 9600,n,8,1 -buffering line
puts $ch2 "Hello, world!"
close $ch2
puts [gets $ch1]
close $ch1