[Node.js]Node.jsにperlインタプリタを組み込む node-perl
先日の Hachioji.pm #2 のLTで発表した node-perlについて簡単な解説をしておきます。
GitHub - hideo55/node-perl: Embeded perl interpreter for node.js
LT資料
Perlインタプリタの組み込み
まず、C/C++プログラムへのPerlインタプリタの組み込みはほぼperldocのperlembed - C プログラムへの Perl の埋め込み方 - perldoc.jpのままです。
ただ、インタプリタを組み込んだだけでは標準出力などはそのまま出力されてしまいます。そこで、以下のようにしています。
void override_stdhandle (pTHX_ SV *sv,const char *name ) { int status; GV *handle = gv_fetchpv(name,TRUE,SVt_PVIO); SV *svref = newRV_inc(sv); save_gp(handle, 1); status = Perl_do_open9(aTHX_ handle, ">:scalar", 8 , FALSE, O_WRONLY, 0, Nullfp, svref, 1); if(status == 0) { Perl_croak(aTHX_ "Failed to open %s: %" SVf,name, get_sv("!",TRUE)); } }
ようは PerlIO::scalar で標準出力の出力先をスカラ変数に変えているわけです。