perl 5.8.8 で GuardScope::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使ってなかった><