* PHPからPerlのコードを実行する [#u32f6313]
PukiWikiのプラグインでPerlが使えないかを試すためにいろいろやってみました。
** PECLのperlモジュール [#s2186a13]
*** perlモジュール [#x2f5f19b]
よくわかりませんがPHPでPerlを実行できるモジュールをようやく発見しました。
ただ、日付がかなり古い(2006-02-13)のでもうメンテは行われていないのかもしれません。
- http://pecl.php.net/package/perl
*** インストール [#b8cf25d2]
標準的なインストール方法があるみたいです。なお、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の設定 [#r1bc8139]
php.iniを設定します。標準的な場所は/usr/local/lib/php.iniみたいです。~
php.iniで設定する変数は、
- extension_dir
- extension
です。~
extension_dir="/usr/local/lib/php/extensions"
extension=perl.so
を追加しました。
** 使い方 [#b53adde6]
クラスを生成して呼び出すやり方は、コマンドラインではコアダンプしました。原因は不明。
*** クラスを生成して呼び出す [#c3050724]
ドキュメントに載っている使い方ですが、このソースをコマンドラインで実行するとコアダンプしました。ただし、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();
*** 別のやり方 [#sa9cd6c0]
コマンドラインでは以下のようにして試すとうまくいきました。
: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になってしまい、うまくいきませんでした。~
何が違うのだろう・・・