Perlのcgiで-wTを記述するとエラーに

このQ&Aのポイント
  • perlのcgiで-wTを記述するとエラーが発生し、エラーメッセージが表示される。
  • エラーメッセージには、-Tが #! の行にある場合は、コマンドラインでも使用する必要があるという内容が含まれている。
  • -wTを削除するとエラーが発生しなくなるが、-wT自体がエラーの原因であるため、どういう意味かを詳しく知りたい。
回答を見る
  • ベストアンサー

perlのcgiで-wTを記述するとエラーに

http://okwave.jp/qa/q7451675.html まだcgiについてわからないことが多く、 色々質問させてもらっているのですが、致命的な?問題がわかりました。 perlにてcgiを作成し、ローカルPCにてコードのチェックのため、 コマンドプロンプトにてC:\adress\test>perl -c encoding とするとエラーが出ます。 ソースを下の行から順にコメントアウトして調べたところ、 一番最初の行の #!/usr/bin/perl -wT で、エラーが出ているということらしいです。 "-T" is on the #! line, it must also be used on the command line at enncoding.cg i line 1. この1文が出てしまいます。 -wTを消すとエラーが出なくなります。 エラーを見つけるための-wT記述だと思っていたのですが、-wT自体がエラーになっているということは、一体どういうことなのでしょうか? 書き方が違うのでしょうか? 詳しく教えて頂きたいです。

  • CGI
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

#!で始まる行は、そのファイルを単独で実行するときの引数指定です。 「perl -c encoding.cgi」というように、明示的にperlインタプリタを起動してファイル指定した場合は、#!の行は基本的に意味を持ちません。 その上で、perlインタプリタが「#!行では -T オプション付になっているのに、-Tオプションなしで実行しようとしている」ということでエラーにしているのです。 チェックの時も、「perl -cwT encoding.cgi」のように、-Tオプションを付けてください。 そうすればエラーにならなくなります。

kmwrod
質問者

お礼

ああ、そういうことだったんですね! 訳も分からず perl -c xxx.cgiと、いつも実行しておりました・・・・ ありがとうございます。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

エラーメッセージ読んでます? そんな「1行ずつコメントアウト」なんかしなくても「at enncoding.cgi line 1.(encoding.cgiの1行目)」て書いてありますよ。「"-T" is on the #! line, (-Tが「#!」の行にある)」とエラーの原因になることも説明ありますし。 なぜ、エラーメッセージで検索したり、perldocを読んだりしようとしないのでしょうか? ただ「エラーを見つけるため」では無いのです。 それぞれに意味があって、結果「エラーを見付けるのに有用」ということです。 perlのオプションは、perldocのperlmanにあります。 perldocには和訳もあります。 http://perldoc.jp/docs/perl/5.10.0/perlrun.pod より -w (略)その他たくさんの疑わしい事に警告を出します。 -T 「汚染」チェックをオンにして、テストできるようにします。(略) セキュリティ上の理由から、このオプションは Perl にかなり早く渡さなければなりません。 これは通常コマンドラインの最初の方につけるか、#! 構造に対応する システムではここに書くかです。 で、ここです 「コマンドラインの最初の方につけるか、#! 構造に対応する システムではここに書くかです」 perl -c encoding と、コマンドラインで実行しているし、そもそもWindowsでの実行なので「#! 構造に対応する~」は無視していいです。なので「コマンドラインの最初の方につける」です。 先に-cオプションだけ起動して、あとから-Tを追加しているので「it must also be used on the command line(コマンドラインでも使わなければならない)」と出ています。 ついでに言えば、perl -c encodingのように実行するなら、#!の行は不要です。 やりたいことがさっさとやりたい、という気持ちはわからなくもないですが、もうちょっPerlの基本とCGIの基本を勉強してからの方がよくないですか? ここ数日わけもわからずコピペして見当違いなことやってた時間を、良書を読むのに回していたら、だいぶ違っていたと怖もいますよ。

kmwrod
質問者

お礼

返信ありがとうございます。 参考書籍はあるのですが、見落としていたか載っていなかったかのどちらかです・・ 持っているのはラクダ本(下巻のみ)ネズミ本、CGIサンプル大全集、CGI/Perl超入門です。 ラクダ本の上巻は必須でしょうか?

