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で設定する変数は、

使い方  

クラスを生成して呼び出すやり方は、コマンドラインではコアダンプしました。原因は不明。

クラスを生成して呼び出す  

ドキュメントに載っている使い方ですが、このソースをコマンドラインで実行するとコアダンプしました。ただし、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になってしまい、うまくいきませんでした。
何が違うのだろう・・・