# Benchmark のお供に Devel::ModuleDumper
<ご注意>
ここで紹介するモジュールは、当初 Devel::ModInfo という名前でしたが、そのモジュール名は CPAN 上にすでに存在していたので、{{cpan: Devel::ModuleDumper}} に改名しました。打消しになっているのはそういう理由です今後は {{cpan: Devel::ModuleDumper}} でよろしくお願いします。
</ご注意>
ずいぶんあたたかくなってきて、寒さにめっぽう弱い自分としては本当に助かる今日この頃ですがみなさんいかがお過ごしですか。僕は先日、自家製ガスパチョに感動しました。暑くなるとうまいものってありますよね 🍺
## Devel::ModuleDumper
さて、Devel::ModInfo {{cpan: Devel::ModuleDumper}} というモジュールを書いてみました。なんかのスクリプトを実行したとき、END フェーズで、よしなにロードしてるモジュール一覧とバージョンを表示するものです。
$ perl -d:ModuleDumper -MData::Dumper -e 'print "foo!\n"'
foo!
Perl 5.012002
Carp 1.17
Data::Dumper 2.125
Exporter 5.64_01
おそらく、夏とガスパチョのごとく、ベンチマークスクリプトと相性が良いです。
[crypt_benchmark.pl]
use strict;
use warnings;
use Benchmarks sub {
use Digest::HMAC_SHA1 qw(hmac_sha1_hex);
use Digest::HMAC_MD5 qw(hmac_md5_hex);
my $STR = '@test123';
my $KEY = 'ABC';
{
'hmac_sha1' => sub { hmac_sha1_hex($STR, $KEY); },
'hmac_md5' => sub { hmac_md5_hex($STR, $KEY); },
'crypt' => sub { crypt($STR, $KEY); },
};
};
上記のようなベンチマークスクリプトがあったとして、以下のような出力になります。
$ perl -d:ModuleDumper crypt_benchmark.pl
Benchmark: running crypt, hmac_md5, hmac_sha1 for at least 1 CPU seconds...
crypt: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 108196.23/s (n=114688)
hmac_md5: 1 wallclock secs ( 1.10 usr + 0.00 sys = 1.10 CPU) @ 195490.00/s (n=215039)
hmac_sha1: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ 111346.60/s (n=114687)
Rate crypt hmac_sha1 hmac_md5
crypt 108196/s -- -3% -45%
hmac_sha1 111347/s 3% -- -43%
hmac_md5 195490/s 81% 76% --
Perl 5.012002
Benchmarks 0.05
Carp 1.17
Digest::base 1.16
Digest::HMAC 1.03
Digest::HMAC_MD5 1.01
Digest::HMAC_SHA1 1.03
Digest::MD5 2.39
Digest::SHA 5.47
Exporter 5.64_01
Exporter::Heavy 5.64_01
MIME::Base64 3.08
Time::HiRes 1.9719
ベンチマーク結果の後の、「Perl 5.012002」の行以降が、Devel::ModInfo {{cpan: Devel::ModuleDumper}} によるものです。
際どいベンチマークの時、バージョンが問題になったりしやすいので、簡単に付与できると良さそうだなあということで書いてみました(必要になった時に手で書いても大したものではないですが)。取り急ぎベンチマークスクリプト以外にもなんでも使えるので試してみてください。
ではでは。