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 ?