Perl:在哈希散列中使用Grep键

时间:2013-04-30 16:30:39

标签: regex perl hash grep

请注意,我对不涉及grep的解决方案持开放态度,而且我是Perl的新手,但我会尽我所能提供尽可能详细的信息。

说我有哈希像这样的哈希

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

基本上我想获取嵌套哈希中与某些模式匹配的每个键,并将其放在一个数组中(例如^ I. *旺旺。*这个$)

我尝试了以下操作,但没有效果:

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

谢谢!

1 个答案:

答案 0 :(得分: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'
        ];