恥ずかしながら、最近までCGIモジュールにVarsメソッド(パラメータをハッシュで受け取れる)があるのを知らなくて、いちいち、
my $par1 = $cgi->param('par1');
my $par2 = $cgi->param('par2');
my $par3 = $cgi->param('par3');
・
・
・
みたいに延々とやってしまっていた。
cgi-lib.plにVars関数があるのはわかっていた(といってほとんど使ったことはない)が、perlで大量にパラメータを送ったりすることがなく、この存在を思いっきり無視していた。
使い方は簡単で、オブジェクトを生成した後に、Varsを呼ぶだけ。
さすが標準モジュール。
use strict;
use CGI;
my $cgi = CGI->new();
%param = $cgi->Vars;
これで%paramに、すべてのキーにパラメータ名を持つハッシュが返される。
$param = $cgi->Vars;
とすると、ハッシュのリファレンスが返される。
私は参照渡しが大好きなのでこっちのほうが使いそう。
同名のパラメータの場合、それぞれをpackされた\0で接続した文字列が返る。
配列として取り出すには、
my @value = split(/\0/, $$param{'key'});
---以下、http://soft.bko.to/perl/A-E/CGI.html より抜粋---
$cgi = new CGI({'key1'=>'value1', 'key2'=>'value2'},...);
パラメタを直接指定してインスタンスを生成。
@in = $cgi->param;
パラメタ名のリストを返す。
$in = $cgi->param($key);
名前$keyを持つパラメタの値を返す。複数の値を持つパラメタの場合はリストを返す。
$in = $cgi->Vars;
全てのパラメタをキーに持つハッシュリファレンスを返す。
%in = $cgi->Vars;
全てのパラメタをキーに持つハッシュを返す。
$cgi->param(-name=>$key, -value=>$value);
$cgi->param(-name=>$key, -values=>@values);
パラメタに値を設定する。-valuesにリストを渡した場合は、複数の値を持つパラメタを設定できる。
$cgi->delete(@keys);
パラメタを削除する。
$cgi->delete_all();
全てのパラメタを削除する。
$cgi->import_names($name_space);
名前空間$name_spaceを生成して、全てのパラメタをインポートする。例えば、$name_spaceが'IN'であれは、パラメタを$IN::fooとか、@IN::fooで読み出せるようになる。CGI::Liteとの互換性を考えないのであれば、この方法でパラメタ読出しを行った方が便利。
$cgi->cookie($key);
名前$keyを持つクッキーの値を返す。
$cgi->cookie(-name=>$key,-value=$value);
クッキーに値を設定してクッキー文字列を返す。下記のパラメタを指定できる。
-expires=>クッキーの有効期限
-path=>クッキーが有効となるパス
-domain=>クッキーが有効となるドメイン
$cgi->save(FILEHANDLE);
パラメタをFILEHANDLEに保存する。読出しは、new CGI(FILEHANDLE)。
$cgi->cgi_error;
CGIの処理中に発生したエラーを返す。HTTPステータスコード形式でフォーマットされるので、下記のような使い方ができる。
my $result = $cgi->cgi_error;
if ($result) {
print $cgi->header(-status=$error);
$cgi->start_html('ERROR');
$cgi->string($error);
exit;
}
$cgi->header;
HTTPヘッダを返す。日本語のHTMLページを表示するには、charsetパラメタが必須なので、必ず下記のパラメタ付きのメソッドを使う。
$cgi->header(-type=>'text/html',-charset=>$charset);
パラメタには、以下のものも指定できる。
-status=>HTTPステータス
-expires=>ページの有効期間(ブラウザの実装によるので、正しく動くか疑わしい)
-cookie=>$cookie
$cookieは、cookieメソッドによって生成されたcookie文字列。複数のcookieを設定する場合は、配列リファレンスを指定する(-cookie->[$cookie1,$cookie2])。
-attachment=>添付ファイル名
添付ファイル:ブラウザに依存するが、ページを表示する代りにファイルに保存するためのプロンプトを表示する。-type=>'application/octet-stream' を指定した方が互換性が高いらしい。IE7で確認する限り、ファイル保存のプロンプトだけが表示され、ヘッダの後にHTMLを送信しても無視される。
$cgi->start_html;
HTMLヘッダ(~まで)を返す。下記のパラメタを指定する事によって~内のタグを生成できる(使いそうなものだけ抜粋)。
-title=>$title
-meta=>%metas ※例:$metas{'http-equiv'}='Content-Type';
$metas{'content'}='text/html';
$metas{'charset'}='shift_jis';
-style=>{'src'=>$css_file}
-script=>$script_source | {-language=>'javascript',-src=$script_file}
$cgi->end_html;
を返す。
その他、内のタグを生成するメソッドが多数あるが、当然のことながらまともなレイアウトを作るのは大変なので、別の手段で生成する事を推奨。下記の関数は使えそう。
redirect(-uri=>$url,-nph=>1,-status=>$stat);
$urlにリダイレクトするHTTPヘッダを出力する。
-nph=>1:no-parse-headerを使用する場合に指定する。IISでは必須。
-status=>$stat:HTTPステータスを指定する。リダイレクトする場合は、下記の3種類のうちどれか。
301 Moved Permanently
302 Found
303 See Other
この関数をインポートするには、use CGI qw/:cgi/
my $par1 = $cgi->param('par1');
my $par2 = $cgi->param('par2');
my $par3 = $cgi->param('par3');
・
・
・
みたいに延々とやってしまっていた。
cgi-lib.plにVars関数があるのはわかっていた(といってほとんど使ったことはない)が、perlで大量にパラメータを送ったりすることがなく、この存在を思いっきり無視していた。
使い方は簡単で、オブジェクトを生成した後に、Varsを呼ぶだけ。
さすが標準モジュール。
use strict;
use CGI;
my $cgi = CGI->new();
%param = $cgi->Vars;
これで%paramに、すべてのキーにパラメータ名を持つハッシュが返される。
$param = $cgi->Vars;
とすると、ハッシュのリファレンスが返される。
私は参照渡しが大好きなのでこっちのほうが使いそう。
同名のパラメータの場合、それぞれをpackされた\0で接続した文字列が返る。
配列として取り出すには、
my @value = split(/\0/, $$param{'key'});
---以下、http://soft.bko.to/perl/A-E/CGI.html より抜粋---
$cgi = new CGI({'key1'=>'value1', 'key2'=>'value2'},...);
パラメタを直接指定してインスタンスを生成。
@in = $cgi->param;
パラメタ名のリストを返す。
$in = $cgi->param($key);
名前$keyを持つパラメタの値を返す。複数の値を持つパラメタの場合はリストを返す。
$in = $cgi->Vars;
全てのパラメタをキーに持つハッシュリファレンスを返す。
%in = $cgi->Vars;
全てのパラメタをキーに持つハッシュを返す。
$cgi->param(-name=>$key, -value=>$value);
$cgi->param(-name=>$key, -values=>@values);
パラメタに値を設定する。-valuesにリストを渡した場合は、複数の値を持つパラメタを設定できる。
$cgi->delete(@keys);
パラメタを削除する。
$cgi->delete_all();
全てのパラメタを削除する。
$cgi->import_names($name_space);
名前空間$name_spaceを生成して、全てのパラメタをインポートする。例えば、$name_spaceが'IN'であれは、パラメタを$IN::fooとか、@IN::fooで読み出せるようになる。CGI::Liteとの互換性を考えないのであれば、この方法でパラメタ読出しを行った方が便利。
$cgi->cookie($key);
名前$keyを持つクッキーの値を返す。
$cgi->cookie(-name=>$key,-value=$value);
クッキーに値を設定してクッキー文字列を返す。下記のパラメタを指定できる。
-expires=>クッキーの有効期限
-path=>クッキーが有効となるパス
-domain=>クッキーが有効となるドメイン
$cgi->save(FILEHANDLE);
パラメタをFILEHANDLEに保存する。読出しは、new CGI(FILEHANDLE)。
$cgi->cgi_error;
CGIの処理中に発生したエラーを返す。HTTPステータスコード形式でフォーマットされるので、下記のような使い方ができる。
my $result = $cgi->cgi_error;
if ($result) {
print $cgi->header(-status=$error);
$cgi->start_html('ERROR');
$cgi->string($error);
exit;
}
$cgi->header;
HTTPヘッダを返す。日本語のHTMLページを表示するには、charsetパラメタが必須なので、必ず下記のパラメタ付きのメソッドを使う。
$cgi->header(-type=>'text/html',-charset=>$charset);
パラメタには、以下のものも指定できる。
-status=>HTTPステータス
-expires=>ページの有効期間(ブラウザの実装によるので、正しく動くか疑わしい)
-cookie=>$cookie
$cookieは、cookieメソッドによって生成されたcookie文字列。複数のcookieを設定する場合は、配列リファレンスを指定する(-cookie->[$cookie1,$cookie2])。
-attachment=>添付ファイル名
添付ファイル:ブラウザに依存するが、ページを表示する代りにファイルに保存するためのプロンプトを表示する。-type=>'application/octet-stream' を指定した方が互換性が高いらしい。IE7で確認する限り、ファイル保存のプロンプトだけが表示され、ヘッダの後にHTMLを送信しても無視される。
$cgi->start_html;
HTMLヘッダ(~まで)を返す。下記のパラメタを指定する事によって~内のタグを生成できる(使いそうなものだけ抜粋)。
-title=>$title
-meta=>%metas ※例:$metas{'http-equiv'}='Content-Type';
$metas{'content'}='text/html';
$metas{'charset'}='shift_jis';
-style=>{'src'=>$css_file}
-script=>$script_source | {-language=>'javascript',-src=$script_file}
$cgi->end_html;
を返す。
その他、内のタグを生成するメソッドが多数あるが、当然のことながらまともなレイアウトを作るのは大変なので、別の手段で生成する事を推奨。下記の関数は使えそう。
redirect(-uri=>$url,-nph=>1,-status=>$stat);
$urlにリダイレクトするHTTPヘッダを出力する。
-nph=>1:no-parse-headerを使用する場合に指定する。IISでは必須。
-status=>$stat:HTTPステータスを指定する。リダイレクトする場合は、下記の3種類のうちどれか。
301 Moved Permanently
302 Found
303 See Other
この関数をインポートするには、use CGI qw/:cgi/

コメントする