王様の耳はロバのミ(ry
えと、皆さん知ってて黙ってるんだとは思いますが、言いたくてしょうがないので言わしてください。

>>695 において、binsearch とハッシュについて、「キーの重複はダメ」と書かれてますが、それは謙遜のしすぎです。
低コストな回避策があります。

binsearch については 『区間 [$l, $r) の外には明らかに目的のキーがない』という約束の下で、
[$l, $r) を縮小していくようにループを回してやり、縮小し切ったところで
$l と $r を返す関数仕様にすれば、キーが重複してても無問題(区間 [$l, $r) のデータが全てそのキーに該当する)。
しかもキーが無かった場合も $l == $r によって判別できる。

ハッシュについては、ハッシュ構築時に、$hash{$key} = $value; とするのでなく、
 push @{$hash{$key}}, $value;
としてやれば、foreach (@{$hash{$key}}) { ... } によって、同一キーを持つ全ての要素にアクセスできる。

ついでに、ハッシュを静的に構築したいなら、配列への参照を返す演算子 '[]' を使って、
 my %hash = {
  key1 => [ value1, value2, value3, ... ],
  ...
 }
とすれば可。