Orthoclaseでkeitaircを動かしたい

LimeChatとkeitaircで接続を共有するために,LimeChat->IRC Proxy<-keitaircと,IRC Proxy経由で接続しなければならないのがうっとうしい.そこで,折角Orthoclaseでperlが動くんだから,keitaircをLimeChatに寄生させればいいんじゃないかと思った.
早速ちょこちょことポーティングを始めたんだけど,ポーティングを進めていくうちに,perlじゃどうしようもない部分がいくつか出てきてしまった.
まず一つ目がLimeArrayのアクセス.ActivePerlのIDispatchサポートでは数字が名前になっているプロパティを取得するルートがない.Win32::OLEを試してみようかと思ったけど,Win32::OLEで閉じちゃっているので,こっちもダメ.仕方ないので LimeExt.JInvoke(receiver, message, invoketype, args) を用意して,不正な文字列になっちゃうメソッドでも呼び出せるようにした.

my $channels = main::channels();
my $channel = $main::LimeExt->JInvoke($channels, '0', 1);
# (invoketype:1 => DISPATCH_PROPERTYGET)
my $channelName = $channel->name;
# ...

もう一つはsetIntervalに設定する関数.どうも,\&〜じゃ通らないらしい.通ってくれないとにっちもさっちもいかないわけだが・・・これも LimeExt.JFunction(funcName) を用意して,ラッパーを生成できるようにした.

sub on_timer { &do_something; }
my $on_timer_wrap = $main::LimeExt->JFunction("on_timer");
my $timer_id = setInterval($on_timer_wrap, 500);

あとはさくさくコピペとちょっとした修正で動くようになった.やったね!