In 运算符§

有关中缀 ff,请参阅主要文档 在上下文中

sub infix:<ff>(Mu $aMu $b)

也称为触发器运算符,将两个参数与 $_(即 $_ ~~ $a$_ ~~ $b)进行比较。在左边的智能匹配为 True 之前,求值为 False,此时它求值为 True,直到右边的智能匹配为 True

实际上,左边的参数是“开始”条件,右边的参数是“停止”条件。此结构通常用于仅选取某一部分行。例如

my $excerpt = q:to/END/; 
Here's some unimportant text.
=begin code
    This code block is what we're after.
    We'll use 'ff' to get it.
=end code
More unimportant text.
END
 
my @codelines = gather for $excerpt.lines {
    take $_ if "=begin code" ff "=end code"
}
# this will print four lines, starting with "=begin code" and ending with 
# "=end code" 
say @codelines.join("\n");

在匹配开始条件后,运算符将把相同的 $_ 匹配到停止条件,如果成功,则会相应地执行操作。在此示例中,仅打印第一个元素

for <AB C D B E F> {
    say $_ if /A/ ff /B/;  # OUTPUT: «AB␤» 
}

如果你只想针对开始条件进行测试,并且没有停止条件,则可以使用 *

for <A B C D E> {
    say $_ if /C/ ff *;    # OUTPUT: «C␤D␤E␤» 
}

对于类似 sed 的版本,它不会在开始条件成功后尝试 $_ 停止条件,请参阅 fff

此运算符不能重载,因为它是由编译器专门处理的。