2013-04-30 4 views
3

Notez que je suis ouvert à des solutions ne impliquant pas grep, et je suis nouveau à Perl, mais je ferai de mon mieux pour fournir autant de détails que possible.Perl: Grep touches dans un hachage de hachages

que j'ai un hachage de hachages comme si

%HoH = 
(
    "KeyOne" => { I~Want~This => 1, KeyTwo => 2, I~Also~Want~This => 3}, 
) 

Essentiellement, je veux obtenir toutes les clés dans le hachage imbriquée qui correspond à un certain modèle, et le placer dans un tableau (par exemple^I. * Voulez-vous. * Cette $)

j'ai essayé ce qui suit, qui ne fonctionne pas:

my $regex = qr/"^I.*Want.*This$"/; 
my @keys = grep {defined $HoH {"KeyOne"}{/$regex/} } keys %{$HoH{"KeyOne"}}; 

Merci!

Répondre

5

Votre code n'a pas été compilé pour moi. J'ai ajouté des guillemets simples autour de vos clés de hachage qui ont ~, et j'ai ajouté un ; après la définition de hachage.

La solution est de supprimer les guillemets doubles de la regex et de simplifier la grep:

use warnings; 
use strict; 

my %HoH = 
(
    "KeyOne" => { 'I~Want~This' => 1, KeyTwo => 2, 'I~Also~Want~This' => 3}, 
); 

my $regex = qr/^I.*Want.*This$/; 
my @keys = grep { /$regex/ } keys %{$HoH{"KeyOne"}}; 

use Data::Dumper; 
print Dumper(\@keys); 

__END__ 

$VAR1 = [ 
      'I~Also~Want~This', 
      'I~Want~This' 
     ]; 
+1

fonctionne avec brio. Je vous remercie. –

+0

Je suis heureux d'aider. – toolic

Questions connexes