Digest::MD5の使い方。
大量の画像ファイルを比較するときに,画像を一回一回読み込むよりも全てのファイルをMD5でハッシュ値にして比較した方が速いんでないのと思ってみて使ってみる。(ホントにそうなのか知らないけど)
とりあえずCPANからインストール。
$ cpan $ install Digest::MD5
・・・とやってみたら既に入ってるらしい。
標準なのねMD5て。
で,画像ファイルを読み込んでハッシュ値を出力するスクリプトはこのようにできる。
use Digest::MD5; open FILE, 'hoge.bmp' or die "hoge.bmp open error!"; binmode FILE; # バイナリモードにしないとダメ my $md5 = Digest::MD5->new->addfile(*FILE)->hexdigest; close FILE; print 'hoge.bmp : ', $md5, "\n";
ファイルの比較には,生成したMD5ハッシュ値をキーとした連想配列を作成して,
if( exists $dbase{$md5} ){ # 同じ画像ファイルであった場合の処理 }else{ # 同じ画像ではなかった場合の処理 }
として処理をした。
Perlはホントに楽だなぁ。