ファイル演算子とopenとベンチマーク

ファイル存在の確認はファイル演算子である、-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%       --

なぜか、どちらも半分ぐらいになった。なんでや・・・