ちょっとWindows Http鯖用に簡易検索CGI作った。全文でない。

麻帆良学園中等部2-A/ハッピー☆マテリアル_輝く君へ〜Peace を検索したときに
コード変換がうまく言ってなかったので修正。

#!c:/perl/bin/perl
use strict;
use DirHandle;
use CGI;
use URI::Escape; # %20%32.. <-> uri_unescape, uri_escape
use utf8;
use Encode qw/ decode encode from_to /;
#use Encode::JIS2K;

my $q = new CGI;
my %dirs = qw[
				I:/cdda/       http://5.5.55.55/cdda/
				I:/mp3/        http://5.5.55.55/mp3/
				J:/YouTUBE/    http://5.5.55.55/YouTUBE/
             ];

my $search = $q->param('search');

print $q->header(-charset => "utf8"),
      $q->start_html,
      $q->startform(),
      $q->textfield(-name=>'search',-default=>$search),
      $q->submit(-name=>'Search'),
      $q->endform;

if($search)
{
	foreach(keys %dirs)
	{
		&dir_find($_,$_,$dirs{$_},'');
	}
}

print $q->end_html;


# -------------------------------------------------------------------
sub dir_find
{
	my($base,$target,$dname,$fname) = @_;

	my $name;
	my $dir = new DirHandle $base;
	while ($name = $dir->read)
	{
		next if($name =~ /\.\./);

		my $tfile = "$base/$name";
		my $size = -s "$tfile";

#		from_to( $name, 'shiftjis', 'utf8');   〜 ←化ける
#		from_to( $name, 'shiftjisx0213', 'utf8'); JIS2K入んない
		from_to( $name, 'cp932', 'utf8');

		next unless ("$fname $name" =~ /$search/x);
        my $href = uri_escape($name);

		print $q->a({-href=>"$dname$href"}, "$fname/$name");
		print "$size bytes" if(-f $tfile);
		print $q->br;

		&dir_find($tfile,$target,"$dname$href/", $name) if(-d $tfile);
	}
	$dir->close;
}