オレンジネットユーザーズ
CGI勉強会

第6回 実際にCGIスクリプトを作ってみる Perlプログラミング編(1)

Since 1996.7.14 / Last Update 1996.7.14

1.サーバーからメッセージをスクリプトに取り込む

前回の説明と同様にデータ a=1&b=2&c=34 がサーバに渡されることにします。 (漢字が入力された場合は入力されたコード系で処理します)

(1)cgi-lib.plを利用する場合

require "cgi-lib.pl"; #C言語のインクルード文みたいの
&ReadParse(*dat);     #入力されたメッセージが連想配列datに格納される

(2)個人的にプログラミングする

¥記号は実際には\(バックスラッシュ)です。  #に続く文字列はコメントです。
#!/usr/bin/perl
#
#サーバーの予約変数=CGI環境変数
# REQUEST_METHOD : フォームのMETHOD="〜"が入ります
# QUERY_STRING   : GETのときのメッセージが入ります
# CONTENT_LENGTH : POSTのときのメッセージ長が入ります
#                   この長さ分だけ標準入力からメッセージを
#                   読み込みます

$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; #小文字を念のため大文字にする
if ($ENV{'REQUEST_METHOD'} eq "GET") {
    $dat = $ENV{'QUERY_STRING'};
} else {
    read(STDIN, $dat, $ENV{'CONTENT_LENGTH'});
}

@buf = split('&',$dat);
foreach $item (@buf) {
  ($var,$value) = split('=',$item);
  $value =~ tr/+/ /; #半角の空白を元に戻す
#%xxのアスキーコードを文字に直す
#半角記号や漢字はこの形式に化けているので
  $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
  $value =~ s/</&lt;/g; #タグを戻す
  $value =~ s/>/&gt;/g; #
  $value =~ s/\x0d\x0a/\x0a/g; #DOSの改行コード(CR/LF)をLFのみにする
  $value =~ s/\x0d/\x0a/g;     #Macの改行コード(CR)をLFにする
                               #\x0d=CR \x0a=LF

  $itm{$var} = $value;
}

$a = $itm{'a'};
$b = $itm{'b'};
$c = $itm{'c'};

exit;
この例では,何もしないので具体的なものは次回からとします。

参考資料

  1. 初めてのPerl ソフトバンク社
  2. フォームとCGI
    (http://w3.lab.kdd.co.jp/technotes/WWW/CGI/index.html)
  3. Perlライブラリ(Copyright 1994 Steven.E.Brenner)
  4. HTML&CGI入門 エーアイ出版

[HOME][メニュー] [5][7]

kibita@orange.or.jp