CGIモジュールの基礎1ではCGIモジュールを使ったCGIスクリプトの基本を解説しました。ここではメソッドへのパラメータの指定方法を解説します。
では、まずはサンプルを見てみましょう。
#!/usr/bin/perl ############################################# # CGIのサンプル4 # Author: "Perl Programming Tips" ############################################# use CGI qw/:standard/; print header('text/html', '200 OK'); print start_html('Hello'); print h1('Hello'); print end_html();
(実行結果はここをクリック)
headerメソッドに明示的にパラメータを渡しています。headerメソッドの第一引数はHTTPヘッダに出力するコンテンツタイプ、第二引数にはステータスコードと説明文を指定します。(デフォルトで上のサンプルで指定している値になるので、特に指定する必要はありませんが、ここでは説明のために指定しています。)
この指定の仕方は関数の引数などと同じなので特に珍しくはないですね。この方法ではパラメータを記述する場所によってパラメータが区別されています。これに対して、パラメータ名を明示することによってパラメータを渡す方法があります。これは「名前付きパラメータ」と呼ばれます。次のサンプルを見てください。
#!/usr/bin/perl ############################################# # CGIのサンプル5 # Author: "Perl Programming Tips" ############################################# use CGI qw/:standard/; print header(-type=>'text/html', -status=>'200 OK'); print start_html(-title=>'Hello'); print h1('Hello'); print end_html();
(実行結果はここをクリック)
headerメソッドのパラメータに「-type=>」というような指定をしています。これが名前付きパラメータです。引数が2つ以上あるような場合は、名前付きパラメータを使うとコードが読みやすくなります。また、名前付きパラメータでしか指定できないパラメータもあるので、極力使うようにした方が良いでしょう。
CGIモジュールは第一引数が「-」で始まる場合は名前付きパラメータであると自動で判断してくれます。名前付きパラメータは大文字、小文字を区別しません。例えば「-Type=>」でも「-TYPE=>」でも同じ意味になります。
また、例えば「-values=>」などの特定のパラメータは、組み込み関数のvalues関数と名前が衝突するのでワーニングが出ることがあります。これを回避したい場合は「-Values=>」などの大文字表記にするのが一つの方法です。
これで予備知識は十分なので、次はコードの解説をしていきます。まずは、HTTPヘッダの出力についてです。HTTPヘッダの出力はCGI::headerメソッドを使います。CGIではHTTPコンテンツの前にHTTPヘッダを自分で出力する必要があります。典型的なものは、
print "Content-type:text/html\n\n"
というものですね。HTTPヘッダの終わりは空行で判断されるので、最後に改行を2つ入れる必要があります。これをheaderメソッドを使って書くと、
print header();
となります。たいていの場合はこれで十分ですが、MIMEタイプなどを変える場合や付加的な情報を付ける場合はパラメータで指定します。では、headerメソッドの詳細な使い方です。
header type
header type, status
header -type=>type, -nph=>nph, -status=>status, -expires=>expires, -cookie=>cookie, -charset=>charset, -attachment=>attachment, -Cost=>cost
次章のHTTPヘッダの生成ではHTTPヘッダについてもう少し詳しく解説します。