perl 5.8.8 で GuardとScope::Guardを比較してみた。関数が終了したタイミングでコールバックが走るようにした状態で比較。Guardはスコープ終了時に走るscope_guard()とダイナミックガードであるguard()両方で試してみた。
use strict;
use Benchmark qw(cmpthese);
use Scope::Guard;
use Guard;
cmpthese(500_000, {
scope_guard => sub {
my $guard = Scope::Guard->new(sub { 1 });
},
guard_dynamic => sub {
my $guard = guard { 1 };
},
guard => sub {
scope_guard { 1 };
}
});
結果はGuard.pmの*圧勝*
Rate scope_guard guard_dynamic guard
scope_guard 204918/s -- -61% -71%
guard_dynamic 531915/s 160% -- -24%
guard 704225/s 244% 32% --
mlehman恐るべし。
DBIx::Classもこれ使えばいいのに。 Scope::Guard使ってなかった><
コメント