だいぶ前に書いたコード久々に見てみたら、onetimeみたいにループ中で毎回Digest->newしてたのでちょっと気になってベンチマークとってみた。サイズにもよるけど、再利用するのに比べて6倍くらい遅いなぁ…… 毎回生成するのはやっぱりコストが大きいね。

use strict;
use warnings;

use Benchmark;
use Digest;

my $count = 50000;

timethese(5, {
    recycle => sub {
        my $md5 = Digest->new('MD5');
        foreach (1 .. $count) {
            my $digest = $md5->add($_)->digest;
            $md5->reset;
        }
    },
    onetime => sub {
        foreach (1 .. $count) {
            my $digest = Digest->new('MD5')->add($_)->digest;
        }
    },
});