■■資料まとめ
■POST取得
■CSVファイル
■クッキー
■配列
■ハッシュ
■サブルーチン
■文字列操作
■正規表現
■ライブラリ
■モジュール
■パッケージ
■ヒアドキュメント
■文字コード
■クエリ文字列
■エンコード/デコード
■sendmail
■
■PostgreSQL実装
■POST取得
(1). POST判断
POST判断後、$queryにクエリ文字列を読み込む。
if($ENV{'REQUEST_METHOD'} eq 'POST'){
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
(2).フォームデータを復元。
foreach $pair (split(/&/, $query)){
($key, $value) = split(/=/, $pair);
この間に、文字のデコード, 特殊文字のHTMLエントリー, 文字列の処理
}
(3).文字のデコード
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
(4).特殊文字のHTMLエントリー
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\n//g;
# ,(カンマ)を.(ドット)に変換
$value =~ s/\,/./g;
(6).最終的にハッシュに代入。
$FORM{$key} = $value;
(7).出力 - フォーム変数をキーとするハッシュから行う。
$FORM{"name_sei_text"}
HTML内に変数名で出力可能。
=======================================================================
■CSVファイル
●ファイル操作
○読み込みモードオープン … open ファイルハンドル, "ファイルパス";
○ファイルクローズ … close ファイルハンドル;
例). open(IN, "log.data");
@file = <IN>; // 配列に読み込む。
close(IN);
通常の読み込みモードでのファイルオープンは、open(IN, "< log.data");
○ファイルオープンモード
読み込みモード: open(FH, "< log.data");
上書きモード: open(FH, "> log.data");
追加書き込みモード: open(FH, ">> log.data");
読み込み書き込み両用オープン open(FH, "+> log.data");
○ファイルへの書き込み。
print ファイルハンドル データ;
●CSVファイルに追加書き込みモードで処理。
POSTで取得したデータを、CSVファイルに書き込む為に、「,」カンマで、データを区切り
1文字列にする。
→構文:
$strings1 = join("デリミタ", 配列 or リスト);
=======================================================================
■サブルーチン
●(関数)サブルーチン
sub サブルーチン名(仮引数, 仮引数, 仮引数,…){
処理;
}
●サブルーチン呼び出し
&サブルーチン名(引数, 引数, 引数, …);
●サブルーチン内の変数
→サブルーチン内でのみ、使用する変数(有効範囲:サブルーチン内のみ。)
my $example = 'testing....です。';
●仮引数がない場合のデータの取得。
@_
例). ($x, $strings) = @_;
=======================================================================
■ライブラリ
●ライブラリ使用。
○構文:
require 'ライブラリパス名';
●ライブラリとは
多用するサブルーチンを別ファイルにして保存する。
requireで呼び出し使用することが可能。
サブルーチンをライブラリにするには、そのサブルーチンファイルを
ファイルに保存して、最終行に、1;を付加する。
→ requireに呼び込み成功の1を与えるもの。
=======================================================================
■モジュール
●モジュールの使用
use モジュール名;
●標準モジュール(標準でインストされているモジュール)
○エラー表示モジュール
use CGI::Carp qw(fatalsToBrowser);
○CGI.pmモジュール
use CGI;
# オブジェクト生成
$q = new CGI;
※データの取得
フォームのname属性の値が、namaeの場合。
$Name = $q->param('name');
→フォームの形式(テキストボックス, オプションボタン,テキストエリア, セレクトボックス)
取得可能。
→複数選択可能な、チェックボックスは、受け取り側で配列指定。
@checkbox_mz_data = $q->param(checkbox_magazine1);
→CGI.pmの詳細は、参考サイト
http://www.futomi.com/lecture/form/cgi-pm.html
●CPANモジュール(インストして使用するモジュール)
→クラスライブラリ
=======================================================================
■パッケージ
●パッケージとは
オリジナル関数(サブルーチン)を、別ファイルにして保存して、
CGI/Perlから別ファイルのサブルーチンを呼び出し、その関数(サブルーチン)
や、変数(スカラ)や配列、ハッシュを使用する。
●パッケージの作成。
・別ファイルにする関数。(ファイル)。
・ファイルの拡張子は、「pl」
・パッケージにする関数(サブルーチン)には、関数の前に、パッケージを宣言
する。
→ package パッケージ名;
・また1ファイルに、パッケージを1つではなく、複数作成することも可能。
・パッケージ宣言された関数の、変数スコープは、package宣言から、次の
パッケージ宣言までとなる。
・ファイルの末尾に、return 1;または、1;を記述。これは、呼び出し側に
真を与える為に行う。
・例).
package pkg1;
sub func(){
print "OK!\n";
}
package pkg2;
sub func2(){
print 'OK2!!!'. "<br>\n";
}
return 1;
●パッケージの呼び出し。
require 'パッケージファイル名';
●パッケージ関数の使用。
&パッケージファイル名::パッケージファイル内関数名;
=======================================================================
■ヒアドキュメント
●構文
print <<EOD;
EOD
=======================================================================
■クエリ文字列取得
●GETで取得(環境変数から)
if($ENV{'REQUEST_METHOD'} eq 'POST'){
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
elsif($ENV{'REQUEST_METHOD'} eq 'GET'){
$query = $ENV{'QUERY_STRING'};
}
以下データ取得は、POST同等。
=======================================================================
■エンコード/デコード
●エンコード
$str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg;
$str =~ tr/ /+/;
●デコード
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
=======================================================================
■sendmail(メール送信)
$from = 'healtree@xxx.xxx';
$to = 'healtree_sp@xxx.xxx';
open(MAIL,"| /usr/sbin/sendmail -t");
print MAIL <<"EOL";
From: $from
To: $to
subject: aa
Content-type: text/plain
sendmail test running.....
EOL
close (MAIL);
print 'メール送信完了:'. "<br>\n";
※件名及び、差し出し人($from)に、日本語文字列(2バイト)を含む場合は、
MIME BASE64に文字コードを変換する必要がある。
→ mimeencodeを行う。
※また本文は、メール送信形式により、JISコード(文字コード)に変換して送信する。