uttsu.com > CGI/SSI >
ItemCheckのソース
index.cgi
#!/usr/local/bin/perl
# ItemCheck - 指定されたキーワードが含まれる項目を表示
# Copyright (C) Takashi Utsunomiya. All Rights Reserved.
# http://uttsu.com/
# 2003.04.12 ver 1.00
# - 作成開始
# - 完成
use strict;
my $data_file = 'data.cgi';
my @item;
my %form;
main();
exit;
sub main {
get_form();
my $target = $form{q};
if ($target) {
@item = load_item();
do_check($target);
} else {
put_form();
}
}
sub not_found {
print "Content-type: text/html\n\nNot Found\n";
exit;
}
sub load_item {
open(IN, $data_file) or die $!;
@_ = <IN>;
close(IN);
return @_;
}
sub do_check {
my $target = shift;
$target =~ s/ / /g;
foreach my $key (split(/\s+/, $target)) {
$key =~ tr/+/ /;
$key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
eval { Jcode::convert(\$_, 'sjis'); };
for(0 .. @item-1) {
$item[$_] = '' if ($item[$_] !~ /$key/ || $item[$_] =~ /^\s*#/);
}
}
print "Content-type: text/html\n\n<ul>\n";
foreach(sort @item) {
chomp;
print "<li>$_\n" if ($_);
}
print "</ul>\n";
}
sub put_form {
print <<END;
Content-type: text/html
<title>ItemCheck</title>
<h1>ItemCheck</h1>
<form action=./ method=get>
<input type=text name=q>
<input type=submit>
</form>
END
}
sub get_form {
$_ = $ENV{QUERY_STRING};
$_ = <STDIN> if ($ENV{REQUEST_METHOD} =~ /^post$/i);
@_ = split(/&/);
foreach (@_) {
my ($property, $value) = split(/=/);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$form{$property} = $value;
}
}
Copyright (C) Takashi Utsunomiya. All Rights Reserved.
2003.04.15掲載