J'ai un hachage de hasch que j'ai besoin de filtrer. J'ai trouvé comment faire une recherche mais cela n'a pas répondu à ma question.
Dis avoir un hachage de hash comme celui-là: p>
my %HoH = ( flintstones => { husband => "fred", pal => "barney", town => "springfield" }, simpsons => { husband => "homer", wife => "marge", kid => "bart", town => "springfield", }, );
3 Réponses :
Vous avez d'abord besoin de trouver les clés des éléments que vous souhaitez supprimer: alors vous les supprimez: p> ou Utilisation d'une tranche de hachage: p>
Dans le grep code> Vous traitez des chaînes (
keys% hoh code>) comme hashrefs.
@THissuiSblackNot, corrigé.
Comme toujours, plus propre et plus élégant que la solution que je travaillais. J'imagine que vous pouvez écrire ce genre de choses dans votre sommeil.
Le Var que je reçois est une référence afin que la ligne devienne: Supprimer $ hoh -> {$ _} pour grep {$ hoh -> {$ _} {town} eq 'springfield'} clés (% {$ hoh})
Toujours quelle est cette syntaxe? Puis-je faire quelque chose comme l'impression $ _ pour ('Test1', 'Test2')
Oui. C'est ce qu'on appelle un "modificateur de déclaration". Documenté dans PerlSyn
Si vous avez besoin de grep code> ou
plan code> via HASHES, vous pouvez envisager d'utiliser
grepp code> ou
mapp code> de liste :: paires . Avantage, c'est qu'il n'est plus nécessaire de mentionner plus la variable de hachage d'origine dans le bloc de code Grep / carte, ce qui le rend plus "fonctionnel". Donc, votre problème pourrait être résolu comme ceci:
use List::Pairwise qw(grepp);
%HoH = grepp { $b->{town} eq 'springfield' } %HoH; # $a is the current key, $b is the current value
for my $key (keys %HoH) { delete $HoH{$key} if(!$HoH{$key}{town}); (OR) delete $HoH{$key} if($HoH{$key}{town} !~ m/springfield/); } Use any one of the delete option you will get your answer...