0

を介してコマンドラインから実行できるプレーンな perl スクリプトがありますperl -w test.pl。次に、Web ブラウザーからアクセスできる mod_perl2 スクリプトを作成します。後者で前者を呼び出し、出力をブラウザーに送信して、フラッシュするようにしたいと考えています。

mp2 スクリプトには、mod_perl であるためシバン行がありませんperl。また、呼び出すとsystem('perl -w c:\\path\\to\\test.pl')次のエラーが発生します。

    「perl」は内部コマンドまたは外部コマンドとして認識されません。
    操作可能なプログラムまたはバッチ ファイル。

パス変数にあるため、何らかの理由でわかりません。おそらく、Apache が実行されているアカウントには当てはまりません。

経由で perl 実行可能ファイルを呼び出さずに、スクリプトを実行してその出力をキャプチャする方法はありますsystem()か? つまり、既にロードされているインタープリターを使用するものですか?

4

5 に答える 5

1

mod_perlの問題は別として、現在のperlインタープリターの場所はにあり$^Xます。mod_perlで実行していない場合は、この方法でperlを見つける必要があります。もちろん、mod_perlの内部では、apacheに焼き付けられているため、おそらくこれは必要ありません。

%PATH%について言及している人もいますが、私はそれをお勧めしません。Perlへのフルパスを見つけて、%PATH%に依存せずに明示的に使用してください。それをハードコーディングするか、構成に設定するかはあなた次第です。

于 2009-10-08T23:36:11.950 に答える
0

Perl バイナリが存在する場所を見つける必要があります (Unix では、which perlWindows では、Perl icond を検索してコマンド ライン パスを検索するか、perlがインストールされているディレクトリを検索します - たとえば、「c:\program files\myPerlDistro\bin\perl.exe」 "

qx//次に、そのフル パスを(出力が失われるため、システムを使用しないでください) 呼び出しに明示的に追加するか、そのパスを Apache の PATH 変数に追加する必要があります。

2 番目のオプションは、EmbPerl を使用することです。これには、他のスクリプトをインプレース実行し、それらの出力を含める Execute ディレクティブがあり、同じインタープリターで使用できます。mod_perl の下で実行されます。

于 2009-10-07T20:52:24.540 に答える
0

明らかに問題は、が実行%PATH%されているアカウントの にhttpdへのパスが含まれていないことperlです。PerlSetEnvhttpd.confを使用して設定できます。

于 2009-10-07T21:18:04.133 に答える
0
do "/path/to/test.pl";

また

require "/path/to/test.pl";

ファイルの内容を読み込んで評価します。

1 つの注意点requireは、ファイルを評価すると "true" が返されることです。これを行う通常の方法"1;"は、スクリプトの最後に a を配置することです。

于 2009-10-07T20:40:19.430 に答える
-1

.plこれが Win32 の場合 (タグが示すように) 、標準の Windows 機能 (たとえば、レジ​​ストリをハックするか、エクスプローラー ウィンドウで [ツール] > [フォルダー オプション] > [ファイルの種類] に移動) を介して拡張機能を Perl に関連付けることはできませんか?

于 2009-10-08T12:46:37.990 に答える