Tcl
Tclパーサーはリストの先頭要素を常にコマンド名として認識する。それ以外の要素はコマンドに渡すべき引数として認識する。しかし、その引数要素がブラケット([、])で挟まれていると、その中身をコマンド行と認識し、それを実行してから本来の引数値を求めてくれる。これが「コマンド置換」である。
コマンドには、Tclパーサーにあらかじめ実装されているビルトインコマンドと、ユーザーにより作成された拡張コマンドがある。ユーザーによる拡張コマンドの実装は簡単である。まず、C言語などで「コマンド本体関数」と「登録用関数」を記述し、ダイナミックリンクライブラリファイルに格納する。そして組み込みコマンドの load を用いて拡張コマンドを登録する。
load コマンドの引数には、「ライブラリファイル名」と「登録用コマンド名」を与える。load コマンドは、登録用コマンド名から「登録用関数」名を求め、これを実行してくれる。例えば hello コマンドであれば Hello_Init を実行してくれる。この「登録用関数」の中に本当の登録処理を記述しておく。従って、例えば load コマンドに渡したコマンド名にライブラリ名の意味を持たせ、「登録用関数」の中で複数のコマンドを登録してしまうことも可能である。
「本当の」コマンド登録はC言語のインターフェース用の関数の Tcl_CreateCommand や Tcl_CreateObjCommand を用いて行う。拡張コマンドの実体となる「コマンド本体関数」を、決められた型と引数に従って先に定義しておき、そのコマンド関数アドレスと公開コマンド名を引数に与えて実行すれば登録される。
コマンド登録関数
コマンド本体関数
コマンド本体関数は、Tclパーサーからの引数を、引数の数(argc)と引数文字列配列(argv)で受け取る。ただし、引数を文字列で受け取るこの方式は Tcl_CreateCommand 関数で登録する場合であり、引数をTclオブジェクトで受け取りたい場合には、上例のように Tcl_CreateObjCommand 関数で登録する。