さてさて、昨日はHello Worldを表示するのにだいぶ苦労しました。


今日は、HTML形式での表示方法です。


昨日は、以下のように書いてテキスト形式での表示。


print "Content-type: text/plain\n\n";


さあ、スタートです。


以下のすくりぷとを入力し、1-2.cgiで保存。


#! c:/perl/bin/perl

#CGIヘッダ出力

print "Content-type; text/html\n\n";

#HTML出力

print "<!DOCTYPE HTML PUBLIC \" -//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>Hello HTML</title></head>\n";
print "<body><p>こんにちは、これはHTML文書の例です。</p></body>\n";
print "<html>\n";



http://127.0.0.1/tendays/1-2.cgi で実行!



ううう


Internal Server Error

なにか間違っているようだ。

エラーログを確認しろ書いてあるぞ。


場所は、apacheインストールディレクトのlogsディレクトリの中のerror.logだ。


早速、確認。



[Thu Nov 30 22:40:07 2006] [error] [client 127.0.0.1] malformed header from script. Bad header=Content-type; text/html: 1-2.cgi


となっている。


Bad header=Content-type; text/html ここがポイントかな。



print "Content-type; text/html\n\n"; のContent-typeの後がセミコロンになっている。


perlでセミコロンは、一番最後に記述するものなのでここが間違っていたのか。


コロンに修正し、再度実行。


‚±‚ñ‚É‚¿‚́A‚±‚ê‚ÍHTML•¶‘‚Ì—á‚Å‚·B


あれ、文字化けしてるぞ。


何々、文字化けする場合があるので、ブラウザのエンコードをshift JISに変更してくださいとな。


はい!変換。



こんにちは、これはHTML文書の例です。



お~表示された。


今日はおしまい。



今日のまとめ


文字列リテラル


print 関数で使われている。


"Hello Perl"等のダブルクォートで囲まれた文字列のこと。


エスケープシーケンス


普通に表示できない特殊な文字を文字列リテラルに入れるとき、\を前におく記法。


print "ダブルクォートは\"です\n";


2番目の"と3番目"どちらが文字列の終わりかわからなくなってしまうので、"の前に

\マーク置く。


その他のエスケープシーケンス。


\n 改行

\t タブ

\' シングルクォート

\" ダブルクォート

\\ \マーク