電子書籍の厳選無料作品が豊富!

http://oshiete.goo.ne.jp/qa/7451675.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自体がエラーになっているということは、一体どういうことなのでしょうか?
書き方が違うのでしょうか?

詳しく教えて頂きたいです。

A 回答 (2件)

#!で始まる行は、そのファイルを単独で実行するときの引数指定です。



「perl -c encoding.cgi」というように、明示的にperlインタプリタを起動してファイル指定した場合は、#!の行は基本的に意味を持ちません。

その上で、perlインタプリタが「#!行では -T オプション付になっているのに、-Tオプションなしで実行しようとしている」ということでエラーにしているのです。

チェックの時も、「perl -cwT encoding.cgi」のように、-Tオプションを付けてください。
そうすればエラーにならなくなります。
    • good
    • 0
この回答へのお礼

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

ありがとうございます。

お礼日時:2012/05/04 09:57

エラーメッセージ読んでます?


そんな「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の基本を勉強してからの方がよくないですか?
ここ数日わけもわからずコピペして見当違いなことやってた時間を、良書を読むのに回していたら、だいぶ違っていたと怖もいますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/04 09:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!