[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Omaha.pm] benchmark and md5sum



I often use the same md5 subroutine in all my scripts for various
reasons. Recently I saw another way to read it in, and it appears to
be faster:

#!/usr/bin/perl

use strict;
use warnings;
use Benchmark qw/cmpthese/;
use Digest::MD5 qw/md5_hex/;
$|++;

my $dir   = '/some/dir';
my @files = glob "$dir/*";

cmpthese(
   10,
   {   my_way => sub {
           foreach my $file (@files) {
               next if -d $file;
               open( FH, "<", $file ) or die "blah: $!\n";
               my $slurp  = do { local $/; <FH> };
               my $md5sum = Digest::MD5::md5_hex($slurp);

               # print "md5sum for $file = $md5sum\n";
               close(FH);
           }
       },
       new_way => sub {
           foreach my $file (@files) {
               next if -d $file;
               open( FH, "<", $file ) or die "blah: $!\n";
               binmode(FH);
               my $md5sum = Digest::MD5->new->addfile(*FH)->hexdigest;

               # print "md5sum for $file = $md5sum\n";
               close(FH);
           }
           }
   }
);

Which results in this:

                    s/iter    my_way other_way
my_way      2.04        --            -45%
new_way   1.12       82%        --

So, besides the fact that I suffer from code-reuse, am I reading this
right? I'm not a benchmark guru, but I understand that the results are
displayed from slowest to fastest...

Dave M