请注意,我对不涉及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"}};
谢谢!
答案 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'
];