ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

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.
You may think it is nonsense, yes, I think so, too :)
Let's enjoy strangefull php/perl script!!

Pseudo_Block 0.1.1 (beta) Released!!

えー、その、つまり。実用性皆無のお遊びネタなので、あんまり突っ込まずに笑うか嗤うかスルーするかしてくれると嬉しいです。

使い方は他の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拡張は基本的に使わないポリシーなので、見送りでつ。