Jul*_*lio 5 regex for-loop rakudo raku
我有这个按预期工作的代码:
my @words = 'foo', 'bar';
my $text = 'barfoo';
for @words -> $to-regex {
$text ~~ m/ ($to-regex) {say "matched $0"}/;
}
Run Code Online (Sandbox Code Playgroud)
它打印:
matched foo
matched bar
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试在 for 循环中使用主题变量,如下所示:
for @words { # implicit "-> $_", AFAIK
$text ~~ m/ ($_) {say "matched $0"}/;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
matched barfoo
matched barfoo
Run Code Online (Sandbox Code Playgroud)
使用后缀的相同结果:
$text ~~ m/ ($_) {say "matched $0"}/ for @words; # implicit "-> $_", AFAIK
Run Code Online (Sandbox Code Playgroud)
这是正则表达式中主题变量的特例吗?
它是否应该保存与之匹配的整个字符串?
智能匹配算子有 3 个阶段
$_
.ACCEPTS($_)
那个结果所以它不是正则表达式的特例,它~~
总是有效的。
for 1,2,3 {
$_.print;
'abc' ~~ $_.say
}
# 1abc
# 2abc
# 3abc
Run Code Online (Sandbox Code Playgroud)