tclperl - Tcl から Perl を使う [Tcl]
Tcl から Perl のコードを呼び出したい事情があるのだけど(そんな事情が普通あるわけないなどと思わないように!)、自分で作る前に調べてみたら tclperl [1] というのがあった。ソースは [2] から、Windows のバイナリは [3] からダウンロードできる。Windows で ActiveTcl と ActivePerl が入っている環境なら Tcl のライブラリフォルダに置くだけなので非常に手軽に試すことができる。
それでこのパッケージのアプローチというのは以下のような感じ。
% package require tclperl 3.2 % set p [perl::interp new] perl0 % $p eval { sub f { return $_[0]*2 } } % puts [$p eval { f(123); }] 246
まずインタプリタをインスタンス化してそれを使う。これは確かに実装上は理にかなっているし、もし複数のインタプリタを使い分けたいなんていうことになった場合は有利なやり方なんだけど、あまり好きじゃない。
まずインタプリタを作成するコードを毎回おまじないのように書かないといけない。
それから Perl で何かしようと思う度に明示的にインタプリタが入ったオブジェクト(上記サンプルでいう $p コマンド)を参照しないといけない。このアプローチだと上記の例で言う「$p eval」は省略することができないから Perl を使おうとする度に最低7文字タイプしないといけないわけだ。ソースコードもその分見づらくなる。
では「複数のインタプリタを使い分けたい」という要望がどれくらいあるかというと実際上は殆どないだろうと思う。グローバル変数の衝突を防いだりするなどのメリットが思いつくが、ここで埋め込んでいるのはフルセットのプログラミング言語の処理系であって、そういう仕組みは1つのインタプリタ内でカバーできる。
なので私の Tcl/Lua ブリッジ [4] [5] は単一インタプリタのアプローチを取っている。このほうが対象言語が「手元にある」感じがして良いと思う。
とはいえ我慢ならないというほどの不便ではないので tclperl は使います。
ところでスクリプト言語埋め込みの世界では Lua や Tcl など元々埋め込み用途が想定にある言語は勿論のこと、比較的大きめと思われる Python なんかも結構使われているような感じがあるけど Perl は埋め込み用途で使っているのをそれほど聞かないように思う。なぜだろう。
[1] http://jfontain.free.fr/tclperl.htm
[2] http://jfontain.free.fr/
[3] http://www.ellogon.org/petasis/index.php?option=com_content&task=view&id=27&Itemid=43
[4] http://blog.so-net.ne.jp/rainyday/2006-11-05-1
[5] http://blog.so-net.ne.jp/rainyday/2006-11-14
コメント 0