3

根据,在列表上下文中,具有正则表达式且具有捕获组和修饰符perlop的匹配运算符将返回捕获列表:m///g

my $str = "8a9b0c"; my @res = ($str =~ m/(\d)/g); print @res;

# Prints "8 9 0"

perlop但是,我在任何一个或prelre任何提及中都找不到替换运算符为什么会改为 - 即使在列表上下文中 - 返回捕获的数量

my $str = "8a9b0c"; my @res = ($str =~ s/(\d)//g); print "@res\n"

prints "3"

为什么以及在哪里记录该行为?

4

2 回答 2

4

来自perlop

在字符串中搜索模式,如果找到,则用替换文本替换该模式并返回进行的替换次数。

列表和标量上下文之间没有区别。所以它会返回替换的数量,然后将其分配给列表。这只是将数字转换为包含该数字的列表。

于 2014-09-05T23:43:49.723 回答
2

来自perlop

  • s/PATTERN/REPLACEMENT/msixpodualgcer

    在字符串中搜索模式,如果找到,则用替换文本替换该模式并返回进行的替换次数。否则它返回 false(特别是空字符串)。

文档没有像操作员那样为列表上下文提供替代规范m//

于 2014-09-05T23:44:25.687 回答