最低限の文法とCGI用ヘッダー出力
[HOME] [BACK] [NEXT]ここでは前述の「hpl.cgi」で使っている最低限のperl文法とCGI用ヘッダーの出力について述べます。
1.print文と標準出力
print文は標準出力ストリームに出力するためのステートメントです。
perlは、WebServerにより起動された場合、標準出力に出力されたデータはWebServerに渡されます。
WebServerが受け取った標準出力データは、ブラウザに送信されます。つまりperlではこのprint文でブラウザに表示させたい文字やhtmlデータを出力するわけです。
書式としては「print」の後に「半角スペース」その後に出力するデータを記述し、 最後に文の終わりを示す「;」を必ず付けます。データは「,」で連結できます。print文の後の半角スペースの代わりに、出力データを()で囲んでもOKです。perlは多くの組み込み関数で同様の()が使えます。
2.シングルクウォート文字とダブルクウォート文字
print "<HTML>Hello perl !</HTML>";
の行で「"」で囲んだ文字列の事をダブルクウォート文字と呼びます。また「´」で囲んだ文字の事をシングルクウォート文字と呼びます。 ダブルクウォート文字とシングルクウォート文字の違いは以下の様になります。 ### ダブルクウォート文字 **<メタ文字を使える>** 文字列内にメタ文字を埋め込んでそのメタ文字の効果を使用できる。 全部は示しませんがよく使うメタ文字は ¥n(改行文字)、¥b(バックスペース) ¥r(復帰)、¥t(タブ) ¥l(次の文字を小文字にする)、¥u(次の文字を大文字にする) **<$か@で始まる変数を埋め込むと変数展開される>** $(スカラー変数)や@(配列変数)で始まる文字は変数として展開されます。例えば
$abc="文字です"; print "これは$abc";
と記述すると
これは文字です
と表示されます。メタ文字の効果を無効にしたり変数展開させないためには、ダブルクウォートの中で「¥」を「¥」という文字として認識させたり、「$」や「@」をそのまま文字と認識させたりするには、直前に「¥」を付加します。例えば
print "このりんごは¥¥50です";
は
このりんごは¥50です
と表示されます。
シングルクウォート文字
<改行も含めてすべて文字と認識される>
例えば
print ´このりんごは¥50です¥n´;
は
このりんごは¥50です¥n
と表示されます。
<「´」をそのまま表示するには>
「´」の前に「¥」を置きます。例えば
print ´I don¥´t know.´;
は
I don´t know.
と表示されます。 **<「¥´」と表示させるには>** シングルクウォートの中では¥の前に¥が付いていても文字の「¥」として認識される 例外が有りますので、例えば
print ´¥¥´´;
では¥¥が「¥」とみなされてエラーとなってしまいます。 そこで
print ´¥¥¥´´;
とすると正しく
¥´
と表示されます。
3.ヘッダー出力
$|=1; print "Content-type: text/html","¥n¥n";
の1行目は、標準出力をバッファリングしないですぐにフラッシュするための文です。又2行目が、CGI用ヘッダー出力文です。ここで重要なのはダブルクウォートの中で「¥n」を2回続けて書いて、改行出力を2回行っている事です。CGIではヘッダーの後の空の1行でヘッダー文字列とデータとの区切りが認識されます。
このヘッダーは、ブラウザにhtmlコンテンツであることを伝えるヘッダーです。Content-typeとしてはtext/html以外にも様々なものがあります。特筆すべきは、JavaScriptの発展にともなって制定された「application/json」だと思います。これはJSON(JavaScriptObjectNotation)形式のデータの固まりを、ブラウザがページ全体をリロードすることなく、部分的にブラウザサイドのコードがうけとれる様にするために生まれた規格です。JSONのやり取りをする仕組みを利用することで本当に動的なWeb画面が簡単に作れるようになりました。興味のある方はJQuery(JavaScriptのモジュール)について調査されることをお勧めします。