根据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"
为什么以及在哪里记录这种行为?
答案 0 :(得分:4)
来自perlop
:
在字符串中搜索模式,如果找到,则用替换文本替换该模式,返回替换次数。
列表和标量上下文之间没有区别。所以它返回了覆盖的数量,然后将其分配给列表。这只是将数字转换为包含数字的列表。
答案 1 :(得分:2)
来自perlop
:
s/PATTERN/REPLACEMENT/msixpodualgcer
在字符串中搜索模式,如果找到,则用替换文本替换该模式,返回替换次数。否则返回false(特别是空字符串)。
文档不提供像m//
运算符那样的列表上下文的替代规范。