# Perl のベンチマークを気軽にする Benchmarks 書いた Perl でベンチマークとるなら {{cpan: Benchmark}} モジュールが鉄板。僕も Benchmark モジュールを使ったベンチ用のテンプレートを用意していて、必要になったらそれを書き換えてベンチをとるのだけど、ベンチ自体はたまにしか書かないから、`cmpthese` とか `timethese` とかごっちゃに記憶してたりしてそらで書けなくて困る。ほんとはもっと思いついた時にぱっとワンライナーで書けるくらいに気楽にならないかなとずっと思ってた。 そういうわけで、Perl のベンチをもっと気軽にするモジュールを書いた。 ## Benchmarks {{cpan: Benchmarks}} という名前がだいぶ攻めてるが、最初 Benchmark::Simple とかにしようかと思ったけど、あれ、Benchmark::Lite だったっけ?、みたいなのが嫌だったので、`s` つけるだけにした。 ルーチン同士を比較するベンチをとっても簡単にする。 use Benchmarks sub { my $x = 1; +{ times => sub { $x * $x }, raise => sub { $x ** 2 }, }; }; 関数とか一切覚える必要なし。 `use Benchmarks;` して、比較したいコードが並んだハッシュリファレンスを返すコードリファレンスを引数に与えるだけ。 カウントを指定したい場合は、第三引数でくっつける。 use Benchmarks sub { my $x = 1; +{ times => sub { $x * $x }, raise => sub { $x ** 2 }, }; }, 1000_000; use 時点であらゆることをしようとするので、ベンチマークの内容によっては逆に使い勝手が悪いかもしれない(が、たいていはこれでいけますよね)。 もし、通常の Benchmark モジュールの方を使いたくなった場合は、use Benchmarks の引数をはずせば、Benchmarkモジュールの関数群はそのまま全てエクスポートされているので、まんま使える。 use Benchmarks; timethis(1000_000, sub { bless +{}, 'Foo' } ); レッツベンチナウ!