Perl:在哈希表中搜索键的值(hash of hashes)

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"}};

感谢您!
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'
        ];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接