ファイル存在の確認はファイル演算子である、-fを使うと思うのだけど、
openの戻り値を見ても出来るから、もしかしたら・・・と思ってベンチマークとってみた。
use strict; use Benchmark qw(cmpthese); my $filepath = "bench.pl"; cmpthese(10_000, { 'operator' => sub{ if(! -f $filepath){ die; } }, 'open' => sub{ my $FH; if(!(open($FH, '<', $filepath) && close($FH))){ die; } } });
E:\Users\ryozi\Desktop>bench.pl
Rate open operator
open 7728/s -- -38%
operator 12563/s 63% --もしかしてもクソもありませんでした。早いなぁ。
システムディスクであるC:\(SSD)は、E:\(HDD)と同じぐらいの速度。
読み書きの早さは段違いなのに、ファイルの存在チェック程度ならどちらもかわらないんですね。
ディスク上のファイルデータを指し示すインデックス情報がどこにあるか考えれば当たり前か。
C:\>bench.pl
Rate open operator
open 7911/s -- -37%
operator 12563/s 59% --
無駄と思いつつ、RAMディスク(F:\)
F:\>bench.pl
Rate open operator
open 4929/s -- -26%
operator 6676/s 35% --なぜか、どちらも半分ぐらいになった。なんでや・・・