我正在处理Perl中的哈希。
我使用以下语句检查变量是否与哈希表中的键匹配。该语句已经评估为true。所以grep起作用了。但是,现在如何在匹配的地方检索哈希键和值?
if ( grep {/.*$var1*/} keys %my_hash ) {
#print the key and value that results from the grep?
}
答案 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的参数位置已交换