プログラム

#!/usr/local/bin/tkperl
#
#	TkPerl。リターンを押すと検索を実行
#
use Tk;	# Tkモジュール使用を宣言

&dicread;
#
#	メインウィンドウ生成
#
$mw = MainWindow->new;
#
#	テキスト入力枠を作成し、リターンが押されると lookup()が呼ばれるように設定
#
$text = $mw->Entry(-relief => 'sunken', -width => 60);
$text->bind("<Return>", sub { &lookup($text->get); });
$text->pack;
#
#	侯補表示枠を作成
#
$listbox = $mw->Scrolled('Listbox', -setgrid => 1, -height => 10, -foreground => 'blue', -width => 60);
$listbox->pack;

MainLoop;	# ツールキットのメインルーチン

sub lookup {
	local($pat) = @_;
	local($p1,$p2);
	local($max,$min,$mid);
	$min = 0;
	$max = $#e;
	$p1 = "\L$pat";
	@match = ();
	while ($max - $min > 1) {
		$mid = int(($max + $min) / 2);
		$_ = "\L$e[$mid]";
		if ($_ lt $p1) {
		    $min = $mid;
		}
		else {
		    $max = $mid;
		}
	}
	#
	#	単語を検索して侯補表示枠に挿入
	#
	$listbox->delete(0,end);
	for($i=$max;$i<=$#e;$i++){
		last if $e[$i] !~ /^$pat/i;
		$listbox->insert(end,"$e[$i] $j[$i]");
	}
}
sub dicread { # #1と同じ