さてさて、昨日は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 タブ
\' シングルクォート
\" ダブルクォート
\\ \マーク