• 締切済み

#!/usr/bin/perl --

IEでPerlのgciにアクセスすると 500 Internal Server Error だったので、 #!/usr/bin/perl の次に -- を加えて再びIEでアクセスするとエラーはありませんでした。 普通に#!/usr/bin/perlのソースで正常に動作するように したいのですが、解決策は分かりませんか? -- というのはどういう意味ですか? そうしてみれば動くことがあると聞いて試したものです。

みんなの回答

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.3

改行コードはOSごとに決まっています。 よって、設定変更で変えられるものではありません。 CR+LFのまま使いたいのならWindows上のサーバーで動かしましょう。 Windowsの改行コードはCR+LF (\x0D\x0A) Linuxの改行コードはLF (\x0A) MacOSの改行コードはCR (\x0D)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

ファイルの転送モードを正しく設定して下さい。 Windowsからサーバーにcgiのソースをアップロードする際、サーバーからWindowsにcgiのソースをダウンロードする際に、FTPの転送モードを「テキストモード」で行って下さい。 アップロードの場合には、Windowsで編集して改行が「CR」「LF」になっているソースが「LF」のみの改行に変更されて転送されます。 ダウンロードの場合には、サーバー上で改行が「LF」になっているソースが「CR」「LF」の改行に変更されて転送されます。 改行コードが「CR」「LF」のままバイナリモードでサーバーに転送すると、「CR」が邪魔をしてシェルがperlを起動できず、サーバー内エラー(500 Internal Server Error)が起きます。 つまり、以下のような事が起こっています。 「--」を付けない場合「/usr/bin/perl[CR]」は存在しないから起動できずエラー。 「--」を付けた場合「/usr/bin/perl --[CR]」は「/usr/bin/perl」が存在するのでperlを起動し「--[CR]」はperlに渡され、正しく起動出来たように見える。(「起動出来たように見える」と言うだけで、本当は正しくない) なお、スクリプト(2行目以降)部分の各行の行末に[CR]が付いていた場合、スクリプトの書き方によってはperlが期待した動作をしない(文字列比較の判定式の結果が狂うなど)場合があるので、cgiがまともに動かない事があります。

ninmurai
質問者

補足

「--」というのはPerlですか?Apacheですか? 「--」改行の直前が「--」なら、「--」をその環境での 改行として扱うということですか? サーバのOSはLinuxです。普通は*.cgiはLFでないと動かないらしいですか、CRLFでも動作するようにPerlかApacheで設定できませんか?

  • koppepann
  • ベストアンサー率45% (38/83)
回答No.1

サーバーによるのですが、 #!/usr/bin/perl でエラーが出るならば、 #!/usr/local/bin/perl ではないでしょうか・・・

ninmurai
質問者

補足

Perlのパスは間違いありません。 *.cgiの改行コードをWindowsからLinuxに変更すると #!/usr/bin/perl -- にしなくても #!/usr/bin/perl で動作しましたが、 #!/usr/bin/perl で、かつ、改行コードをWindowsで 動作する環境にしたいと思っています。 どこを変更すればよいでしょうか?