最近の更新

Perl の基本

忘れた頃にPerlプログラムを作るので、いつも同じところでつまずき、堂々巡りしている気がします。ということで、そのPerlについていつも疑問に思う点について整理してみます。プログラマではないので用語はいい加減です。勘違いなどもあるかもしれません。

HTMLのフォームとの関連

method = POST とか method = GET  って何

フォームに入力されたデータの受け渡し方法には二種類あって、一つはPOSTでもう一つがGETです。デフォルトはGETです。

GETはURLに ? をくっつけて、その後にdata1=x&data2=y などとしてだらだらとデータをCGIに送ります。

POSTはURLとデータを区別して、別のかたまりとして送ります。

データ量が多い場合はPOSTを使います。

フォームから受け取ったデータはどこから受け取る

GET の場合は 環境変数 QUERY_STRING から

POST の場合は標準入力 からデータを受け取ることが出来ます。

具体的にはどうやって受け取ればいい

GETの場合は

$data = $ENV{'QUERY_STRING'};

POSTの場合は

read (STDIN, $data, $ENV{'CONTENT_LENGTH'});

で受け取れます。(標準入力から、CONTENT_LENGTHにセットされた文字数分だけデータを読み込むという意味)

あとは受け取ったデータ

$data

を好きなように加工すればいいだけです。まとめてしまえば簡単ですが、ここが私にとっては第一の関門でした。

データの分離と加工

$data は data1=x&data2=y というかたまりなのでそのままの形では役に立ちません。$dataを& で分割し、さらに=で分割して変数と値のセットを取り出さないと個々のデータとしては使えません。

そのためには

foreach $set (split(/&/,$data)){
($key, $value) = split(/=/, $set) ;
$FORM{$key} = $value;
}

とすれば、OKです。

$FORM{"data1"} = x
$FORM{"data2"} = y
$FORM{"data3"} = z

という風に代入されます。

2行目は$($key) = $value; では駄目なんでしょうか?$FORM{"data1"} と書くのはなんだか面倒な気もするのですが・・・。

でも、とりあえず、データを取り出せればなんでもいいです。どうせコピー&ペーストして使うだけなので。

文字のデコード

それから、文字のデコードも必要です。

$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;

+ であらわされたスペースを元に戻しています。

あと、16進数であらわされた文字コードを元の文字に戻しています。

CGI.pm

 

**********************

目次(ホーム)

その他の項目