dポイントプレゼントキャンペーン実施中!

Solaris上で動作しているPerlスクリプトがあるのですが、
Linux上で動作させることができないので、困っています。

原因を特定するため、Solarisからコピーしたファイルの
中身を、下記コードに入れ替えた場合と、新規にLinux
上で作成した場合を比べてみると、表示結果が異なります。

solarisからコピーしたファイルを表示すると、
「500 サーバ内エラー
サーバー内で、実行中のプログラムが異常終了しました。」
と表示されます。
新規にLinux上で作成したファイルを表示すると、
問題なく表示されます。

これくらいしか分からないのですが、何かアドバイスを
いただけないでしょうか?

# file test.pl <-Solarisからコピーしたファイルを編集
script text executablerl
# file test2.pl <-Linux上で新規作成
test.pl: a /usr/bin/perl script text executable


・コード
#!/usr/bin/perl
print "Content-type: text/plain\n";
print "\n";
print "Hello!World";

exit(0);

A 回答 (5件)

\r\n を \n にするには、例えば vi なら



$ vi -b filename[Enter]
(全ての行の最後に ^M がくっついている)

:%s/[^V][^M]//[Enter]
[^V]のところはコントロール+V
[^M]のところはコントロール+M
画面上は↓こうなります。
:%s/^M//

Enter を押すと ^M が消えますので

:wq

とやって保存します。
    • good
    • 0

もう解決しているかも知れませんが、vi以外でやる方法を書いておきます。



* Perlでやる場合

perl -i.bak -pe 's/\r//' test.pl

バックアップが test.pl.bak で残ります。

* sedでやる場合

sed 's/\r//' tetst.pl >tmp
mv tmp test.pl
    • good
    • 0

noboruが述べているので正しいように思いますが、少し補足を。

500エラーが出力された場合、Webサーバのエラーログにその内容が出力されます。

また、Web経由ではなく、コマンドラインから正しいHTTPレスポンスが出力されるかどうかを確認することもできます。

$ perl test.pl
    • good
    • 0

そのプログラムはどのようにして Solaris のマシンから Linux のマシンへ転送しましたか? (直接 Linux の方から ftp で Solaris の方にログインして転送してますか?)



どうしてこういう質問をするのかというと、間に Windows (あるいは改行コードのデフォルトが CR/LF のOS) が介在していて、 Solaris -> Windows -> Linux という風に ftp で転送した場合、全ての転送をバイナリモードで行わないと改行コードが \n (LF) から \r\n (CR/LF) に変わるからです。

改行コードが変わった場合は cat file.pl とやっても変わったことはわかりません。od -c で改行が \r \n になっていないかを見る必要があります。
    • good
    • 0
この回答へのお礼

ありがとうございます。

実行結果は、下記のようになりました。
これは、改行コードが入っているということになるのでしょうか?

もし、そうでしたら、再度改行コードを\n(LF)にする方法はあるの
でしょうか?

# od -c test.pl
0000000 # ! / u s r / b i n / p e r l \r
0000020 \n p r i n t " C o n t e n t -
0000040 t y p e : t e x t / p l a i n
0000060 \ n " ; \r \n p r i n t " \ n "
0000100 ; \r \n p r i n t " H e l l o !
0000120 W o r l d " ; \r \n \r \n e x i t (
0000140 0 ) ; \r \n \r \n
0000147


# od -c test2.pl
0000000 # ! / u s r / b i n / p e r l \n
0000020 p r i n t " C o n t e n t - t
0000040 y p e : t e x t / p l a i n \
0000060 n " ; \n p r i n t " \ n " ; \n
0000100 p r i n t " H e l l o ! W o r
0000120 l d " ; \n \n e x i t ( 0 ) ; \n \n
0000140

お礼日時:2005/07/08 11:08

コピーしたファイルの実行権限を付け忘れているってことはないですか?

    • good
    • 0

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