如何获取其键与给定正则表达式匹配的哈希元素?没有使用任何模块(例如Tie :: RegexpHash)
如何实现这一目标?
%s = (
'as2-queen' => 1 ,
'as1-queen' => 2,
);
my $regex = qr/queen/ ;
if ( $s{$regex}) {
print " I am here " ;
}
〜
答案 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" ;
}