配列内のリストを効率よく走査するには
Perlで下記のような構造を持つ配列があります。
@array = ({
            id => '1',
           key => 'a'
          },
          {
            id => '2',
           key => 'b'
          },
          {
            id => '4',
           key => 'c',
        })
ここで、@arrayにid=4が存在するかどうかを調べる際、例えば
foreach my $x (@array){
  if($x->{id} == 4) ...
}
等として調べることが可能ですが、これでは処理回数が線形的に増え、効率的とは言えません。
何かピンポイントでid=4を調べる良い方法は無いでしょうか。
教えてください。よろしくお願いします。