#! perl -slw use strict; use Time::HiRes qw[ time ]; use Digest::MD5; sub quickMD5 { my $fh = shift; my $md5 = new Digest::MD5->new; $md5->add( -s $fh ); my $pos = 0; until( eof $fh ) { seek $fh, $pos, 0; read( $fh, my $block, 4096 ) or last; $md5->add( $block ); $pos += 1024**2; } return $md5; } open FH, '<', $ARGV[0] or die $!; printf "Processing $ARGV[0] : %u bytes\n", -s FH; my $start = time; my $qmd5 = quickMD5( *FH ); printf "Partial MD5 took %.6f seconds\n", time() - $start; print "Partial MD5: ", $qmd5->hexdigest;