3

请注意,我也愿意接受不涉及 grep 的解决方案。

假设我有一个像这样的哈希值

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

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

我尝试了以下方法,但没有奏效:

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

谢谢!

4

1 回答 1

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'
        ];
于 2013-04-30T16:43:24.143 回答