ブラウザ上でPerl(CGI)の文法チェックができない場合の対処方法

このQ&Aのポイント
  • ブラウザ上でPerl(CGI)の文法チェックができるようにするための方法について質問があります。telnet を利用できないユーザーのために、フォームでファイル名を入力させ、チェックプログラム内で「perl -wc $filename」を実行して結果を出力させることを試みましたが、実行結果を受け取ることができません。apache のログには実行結果が書かれているため、コマンド自体は正常に動作しているようです。
  • 実行結果を受け取る方法として、open関数を使って「perl -wc $filename |」という形で実行し、結果を取得しようとしましたがうまくいきませんでした。また、バッククオートを使って「perl -wc $filename」と実行し、結果を変数に代入する方法も試しましたがうまくいきませんでした。質問者はこの問題に対して助言を求めています。
  • 質問者は、Perl(CGI)の文法チェックをブラウザ上で行うための解決策を知りたいと考えています。質問者はtelnetを利用できないため、フォームでファイル名を入力し、チェックプログラム内で「perl -wc $filename」を実行し、結果を出力したいと考えています。しかし、実行結果を取得する方法がわからず、質問者は解決策を求めています。
回答を見る
  • ベストアンサー

perl -wc

telnet を利用できないユーザーの為に、ブラウザ上でPerl(CGI)の文法チェックができるようにしています。 フォームでファイル名を入力させ、チェックプログラム内で "perl -wc $filename" を実行して結果を出力させるだけだと思い作成したのですが、実行結果を受け取ることができません。 apache のログには実行結果が書かれているのでコマンドは正常に動作しています。  open(IN, "perl -wc $filename |");  while (<IN>) {   print $_; と  $ret=`perl -wc $filename`; でやってみましたがダメでした。 どなたかご教授願います。 よろしくお願いいたします。

noname#9786
noname#9786
  • Perl
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • tailkuppa
  • ベストアンサー率53% (52/98)
回答No.2

前の発言は質問をよく読んでいませんでした。失礼しました。 手元の環境(unixです)では perl -wc ~の結果は標準エラー出力に出力されるようなので、 $ret = `/usr/local/bin/perl -wc スクリプト 2>&1`; のように、標準出力にリダイレクトしてみたらどうでしょうか?

noname#9786
質問者

お礼

解決しました。 どうもありがとうございました。

その他の回答 (1)

  • tailkuppa
  • ベストアンサー率53% (52/98)
回答No.1

CGI ですよね? 最初に、 print "Content-Type: text/plain \n\n" は入れていますか? これがないと、エラーになったと思います。

関連するQ&A

  • 「-wc」オプションの文法チェックで、警告が出ないようにするには?

    「-wc」オプションの文法チェックで、警告が出ないようにするには? たとえば「temp.pl」というライブラリに変数「$A」が定義されてあり、 それを「temp.cgi」というPerlスクリプトで参照したいとします。 これらを、「-wc」オプションを使って文法チェックをすると、 「変数$Aが一度も設定・参照されてないよ」といった旨の警告が出てしまいます。 この警告を出さないようにするにはどうしたらいいのでしょうか? 警告を出さないようにする記述方法って、なにかあるのでしょうか? それとも出てしまうのは仕方ないのでしょうか? 以下、実際のソースの中身および文法チェック結果です。 よろしくお願いします。 ===temp.plの内容=== #! c:/perl/bin/perl $A = '123'; 1; ===temp.cgiの内容=== #! c:/perl/bin/perl require "temp.pl"; print $A; ===文法チェック結果=== >perl -wc temp.pl Name "main::A" used only once: possible typo at temp.pl line 2. >perl -wc temp.cgi Name "main::A" used only once: possible typo at temp.cgi line 3.

    • ベストアンサー
    • Perl
  • Perlを実行する方法

    Perlを実行するために <?php $ret = exec('/usr/bin/php /usr/local/apache/public_html1/testdir/a.cgi'); print $ret; ?> のように書きましたが、a.cgiは実行されないし$retは空白でした。 execでなくてもよいのですが、普通はPHPの実行中に、ある処理をさせるa.cgiを実行させるにはどうしているんでしょうか? a.cgiの処理が終わるまでphpのprint $ret;のステートメントの実行は待ち状態で、a.cgiの処理結果がTRUEなのかFALSEなのかを得られればさらによいです。

    • 締切済み
    • PHP
  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • PERLからcshellを実行したいのですが

    PERLからcshellを実行したいのですが、UNIXのコマンドラインから直接実行すると上手く行くのですが、ブラウザからでは欲しい結果が表示されず、ログにも何も残りません。 $ret = system ("/bin/csh /home/my47143/.www/test.csh $argv1"); #$ret = 265/ 265 = 1 戻り値は1、いろいろ調べてみてLANG をCに指定して、パーミションも全て777にしてあります。 シェルの内容は、SQLをしてその結果をtest.logに書き込み、後に同じCGIの中で読み込み標準出力をしています。 open( TEXTFILE, "<test.log" ); $line = <TEXTFILE>; print $line; @lines = <TEXTFILE>; foreach ( @lines ) { print $_; } close( TEXTFILE ); コマンドラインから実行すれば、ちゃんとtest.logに結果が書き込まれています。 この書き込まれた結果をそのままにしておけば、ブラウザにその結果も表示されます。 ですが、シェルで引数で渡す度に結果は上書きするはずなのですが、シェルが実行されている気配がありません。 なんででしょうか?教えてください。

  • perlの処理を遅くしたい

    CGI初心者です。わかる方教えてください。 少々古いですがactiveperl apache1.3.12を利用してperlプログラムを自宅のみで使うCGIプログラムをWINDOWS上で起動しています。 処理が長くまた同時に複数の処理をperlで処理します。ブラウザ送信ボタンよりCGIを実行してperl.exeを合計5つぐらい同時に起動します。 タスクマネージャーのプロセスの優先度の設定は実行当初「普通」になっていますが,これを実行当初から「低」にしたいと思っていますが やり方がよくわかりません。CGIの書き方,apacheの設定,ショートカットの書き方でできるんではないかと思っていますが,ご存じの方教えてください。OSはWINXPです。宜しくお願いします。

  • 構文チェックについて

    #!/usr/local/bin/perl $perl = `perl -wc web.cgi`; $perl=~s/[\r\n]/<BR>/g; print <<"END"; Content-type: text/html <HTML> <HEAD><TITLE>PERLCHECK</TITLE></HEAD> <BODY> perl<BR>$perl </BOBY> </HTML> END exit; と以上のように書いてますが。telnet上ではOKと出ますがブラウザでみるとエラーが出ます。 やりたいことは、Telnetを使っての構文チャックではなく、ブラウザ上で構文のチェックは出来ないか模索しています。上記の`UNIXコマンド`の部分で、freeやdf等のコマンドを実行させると実行結果が得られるので、その延長で出来ないかと考えてます。初心者なのですいませんが教えてください。

    • ベストアンサー
    • Perl
  • perlでpostが受け取れない

    perlでCGI を作ってみましたが、POSTでデータが受け取れません。GETは問題ないのですが。read stdin が NULL になります。 ローカルのapache2でテストしています。$ENV{'CONTENT_LENGTH'}がゼロのためだと 思いますが対応が分かりません。 OS:CENTOS6 (VirtualBox) APACHE2.2 Perl 5.10 /var/www/cgi-bin で実行。 呼び出しは <form action='localhost/cgi-bin/uptag.cgi' method='post'"> です。

    • 締切済み
    • CGI
  • cgi(perl)からphp呼出

    どなたかご教授ください。 perlのcgiからsystem関数でphp(コマンドで実行可能なコード)を実行して返値を得たいのですが perlのcgiの実行結果では画面に文字化けを起こしたような結果が帰ってきます。 cgi(perl)からphpを実行するにはどのように すればいいのでしょうか? ご教授ください。

    • 締切済み
    • PHP
  • PerlのCGIとPHPを

     特定のディレクトリのCGIの中にPHP(Apacheのモジュール版)を書き、(CGIで<?php~?>とHTMLを出力させる)Perl/CGIを実行したときにその出力の中に含まれるPHPを実行させたくて、.htaccessに AddHandler application/x-httpd-php cgi AddHandler cgi-script .cgi を書いたのですが、どうやらPHPのAddHandlerの後に書かれているCGIの方が優先され、PHPが実行されず、CGIのみが実行されます。  順序を逆に書いても、今度はPHPが優先されてしまい、どちらか片方しか実行されません。  どうすれば、両方同時に実行させられるでしょうか、教えてください。  それが不可能ならば、とりあえずPerl/CGIからPHPを呼び出して先に実行させるようなことができるのならば教えてください。  ちなみに、httpd.confには拡張子cgiをすべてのディレクトリでCGIとして実行、拡張子phpもすべてのディレクトリでPHPとして実行させるようにAddHandlerされています。 Apache/2.0.58(Windows版) PHP/5.1.6 CGI: ActivePerl 5.88 です。

    • ベストアンサー
    • PHP
  • Perlの開発どうしてますか?

    趣味でPerlで作成しているのですが、満足な環境が得られません。 希望としては、 1,.cgiにて実行結果が得られる。 2,文法エラー箇所を教えてくれる。 3,変数にジャンプすることができる。 いままでPerlDebbugger、秀丸エディタ、メモ帳をつかってきました。 できればフリーでいい環境が得られるソフトがありましたら教えてください。

    • ベストアンサー
    • CGI