- ベストアンサー
perlとphpの共用?
phpで定義した関数をperlから読み込む、又はその逆をしたいのですが 可能なのでしょうか? たとえばphpの関数をperlが読む場合? phpスクリプト <? $hoge = 'hoge1'; ?> となっていた場合にperlで読む場合にはどうすればいいでしょうか? 又上記の場合が可能である場合に $hoge を const HOGE = 'hode1'; とした場合でも可能なのでしょうか?
- みんなの回答 (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にしてしまうのが、本筋だとは思いますけど。 ややこしくなればなるほどでデバック工数増えますし 今後のメンテナンスとか機能拡張とか考えますと。
その他の回答 (2)
- superside0
- ベストアンサー率64% (461/711)
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側改造が不要になるというのがこの方法の利点です。
- yambejp
- ベストアンサー率51% (3827/7415)
>phpで定義した関数をperlから読み込む、又はその逆をしたいのですが >可能なのでしょうか? 直接は言語が違うのでむずかしいでしょう phpからsystem系の関数で標準入出力経由で受け渡しするのが妥当でしょうか。
補足
ありがとうございます。 私のやりたいことができました。 ただQUERY_STRING='定義済み関数' の部分を簡単にできないでしょうか? 膨大な量になるとphpでは改行はできますが管理しずらくなってしまって・・・ いっそphpのみ又はperlのみにすればいいのでしょうけどスクリプトの数がかなり多くて すごく時間がかかるので悩んでいます