use Digest::MD5::File qw(dir_md5_hex file_md5_hex url_md5_hex);

    my $md5 = Digest::MD5->new;
    my $digest = $md5->hexdigest;

    my $digest = file_md5($file);
    my $digest = file_md5_hex($file);
    my $digest = file_md5_base64($file);

    my $md5 = Digest::MD5->new;
    my $digest = $md5->hexdigest;

    my $digest = url_md5($url);
    my $digest = url_md5_hex($url);
    my $digest = url_md5_base64($url);

    my $md5 = Digest::MD5->new;
    my $digest = $md5->hexdigest;

    my $dir_hashref = dir_md5($dir);
    my $dir_hashref = dir_md5_hex($dir);
    my $dir_hashref = dir_md5_base64($dir);


Get MD5 sums for files of a given path or content of a given url.


None by default. You can export any file_* dir_*, or url_* function and anything Digest::MD5 can export.

use Digest::MD5::File qw(md5 md5_hex md5_base64); # 3 Digest::MD5 functions print md5_hex('abc123'), "\n"; print md5_base64('abc123'), "\n";



my $md5 = Digest::MD5->new; $md5->addpath('/path/to/file.txt') or die "file.txt is not where you said: $!";

or you can add multiple files by specifying an array ref of files:



addpath()s each file in a directory recursively. Follows the same rules as the dir_* functions.

my $md5 = Digest::MD5->new; $md5->adddir('/home/tmbg/') or die "See warning above to see why I bailed: $!";


my $md5 = Digest::MD5->new; $md5->addurl('') or die "They Must Be not on tour";

file_* functions

Get the digest in variouse formats of $file. If file does not exist or is a directory it croaks (See \s-1NOFATALS\s0 for more info)

my $digest = file_md5($file) or warn "$file failed: $!"; my $digest = file_md5_hex($file) or warn "$file failed: $!"; my $digest = file_md5_base64($file) or warn "$file failed: $!";

dir_* functions

Returns a hashref whose keys are files relative to the given path and the values are the \s-1MD5\s0 sum of the file or and empty string if a directory. It recurses through the entire depth of the directory. Symlinks to files are just addpath()d and symlinks to directories are followed.

my $dir_hashref = dir_md5($dir) or warn "$dir failed: $!"; my $dir_hashref = dir_md5_hex($dir) or warn "$dir failed: $!"; my $dir_hashref = dir_md5_base64($dir) or warn "$dir failed: $!";

url_* functions

Get the digest in various formats of the content at $url (Including, if $url points to directory, the directory listing content). Returns undef if url fails (\s-1IE\s0 if LWP::UserAgent's $res->is_success is false)

my $digest = url_md5($url) or warn "$url failed"; my $digest = url_md5_hex($url) or warn "$url failed"; my $digest = url_md5_base64($url) or warn "$url failed";



By default files are opened in binmode. If you do not want to do this you can unset it a variety of ways:

use Digest::MD5::File qw(-nobin);


$Digest::MD5::File::BINMODE = 0;

or at the function/method level by specifying its value as the second argument:


my $digest = file_md5_hex($file,0);


In some cases you may want to have your data utf8 encoded, you can do this the following ways:

use Digest::MD5::File qw(-utf8);


$Digest::MD5::File::UTF8 = 1;

or at the function/method level by specifying its value as the third argument for files and second for urls:


my $digest = file_md5_hex($file,$binmode,1);



It use's Encode's encode_utf8() function to do the encoding. So if you do not have Encode (pre 5.7.3) this won't work :)


Instead of croaking it will return undef if you set \s-1NOFATALS\s0 to true.

You can do this two ways:

$Digest::MD5::File::NOFATALS = 1;

or the -nofatals flag:

use Digest::MD5::File qw(-nofatals);

my $digest = file_md5_hex($file) or die "$file failed";

$! is not set so its not really helpful if you die().

RELATED TO Digest::MD5::File…

Digest::MD5, Encode, LWP::UserAgent


Daniel Muey, <>


Copyright 2005 by Daniel Muey

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.