2009-06-24 3 views

Répondre

12

Bien sûr, vous pouvez. Recherchez simplement Digest::MD5 pour la partie de hachage et any WAV-related module si vous souhaitez hacher une partie spécifique du fichier (par exemple, ignorer les métadonnées).

3

Utilisez simplement Digest::MD5.

En fonction de vos besoins, Perceptual Hashing peut également vous intéresser. Il vous permet de comparer les fichiers en comparant leurs hachages (les contenus similaires ont des hachages similaires). Cependant, il n'y a toujours pas d'implémentation perl AFAIK.

9

Utilisation du Digest::MD5

use Digest::MD5 qw(md5); 
my $hash; 
{ 
    local $/ = undef; 
    open FILE, "$wav_file_name"; 
    binmode FILE; 
    my $data = <FILE>; 
    close FILE; 
    $hash = md5($data); 
} 

ou vous pouvez utiliser l'interface OO:

use Digest::MD5; 

open FILE, "$wav_file_name"; 

my $ctx = Digest::MD5->new; 
$ctx->addfile (*FILE); 
my $hash = $ctx->digest; 
close (FILE); 
+1

Il vaut bien mieux Slurp en utilisant Fichier :: Slurp: –

+5

Ou ne Slurp pas le fichier entier à tous ... les fichiers WAV peuvent être importants et Digest :: MD5 lire un descripteur de fichier: ouvrir mon fh $, '<', $ thewav ou die "Impossible d'ouvrir $ thewav: $! \ n"; print Digest :: MD% -> nouveau-> fichier_ajout ($ fh) -> hexdigest; – hexten

2

En utilisant File::Slurp avec Digest::MD5:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Digest::MD5 qw(md5_hex); 
use File::Slurp; 

my ($input) = @ARGV; 

write_file "$input.md5", md5_hex(scalar read_file $input, binmode => ':raw'), "\n"; 
19

Il y a module pour elle: Digest::MD5::File. Avec elle, le code est simplifié:

use Digest::MD5::File qw(file_md5_hex); 
my $md5 = file_md5_hex($some_file_name); 
+0

le lien est mort et le code ne fonctionne pas (au moins pour moi sur la version win64 par défaut de l'état actif perl) – Kip

2

qui suit, sur la base a comment by user hexten, travaille pour moi et devrait faire mieux que les réponses qui Slurp le fichier:

use Digest::MD5 qw(md5_hex); 

open my $fh, '<', $file; 
my $md5 = Digest::MD5->new->addfile($fh)->hexdigest; 
close $fh; 

Le sommet (actuellement) -voted réponse suggère d'utiliser Digest::MD5::File, mais cela ne fonctionne pas pour moi au moins sur la dernière version de Windows de ActiveState Perl, et le lien dans la réponse est maintenant mort.

Questions connexes