電子書籍の厳選無料作品が豊富!

phpで定義した関数をperlから読み込む、又はその逆をしたいのですが
可能なのでしょうか?
たとえばphpの関数をperlが読む場合?
phpスクリプト
<?
$hoge = 'hoge1';
?>
となっていた場合にperlで読む場合にはどうすればいいでしょうか?
又上記の場合が可能である場合に
$hoge を const HOGE = 'hode1';
とした場合でも可能なのでしょうか?

A 回答 (3件)

> ただQUERY_STRING='定義済み関数'


> の部分を簡単にできないでしょうか?

引渡ししたい変数名をarrayにいれて
foreachでまわせば、いいんじゃないでしょうか。
たとえば
<?php

$hoge = 'hoge1';
$fuge = 'fuke1';
$fum[1] = 'AsA';

$a = array("hoge","fuge","fum");


$str="";
foreach ( $a as $val ) {
if ( is_array(${$val})) {
foreach ( ${$val} as $key => $val2 ) {
if ( strlen($str) ) $str .= "&";
$str.= "{$val}[{$key}]=$val2";
}
}
else {
if ( strlen($str) ) $str .= "&";
$str .= "$val=${$val}";
}
}
system ( "QUERY_STRING='$str' perl /path/xxx.pl") ;
?>

ただ、シェルに使える文字数には制限がありますので
あまり多いときは、POST形式にしてパイプで渡すやりかたに
かえたほうがよいとは思います。

といいますが、こういうところで余計な苦労するぐらいなら、
全部phpにしてしまうのが、本筋だとは思いますけど。
ややこしくなればなるほどでデバック工数増えますし
今後のメンテナンスとか機能拡張とか考えますと。
    • good
    • 0

PHPとperlはメモリー空間別なので、ファイルか環境変数を使って引き渡すしかないと思います。



CGIからCGIを呼び出すのと同じ手法で、環境変数を利用して
<?php
$hoge = 'hoge1';
$fuge = 'fuge1';
system ( "QUERY_STRING='hoge=$hoge&fuge=$fuge' perl /path/xxx.pl") ;
?>
でどうでしょう。

受け取り側のperlは、普通のCGIのperlのようにGETデータを取得する方法が使えるので、出来合いのperl(CGI)があってこれをコールするだけなら、
perl側改造が不要になるというのがこの方法の利点です。

この回答への補足

ありがとうございます。
私のやりたいことができました。
ただQUERY_STRING='定義済み関数'
の部分を簡単にできないでしょうか?
膨大な量になるとphpでは改行はできますが管理しずらくなってしまって・・・
いっそphpのみ又はperlのみにすればいいのでしょうけどスクリプトの数がかなり多くて
すごく時間がかかるので悩んでいます

補足日時:2008/10/24 18:52
    • good
    • 0

>phpで定義した関数をperlから読み込む、又はその逆をしたいのですが


>可能なのでしょうか?

直接は言語が違うのでむずかしいでしょう
phpからsystem系の関数で標準入出力経由で受け渡しするのが妥当でしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!