PHPからPerlのコードを実行する
PukiWikiのプラグインでPerlが使えないかを試すためにいろいろやってみました。
PECLのperlモジュール
perlモジュール
よくわかりませんがPHPでPerlを実行できるモジュールをようやく発見しました。 ただ、日付がかなり古い(2006-02-13)のでもうメンテは行われていないのかもしれません。
インストール
標準的なインストール方法があるみたいです。なお、re2cというプログラムが必要になったのでSRPMからRPMを作成してインストールしました。
perl-1.0.0.tgzを使いました。
% tar zxvf perl-1.0.0.tgz % cd perl-1.0.0 % phpize % ./configure % make % make install
インストールされます。このようにオプションなしの状態では/usr/local/lib/php/extensions/no-debug-non-zts-20060613/perl.soが作成されます。php.iniで読み込みやすいように/usr/local/lib/php/extensions/perl.soでリンクを張りました。
php.iniの設定
php.iniを設定します。標準的な場所は/usr/local/lib/php.iniみたいです。
php.iniで設定する変数は、
- extension_dir
- extension
です。
extension_dir="/usr/local/lib/php/extensions" extension=perl.so
を追加しました。
使い方
クラスを生成して呼び出すやり方は、コマンドラインではコアダンプしました。原因は不明。
クラスを生成して呼び出す
ドキュメントに載っている使い方ですが、このソースをコマンドラインで実行するとコアダンプしました。ただし、Apache2で使う分には(PukiWikiのプラグイン内に埋め込んで試した)、動作しました。
- NobTest.pm
package NobTest; sub new { my $class = shift; return bless { _name => "POO" },$class; } sub get_name { my $self = shift; return $self->{_name}; } 1;
- PHPソース
$perl = new Perl(); $perl->eval('use lib qw(/path/to/lib)'); $obj = new Perl("NobTest"); echo $obj->get_name();
別のやり方
コマンドラインでは以下のようにして試すとうまくいきました。
- PHPソース
$perl = new Perl(); $perl->eval('use lib qw(/path/to/lib)'); $perl->eval('use NobTest') $obj = $perl->eval('new NobTest()'); echo $obj->get_name();
ただし、これをPukiWikiで使うと、オブジェクトメソッドの戻り値がArrayになってしまい、うまくいきませんでした。
何が違うのだろう・・・