2013-04-30 235 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