PHPオブジェクトのメンバをPerlに渡す
ここにSimpleClassという名前のPHPクラスのインスタンスがあるとします。このオブジェクトのメンバをPerlスクリプトに渡すにはどうすればよいでしょうか。SimpleClassの定義を以下に示します。
<?php
class SimpleClass
{
// member declaration
public $phone = 3274927349;
public $name = 'El';
public $surname = 'Ramon';
// method declaration
public function displayVar() {
//...
}
}
$simpleClass = new SimpleClass();
//$simpleClass->displayVar();
?>
上述のサンプルで紹介したシリアライズメソッドを利用すれば、以下に示すように、SimpleClassのインスタンスをシリアライズし、その結果をPerlに渡すことができます(メンバの名前と値を取り出すには、このPerlスクリプトがデシリアライズ処理を実装していなければなりません)。
... echo "Perl call ...\n"; //Serializing the object $var = serialize($simpleClass); $result=shell_exec( "C:\Perl\bin\perl.exe serialize.pl $var"); echo($result); ...[/s] このコードで呼び出されるPerlスクリプト(serialize.pl)は次のとおりです。 [sg] $var = $ARGV[0]; print "$var";
また、次のobjectPerl.phpスクリプトに示すように、クラスのメンバを明示的に渡すこともできます。
<?php
class SimpleClass
{
// member declaration
public $phone = 3274927349;
public $name = 'El';
public $surname = 'Ramon';
// method declaration
public function displayVar() {
//...
}
}
$simpleClass = new SimpleClass();
//$simpleClass->displayVar();
echo "Perl call ...<br />";
$cmd = "C:\Perl\bin\perl.exe objectPerl.pl
$simpleClass->name
$simpleClass->surname $simpleClass->phone";
$result = shell_exec($cmd);
echo($result);
?>
インスタンスのメンバを明示的に渡す場合、それを受け取るPerlスクリプト(objectPerl.pl)は、次のようになります。
print "The name is: ".$ARGV[0]; print "<br /> The surname is: ".$ARGV[1]; print "<br /> The phone number is: ".$ARGV[2];
出力結果は次のとおりです。
Perl call ... The Name is: El The Surname is: Ramon The phone number is: 3274927349
Cygwinを利用する
Cygwinは、Windowsシステム上でLinux環境を利用することが可能なツールです。Cygwinには、Linux APIエミュレーションレイヤの役割を果たすDLL(cygwin1.dll)が含まれています。このDLLは、Linux APIの主要機能およびLinuxのルック&フィールを備えたツール群を提供します。これらの機能やツールはすべて、Linuxの公式仕様に準拠しています。
Cygwinはhttp://www.cygwin.comからダウンロードできます。ダウンロードされるファイルには、インストール手順を指示してくれるsetup.exeファイルも含まれます。必要なCygwinパッケージをすべて選択してインストールしたら、Cygwin.batファイルをダブルクリックしてCygwinをコマンドプロンプトで実行します。図2に示す画面が表示されます。
Cygwinを利用すれば、シェルコマンドスクリプトを実行する、任意のPCにリモートログインする、Windowsマシン上のPosize/Linux/UNIXシェルから問題を修正する、といったことが可能になります。PHPアプリケーション内でCygwinを利用するには、次のようにPerl.exeファイルへのパスを設定します。
${CYGWIN_HOME}\bin\Perl.exe
Cygwinを通じてPerlスクリプトを実行するPHPスクリプトは次のようになります。
<?php
$result=shell_exec(
"C:\Cygwin\bin\Perl.exe {Perl_script_name}.pl");
echo($result);
?>
Perl_script_nameの部分は、本稿のダウンロードサンプルに含まれる任意のPerlスクリプトと置き換えることができます。
以上、PHPからPerlを呼び出すためのサンプルをいくつか紹介しました。さまざまなタイプの引数(文字列、数値、配列、オブジェクト)を使ってPHPからPerlスクリプトを呼び出したり、Perlスクリプトでサブルーチンを呼び出したりするのは難しくないことがお分かりいただけたと思います。

