Pseudo_Perlをリリース。
第30回PHP勉強会用のネタ、Pseudo_Perlを含む、Pseudo_Block 0.1.1 をリリースします。
Now we release 0.1.1 which include "Pseudo_Perl" new class which invokes perl interpreter with embedded perl script in php script.
Pseudo_Block 0.1.1 (beta) Released!!
You may think it is nonsense, yes, I think so, too :)
Let's enjoy strangefull php/perl script!!
えー、その、つまり。実用性皆無のお遊びネタなので、あんまり突っ込まずに笑うか嗤うかスルーするかしてくれると嬉しいです。
使い方は他のPseudo_*とはまたちょっと違って、Perlのインタプリタバイナリを指定するようになってます。
以下のUsage4, Usage5を参照。
http://xhwlay.sourceforge.net/Pseudo_Block/
原理は単純で、他のPseudo_*と同様、ブロックで囲まれたテキストを取得します。で、Pseudo_Perlの場合はこのテキストをテンポラリファイルに保存して、指定されたインタプリタバイナリに渡す感じでproc_open()しちゃいます。
オプションでファイルディスクリプタを渡せますので、pipe(STDIN/OUT/ERR)経由でproc_open()したPerlインタープリタと会話することもできます。(ほんとは環境変数とかCWD(current working directory)も渡せると良かったのですが、proc_open()の該当オプションはPHP5からなので、見送りました。)
もちろんPHP側の値を渡すことも可能です。但し今のところscalar値のみです。というのは、Perl側のCGIモジュールで取り出せるよう手抜きして、
perl (スクリプトファイル) key1=val1 key2=val2 ...
という風になるよう調整しているからです。
ちなみにシェルエスケープしてないので実環境で、例えばPOSTとかGETをbindしてしまうと、あっというまにシェルエスケープインジェクションされますので、実用厳禁。なんだそりゃって感じですが。
PHPがデフォルトでfork()を提供してくれていると有り難いのですが、してなくて、使えるようになるにはpcntl拡張が必要らしいのですが、Windows版にはついてないっぽいし。
標準ではコンパイルされていない・Windows版モジュールについてこないPHP拡張は基本的に使わないポリシーなので、見送りでつ。