[Mew-dist 11590] Re: immv to large size directory
Kazumasa Utashiro
utashiro at example.com
1999年 12月 1日 (水) 14:27:14 JST
From: Kazu Yamamoto (山本和彦) <kazu at example.com>
Subject: [Mew-dist 11567] Re: immv to large size directory
Date: Tue, 30 Nov 1999 22:46:34 +0900
> > while (defined($i = readdir(MDIR))) {
> > $max = $i if ($max < $i and $i =~ /^\d+$/);
> > }
> >
> > の方が速くないでしょうか?
>
> フォルダにはどうせ ^\d+$ にマッチするファイルが圧倒的という仮定をおけ
> ば、そういう気もします。
>
> どうなんでしょう? > 歌代さん
組み込み演算子と正規表現の実行速度の違いを考えないといけないので、必ず
しも圧倒的でなくてもいいかもしれません。
どちらがいいかは、効果次第じゃないでしょうか。劇的な改善が見られるので
あればそうしてもいいし、それほどでも無いのであればより論理的な表記の方
が望ましいと思います。
ファイル名には空文字列はないと考えられるので、
while (defined($i = readdir(MDIR))) {
if ($i !~ /[^\d]/ and $max < $i) {
$max = $i
}
}
という手もあるかも。論理的で効率的でもありそうだけど、決して読みやすく
ないのはなぜだ? :-)
--utashiro
p.s. "Writing Efficient Programmings" の中で Jon Bentley 先生は、
Logical test should be arranged such that inexpensive and
often successful tests precede expensive and rarely successful
test.
と仰っています。"often successful" の部分は switch 文みたいなものを想
定しているので、上のケースには当てはまりません。
Mew-dist メーリングリストの案内