作者: 閑舎
日時: 2002/10/01(11:20)
dune <FZH01112@...> さん wrote.

> }else{
>     $/  = "";
>     $buff   = <FILE>;
> }

ここは undef $/; ですね。うちの Linux 環境だと、

$ perl hoge.pl 000text
128MB
11s
$ perl hoge.pl 000text
128MB
8s
$ perl hoge.pl 000text 8192
128MB
8s
$ perl hoge.pl 000text 8192
128MB
9s
$ perl hoge.pl 000text 4096
128MB
6s
$ perl hoge.pl 000text 4096
128MB
6s
$ perl hoge.pl 000text
128MB
6s
$ perl hoge.pl 000text
128MB
5s
$ perl hoge.pl 000text 99999999
128MB
15s
$ perl hoge.pl 000text 99999999
128MB
20s
$ perl hoge.pl 000text 8192
128MB
10s
$ perl hoge.pl 000text 4096
128MB
7s
$ perl hoge.pl 000text 8192
128MB
6s
$ perl hoge.pl 000text 4096
128MB
7s

のようになりました。while read での バッファサイズ 99999999 はかなり効率
が悪いです。txtsearch は 99999999 までを限度に 1 度だけ read するという
使い方をしたので、自分がテストした時はこの辺の効率の悪さが表に出なかった
ようです。ちなみに while でなく 128MB をバッファサイズとして 1 度だけ 
read すると次のようです。

$ perl hoge2.pl 000text
128MB
5s

 OS の違いによって read の実装も違うような感じだし、ここから先はソース
を見ないとわからんですね。

 クラスタサイズないし、Inode Density が 4096 が標準だから 4096 ないし 
8192 程度で read し、while で回すのがやはり無難なのかな?

--
本田博通(閑舎)
テキストとスクリプトの http://rakunet.org/TSNET/