Perl5:Alimenter un hashage de tableau à partir de 2 tableaux

Bonjour,

je dispose de 2 tableaux: @fichiers et @md5sum , ordonnés (= dans le même ordre).
je veux créer le hashage des noms de fichiers par somme de contrôle md5: les clés sont les md5sums, les valeurs ( possibilité de plusieurs par clé ) sont les noms de fichier.

donc je veux construire ( avec pairwise de List::MoreUtils ):
le hashage "%nom_par_md5_de"
qui contiendra:

# Clé = somme de contrôle # Valeur = tableau de noms ff7ce5853ee799bff82a176313292d54 => ['/home/joseph/tmp/pdf/166.pdf', '/home/joseph/tmp/pdf/24.pdf', etc.. ];

J’en suis là et je ne trouve pas comment écrire: ajouter ce nom au tableau anonyme valeur de cette clé:

sub creer_hashage_md5_noms { # reçoit les références à 2 tableaux, clés: md5, valeurs=noms # renvoie un hashage clé=md5, valeur= tableau de noms # les clés seront uniques, les valeurs dans un tableau anonyme my ($md5_ref, $noms_ref)=@_; my %nom_par_md5_de = pairwise { push $nom_par_md5{$a} @{$b} ; #élément $b d'un tableau anonyme; } @$md5_ref @$noms_ref ; }; # FIN de creer_hashage_md5_noms

Au fait, peut-on écrire:

(par exemple: @tableau= qw/c1 v1 c2 v2 … cn vn/ )

Je pense qu’il y a quelque chose à ajouter à l’expression:
$nom_par_md5{$a}
du genre @ ou [], avec éventuellement une flèche… mais si je pense avoir à peu près assimilé les base de la lecture( à voir avec la pratique !), je suis encore paumé avec l’écriture de ce genre de structure, aggravé dans mon cas par la structure pairwise et l’utilisation des références des tableaux.

je continue à chercher,

Merci pour votre aide.

Suite:
J’ai trouvé ceci:

pairwise {
    push @{ $nom_par_md5{$a} }, @{$b} 
} @$md5_ref @$noms_ref ;  # élément $b d'un tableau anonyme;

Suite 2:
push ne doit pas être la bonne méthode, car dans le bloc pairwise, se traitent les éléments scalaires, 1 par 1 pour chaque tableau, un peu comme le fait map avec 1 seul tableau.
Dans ce cas, je devrai sans doute utiliser un compteur de valeurs pour chaque clé.
Dois-je envisager alors de renoncer à utiliser pairwise ?

pairwize ne me semble pas être une bonne idée :

Dommage que tu ai des doublons dans tes md5, sinon je pense qu’un zip (issue de List::MoreUtils) de tes deux listes évaluées comme un hash aurait suffit.

Je pense (pas essayé) qu’il faudrait plutôt faire :

my %nom_par_md5_de = map { $md5_ref->[$_] => $noms_ref[$_] } (0..$taille);

Mais là pour chaque checksum on ne garde que la dernière valeur, il y a peut être mieux mais là à première vue je ferrais :

my %nom_par_md5_de = map { $_ => [] } @{$md5_ref};
map { push @{$nom_par_md5_de{$md5_ref->[$_]}}, $noms_ref[$_] } (0..$#{$md5_ref});

Ou alors avec pairwize peut être que ça, ça le ferrait :

my %nom_par_md5_de = map { $_ => [] } @{$md5_ref};
pairwize { push @{$nom_par_md5_de{$a}}, $b } @{$md5_ref}, @{$noms_ref};

Merci MisterFreez

effectivement, je dois revoir ma copie dans son ensemble, dés que possible.