• ベストアンサー

perlとphpの共用?

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

  • PHP
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)

回答No.2

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側改造が不要になるというのがこの方法の利点です。

kirbys
質問者

補足

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>phpで定義した関数をperlから読み込む、又はその逆をしたいのですが >可能なのでしょうか? 直接は言語が違うのでむずかしいでしょう phpからsystem系の関数で標準入出力経由で受け渡しするのが妥当でしょうか。

関連するQ&A

  • PHPの関数定義ついて。

    PHPの関数定義ついて。 初歩的な質問かもしれませんが、 define関数での定数定義が、スクリプト実行時に評価されるのはなぜでしょうか。 なぜコンパイル時ではなくスクリプト実行時に評価しなければならないのでしょうか。 また、const文によるクラス定義が、コンパイル時に評価されるのはなぜでしょうか。 なぜクラス定義はコンパイルに評価しても問題ないのでしょうか。

    • ベストアンサー
    • PHP
  • php3からphpを呼び出し、POSTデータを渡す方法

    何時もお世話になります。 今回質問させて頂きたいことは php3のスクリプトからphpスクリプトを呼び出し、さらに phpスクリプトはPOSTデータを渡す方法は無いか教えて頂きたいです。 環境は FreeBSD4 apache_1.3.33 php-3.0.18-i18n-ja-3 php-4.3.7 です。 仮に呼び出し元のphp3のファイルをexample.php3 呼び出し先のphpのファイルをhoge.php として解説します。 example.php3から include、require等の関数で hoge.phpを呼び出した場合、hoge.phpは php3として実行される様なのでこの方法は×。 example.php3でvirtual()関数を使い、hoge.phpを呼び出せば 解決かと思ったのですがPOSTデータをhoge.phpに 渡す方法が無いためこの方法も×。 php3ではSESSIONが使えないため、SESSION + virtual()関数という 方法も×。 ということでちょっと手詰まりの状態です。どなたか解決方法をご存知の 方ご教示頂ければと思います。

    • ベストアンサー
    • PHP
  • PHPスクリプトでperlスクリプト

    はじめまして。PHP初心者です。助け舟をお願いします。 PHPスクリプトで、formの表示からデータの受け取り→ファイルに書込み→終了画面の表示ができるスクリプトを書くことが出来ました。 これをphpスクリプト1とします。 POSTで受け取った変数を元に処理した変数を返すperlスクリプトがあります。 これをperlスクリプト1とします。 perlスクリプト1をphpスクリプトにすることは私には困難なため、phpスクリプト1のファイルに書き込む前に、perlスクリプト1を実行→返った変数をphpスクリプトで使用しファイルに書込み→終了画面の表示を行いたいです。 こんなことってできますか?

    • 締切済み
    • PHP
  • perlからphpに変数の値を渡したい

    素人質問で恐縮です。 perlからphpに変数の値を渡す事は可能でしょうか。 同一サーバー内に、/hoge/aaaa.pmと/sample/bbbb.phpがあります。 置き場所はそれぞれで特に関連性はありません。 aaaa.pm内で定義した my $data = "あいうえお"; のような変数を、 bbbb.php内で受け取って使いたいです。 jQuery.ajaxでphpとjs間で変数の受け渡しが可能なのですが、 そんなイメージでやり取りできたらいいなと思っています。 難しい話であれば諦めます。 perlもphpも素人ですが、簡単なやり取りで済みそうなら取り入れたいです。 不明点などありましたら、ご質問ください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perlはc++のようなクラスや構造体は作れない?

    c++で class hoge{ hoge(); int menber; }; というようなクラス定義と hoge x; というようなクラス変数定義のようなのは、Perlではできないのでしょうか。 メンバ関数はべつにいいのですが、その構造を配列にして管理したいのです。 たとえば、個人情報のような。 Perlではスタティックなメンバしか持てないと聞いたのですが、本当ですか?

    • ベストアンサー
    • Perl
  • Perl内でPHPをコールしたい・・・

    Perlで書いたCGI内で、PHPをコールして実行させたいのですが、どうすればよろしいでしょうか? もしくは、逆のパターン(PHP内でPerlをコールして実行させる)でもかまいません。 どなたか、ご教授下さいませ。

    • ベストアンサー
    • Perl
  • PerlとPHPで同一ファイルをファイルロック

    PerlとPHPで同一のファイルを読み書きする必要があるのですが、ファイルロックする機構を作るには互いの言語でmkdirで対応したほうがよいのでしょうか? flock関数がPerlにもPHPにもありますが、これは、PHPのプロセスで実行したロックの状態をPerlで検知したり、または逆のことはできないのでしょうか? もしできないとするとmkdirで同一の機構を作ったほうが良い気もしますが、何か問題などは起きないでしょうか。

    • ベストアンサー
    • PHP
  • PerlでmyというものがありますがPHPではなにになりますか

    Perlではローカル変数の定義でmyをつかいますが、 PHPではなにになるのでしょうか。 また、staticとありますが、これはどういう意味なのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Perlの書き方について

    perlを勉強していて、似たような配列やハッシュの場合でしたらなんとか解決出来たのですが、以下の場合が思うような結果が得られず困っているので、どなたか教えていただきたく質問しました。 例) my $hoge1=10; my $hoge2=9; my $hoge3=8; my $hoge4=7; my $hoge5=6; my $hogehoge; for(1..5){ $hogehoge+=$hoge$_; } 上記の書き方の場合、「$hoge$_」でエラーが出ます。 このような場合は、どのように書けばいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 【php】コールバック関数ってなんですか?

    【php】コールバック関数ってなんですか? コールバック関数ってどういうものなのでしょうか? 個人的になイメージでは このライブラリの、このボタンを押した時 hoge()という関数が実行されるように設計しておいたから ボタンを押した時に何か動作が必要な場合は hoge()という名前で関数を定義しておいてね。 みたいな感じでしょうか?

    • ベストアンサー
    • PHP