みかげさんとこにあるように, oregexp が速くてちょっとしょんぼり〜だったのもうちょっとがんばってみました. 処理をはしょって時間測るとこんな感じ.
呼び出し後直ぐ帰る -- 0.36s
PUSHMARKまでして帰る -- 0.38s
PUSHまでして帰る -- 0.65s
sub{[1]}を呼んで帰る -- 0.93s
ちゃんと処理して帰る -- 1.28s
呼び出しにかかる部分 0.3s, SVを作るのに 0.3s, 関数呼び出しに 0.3s, 正規表現処理に 0.3s といったかんじ?ただ, 同じコードを普通に実行ファイルにすると0.2sで終わるので, バイナリ周りの要因もなにかありそう. 単に共有ファイルにしてみても変化はなかったし. 「限界までチューン」というか, そんなに混み入ったコードじゃないから途中はしょる部分があまりないなのです….
で, 関数呼び出しをどうにかとばすーってことで, がんばってみました. 直接正規表現生成&実行. とりあえずは動いた…. 速度も 0.8s とだいぶ向上♪ そんなコードはこちら. あ、perlre だけど eval も入ってたりします^^; あとでまた分けます…^^;
Dan さんからも頂いた Perl から Erlang の呼び出しはまだ未解決です^^; Erlangの関数を直接Cから呼ぶっていう方法はいまのところなさそう. 内部でErlangVM抱えちゃってそことメッセージ送受信, になるのかな.
ところでこういったコードでもXSっていえばいいんでしょうか?関数一個もつくってないですけれど(笑) perlapi を使って perl インタプリタを操作するプログラム, ていうのも言いにくいし^^;
(背景画像は
[ Pearl Box ] http://flap.vis.ne.jp/pxb/
で配布されているものを加工したものです☆)