Perlで2つの配列の両方に含まれる要素を、foreachを使わずに抜き出す方法は?

http://d.hatena.ne.jp/koseki/20031015#1066180360
foreachを使わないっていうのが何を意味しているのかいまいち不明だが、速度を気にするならハッシュを使って

foreach (@a) { $h{$_}|=1 }
foreach (@b) { $h{$_}|=2 }
grep { $h{$_}==3 } keys %h;

とすれば、実行時間O(n+m)で済むんじゃないかな。