如何获取其键与给定正则表达式匹配的哈希元素?

时间:2011-02-02 13:22:25

标签: perl

如何获取其键与给定正则表达式匹配的哈希元素?没有使用任何模块(例如Tie :: RegexpHash)

如何实现这一目标?

%s = (
        'as2-queen' => 1 ,
        'as1-queen' => 2,
    );


my $regex = qr/queen/ ;

if ( $s{$regex}) {
  print " I am here " ;
}

3 个答案:

答案 0 :(得分:15)

你的问题不是很明确,因为你的问题可能不只是“使用”正则表达式作为哈希键,而是关于获得一些你没有解释过的输出。

我认为您的问题可以改为“如何获取其键与给定正则表达式匹配的哈希元素?”如果是这种情况,以下代码将适用于您:

my $regex = qr/queen/;
print "$_ => $s{$_}\n" for grep $regex, keys %s;

答案 1 :(得分:1)

我猜你正在尝试使用正则表达式匹配哈希中的键。

如果是这样,请在密钥列表中使用grep:


%s = (
        'as2-queen' => 1 ,
        'as1-queen' => 2,
    );

my ($first_matching_key) = grep { $_ =~ /queen/ } keys %s;

print "First matching key is $first_matching key\n";
print "Corresponding value is $s{$first_matching_key}\n";

这是你的意思吗?

答案 2 :(得分:1)

在Perl 5.10.1及更高版本中使用smart matching

use 5.010;
use strict;
use warnings;

my %s = (
        'as2-queen' => 1 ,
        'as1-queen' => 2,
    );


my $regex = qr/queen/ ;

if ($regex ~~ %s) {
    say "I am here" ;
}

# Or perhaps cleaner
if (%s ~~ $regex) {
    say "I am here" ;
}

# More or less equivalent, in pre-5.10 code
if (grep { /$regex/ } keys %s) {
    say "I am here" ;
}