2013-04-30 142 views
3

请注意,我对不涉及grep的解决方案也很开放,我也是Perl新手,但我会尽我所能提供尽可能详细的信息。Perl:哈希中的Grep键

说我有哈希像这样

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

哈希基本上我想在嵌套哈希匹配一些图案中的每个关键,并将其放置在阵列(例如^一*想。 *此$)

我尝试以下,没有工作:

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

谢谢!

回答

5

您发布的代码没有为我编译。我在散列键周围添加了单引号,这些散列键有~,并且我在散列定义之后添加了;

的解决方案是从正则表达式除去双引号并简化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

工作出色。谢谢。 – 2013-04-30 16:50:24

+0

我很乐意提供帮助。 – toolic 2013-04-30 17:01:35