哈希表中的perl grep匹配键

时间:2019-04-17 14:09:23

标签: perl hash

我正在处理Perl中的哈希。

我使用以下语句检查变量是否与哈希表中的键匹配。该语句已经评估为true。所以grep起作用了。但是,现在如何在匹配的地方检索哈希键和值?

if ( grep {/.*$var1*/} keys %my_hash ) {
  #print the key and value that results from the grep?
}

2 个答案:

答案 0 :(得分:4)

您可以在以下情况下提取所有匹配的键:

if (my @matches = grep /.*$var1*/, keys %my_hash) {
    my @values = @my_hash{@matches};
}

另外,/.*$var1*/很奇怪。您是否要将最后一个星号应用于变量的最后一个?另外,如果没有.*,则在开始时使用/g不会有任何作用:/$var1*/可以达到相同的效果(并且可能更快)。

答案 1 :(得分:0)

if (@captarr= grep {/.*$var1*/} keys %my_hash ) {
}

@captarr = grep (/.*$var1*/, keys %my_hash)是2参数函数;
第一个是正则表达式,第二个是要应用正则表达式的数组,
返回匹配的数组,就好像第二个arg一样。数组是由该数组组成的一个字符串,在全局范围内进行搜索, 如果没有匹配项,则返回nul。 与@captarr = $my_str ~= /.*$var1*/相似,但LHS〜= RHS的参数位置已交换