[Edit][Create New]
[ IndexPage / ネットとプログラミング / CGI / 便利なスクリプト片(未整理) / CheckFile.pm ]

CheckFile.pm

package CheckFile;

sub check{
	use Check;
	use Jcode;
	use Tool;
	use Error; 

	my($file, $form) = @_;
	my(@error, %error);
	my(%seen, @key);

	open(FILE, $file) or Tool::error("$file: オープン不可");

	while(<FILE>){
		chomp; tr/\r\n//;

		next if /^\s*#/; # コメント行
		next if /^\s*$/; # 空行

		# ルールの読み込み($keyが$valueでなければ、$msgを出力)
		my($key, $value, $msg) = split;

		my $keyname;
		if($key =~ s/([^(]+)\(([^)]+)\)/$1/){
			$keyname = $2;
		}	

		# ルール1行分のチェック
		my $error = Check::check_one($form, $key, $value);

		if($error){
			# エラーメッセージ生成
			my $keyname = $keyname || $key;
			$msg = "$keyname:=:$msg";
			push(@key, $key) unless $seen{$key}++; # 現れた順番を保持
			$error{$key} = $msg;
		}
	}
	
	if(@error = @error{@key}){
		Error::error([@error{@key}]);
	}
	1;
}
1;