计算grep匹配项的数量?

4
如果我执行以下代码,则 $c 的值会变成 1,但我本来希望它是 2。这是一种简洁的计算 grep 匹配次数的方式。
my %h = (
    "abc" => undef,
    "abcd" => undef,
    "abcde" => undef
);

my $c = 0;
$c++ if grep {/bcd/} keys %h;
print $c;

在这种情况下,正确的计算grep匹配次数的方法是什么?

1
你在考虑使用 $c++ for grep {/bcd/} keys %h; - ikegami
1个回答

13

只需将计数器分配给grep

my $c = grep {/bcd/} keys %h;

来自perldoc

在标量上下文中,返回表达式为真的次数。


如果键中有多个“c”出现怎么办? - AgileDan
1
@perlsufi 正则表达式/bcd/无法匹配字符'c' - TLP
1
抱歉,我指的是用于grep的字符串“bcd”。它是否会匹配所有键中出现的“bcd”?例如,“abcdabcdbcd”? - AgileDan
4
@perlsufi它仅计算Perl列表元素的一个匹配。 - mpapec
1
@perlsufi,grep 过滤标量;grep 不执行正则表达式匹配。因此,它返回剩余标量的数量,而不是一个字符串在其他字符串中出现的次数。 - ikegami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接