関連するQ&A

  • perl niftyについて。use CGI;

    画像アップロードのスクリプトを作ろうと思っているのですが、 use CGI; という記述をすると、ここでエラーに引っかかります。 下はperl checkerでのエラー表示です Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib/perl5/5.00503/sun4-solaris /usr/local/lib/perl5/5.00503 /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /usr/local/lib/perl5/site_perl/5.005 .) at a.cgi line 10. BEGIN failed--compilation aborted at a.cgi line 10. 参考URLはここ http://www.topstudio.co.jp/~kmuto/html/node38.html niftyでは使えないようになってしまっているのでしょうか? また、CGI.pmを使わないファイルアップロードの仕組みを解説しているサイトを知っている方がいたら、教えてくださいませ。

    • ベストアンサー
    • CGI
  • PerのTaintモードエラー

    いつも、参考させて頂きます。 PerlのTaintモードに関しての質問です。 環境:  OS:Windoews XP  WebServer:IIS v5.1  Perl v5.10.0 現象: CGIプログラムにTaintモード(-T)を入れると下記のエラーが発生しております。 エラー内容: 1.ブラウザ:   CGI Error   The specified CGI application misbehaved by not returning a complete set of HTTP headers.   The headers it did return are:   "-T" is on the #! line, it must also be used on the command line at        C:\Inetpub\wwwroot\jimmy\test.cgi line 1.  2.エラーログ   127.0.0.1, -, 2009/05/09, 14:43:50, W3SVC1, XXXX, 127.0.0.1, 15, 286, 485, 502, 0,     GET, /XXXX/test.cgi, -, ソース: #!/usr/local/bin/perl -T print "Content-type: text/html\n\n"; print "Taintモードテスト!"; ※Taintモード(-T)を外すと正常に動作します。 どうしてでしょうか?アドバイスお願い致します。

  • CGIがエラーになります。

    Kento Webさんで配布されているCGI「Shopping Cart」が Software error: Can't call method "param" on an undefined value at ./lib/menu_list.pl line 310. となり動きません。 **** 経緯 **** これまでは、自宅サーバーCentos6.5で運用していましたが、先日Centos7に入れ替えました。(/var/www/配下はそのまま使用) ・OSインストール後 ・SELinuxの無効化 ファイアウォール停止 ・yum -y install httpd (httpdインストール) ・yum -y install php php-mbstring (php、php-mbstringインストール) ・/etc/httpd/conf/httpd.conf (httpd設定ファイル編集)   Options Includes ExecCGI FollowSymLinks (CGI,SSIの許可)   AllowOverride All (.htaccessの許可)   AddHandler cgi-script .cgi .pl (CGIスクリプト.cgi .plの許可) ・ln -s /usr/bin/perl /usr/local/bin/perl (リンクをはる) この状態で確認するに「Shopping Cart」を含め他のCGIも動きません。 Internal Server Error  BEGIN failed--compilation aborted at  End of script output before headers ネットをググってみるにCGI.pmがインストールされていないようなので ・yum -y install perl-CGI その後確認するに、「Shopping Cart」はNGだが他のCGIはOKとなりました。 「Shopping Cart」のエラー Software error:  Can't call method "param" on an undefined value at ./lib/menu_list.pl line 310. 「Shopping Cart」と一緒に配布されている、「check.cgi」での動作チェックは、CGI.pmインストール前は、Internal Server ErrorでしたがCGI.pmインストール後全てOKとなりました。 パーミッションの確認も行いましたが間違いは無いようです。 よろしくお願いします。

    • 締切済み
    • CGI
  • CGI/perlのエラー

    CGIのテストをしています。 サーバーはUbuntu14.04 htmlで <html> <head><title>HTMLサンプル</title></head> <body> ボタンサンプル<br> <form action="cgi-bin/test.cgi" method="post"> <button type="button">ボタン</button><br> <input type="submit" value="送信"> </form> </body> </html> test.cgi #!/usr/bin/perl system = ("date >> webwrite""); 実行すると End of script output befor heads: test.cgi のエラーで止まってしまいます。 ファイル webwriteは作成されています。 何か、終了処理が必要なもでしょうか?

  • cgiがうまく動作しません。

    はじめまして。 現在独学でlinuxの勉強をしている者です。検索をしたり本を読んだりして対策を試みたのですがどうしても解決できないため、質問させていただきます。 環境は redhatlinux9 Apache2.0.40 です。 cgiを置いたディレクトリにブラウザでアクセスすると、 Internal Server Error と出てしまいます。 ログを見ると、 [error] 6099: ModPerl::Registry: Can't locate ./jcode .pl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/li b/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/pe rl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i3 86-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_per l /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at /var/w ww/cgi-bin/bbs/wforum.cgi line 11.! と表示されています。試しにwforum.cgiの11行目以下の require './jcode.pl'; require './fold.pl'; require './wf_init.cgi'; を require 'jcode.pl'; require 'fold.pl'; require 'wf_init.cgi'; と変更してみたところ、今度は (略)Can't locate fold.pl(略) at /var/www/cgi-bin/bbs/wforum.cgi line 12.! というエラーログが表示されました。 perlプログラムの文法、パーミッション、改行コード、FTP転送の際の転送モードは確認済みのため、問題ないと思われます。また、ここの過去ログを参考にして作成した #!/usr/bin/perl print<<EOF Content-type: text/html <HTML><BODY>CGI works Good.</BODY></HTML> EOF というtest.cgiは動作可能でした。 こういった場合、どのような原因が考えられるでしょうか。どうかご教授ください。よろしくお願いします。

  • ワーニング? encoding.pm

    perlで以下のようなエラーが出るのですが、これを出ないようにするにはどうしたらよいのでしょうか? Constant subroutine DEBUG redefined at c:/usr/lib/encoding.pm line 8. Subroutine _exception redefined at c:/usr/lib/encoding.pm line 23. Subroutine in_locale redefined at c:/usr/lib/encoding.pm line 34. Subroutine _get_locale_encoding redefined at c:/usr/lib/encoding.pm line 36. Subroutine import redefined at c:/usr/lib/encoding.pm line 89. Subroutine unimport redefined at c:/usr/lib/encoding.pm line 156.

    • ベストアンサー
    • Perl
  • エラーの意味がわかりません

    cgiが動かないため(自作したものではありません)、DOS上で構文チェックをしたところ、エラーがありました。 エラーを見てもよくわからないので教えてください。 エラーは以下の通りです。 >perl -cw a.cgi syntax error at a.cgi line 2, near ".." top_b.cgi had compilation errors. >perl -cw b.cgi Name "main::wday" used only once: possible typo at b.cgi line 18. Name "main::tt" used only once: possible typo at b.cgi line 261. Name "main::start" used only once: possible typo at b.cgi line 176. b.cgi syntax OK 解決のヒントとかあれば、あわせてアドバイスください。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIエラー

    アクセス解析のCGIを設置しようとしてるのですが、動作確認の際に、以下のエラーが出ます。 The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are: Can't locate config.pl in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:\daishin_www\cgi-bin\access\accview.cgi line 83. CGIを設置するのはこれが初めてなので、このエラー文が何を言いたいのか、どこを直せば動くようになるのか、ぜんぜんわからずに困っています。 どなたか教えて頂けませんか? サーバーは自社サーバーでWindowsです。

    • ベストアンサー
    • CGI
  • CGI設置時に500エラーになります

    CGIを設置しようとしたところ、500 Internal Server Error になります。 共用サーバーIDを使用しています。 CGIファイルは「cgi-bin」の中に入れています。 たとえばこんな簡単なCGIでテストしたのですが、500 Internal Server Errorになってしまいます。 ↓ #!/usr/local/bin/perl print "Content-type: text/html \n\n"; print "Hello"; #!/usr/local/bin/perlを #!/usr/bin/perlにしても結果は同じです。 (サーバーの指定は#!/usr/local/bin/perl) パーミッションは755にしています(705に変えてもダメでした)。 CGIファイルの改行コードはLFにしており、テキスト(ASCII)モードでアップロードしています。 それでも500 Internet Server Errorになります。 サーバーではエラーログが見られないのでみなさんにお聞きしたいのですが、他にどんな原因が考えられるでしょうか?

  • CGIのperlを確認するには??(CATV)

    こんばんわ。 いつもお世話になっています。 ホームページでメールを自動返信するCGIを設置したいのですが毎回 【一行目のperlのパスを自分の環境に合わせて書き直します。   大抵は、「#!/usr/bin/perl」 か 「#!/usr/local/bin/perl」です。   解らない場合はサーバー管理者(もしくはプロバイダー)に確認してください。】 という壁にぶちあたります。 インターネットはCATV(中部ケーブルネットワーク)を使っています。 どのように乗り切ればよろしいでしょうか? 宜しくお願いします。。。

専門家に質問してみよう