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掲載