假设我有一个Supply
、Channel
、IO::Handle
或类似流的文本源,并且我想扫描它以查找与正则表达式匹配的子字符串。我不能确定匹配的子字符串是否与chunk boundaries
交叉。总长度可能是无限的,不能被拖入内存。
一种可能的方法是,如果我可以实例化一个正则表达式匹配引擎,并在它保持状态的同时向它提供文本块。但我看不出有任何方法可以做到这一点——我只看到了运行匹配引擎直到完成的方法。
这可能吗?
经过更多的搜索,我可能已经回答了自己的问题。具体来说,Seq.comb
似乎能够组合块并延迟处理它们:
my $c = supply {
whenever Supply.interval(1.0) -> $v {
my $letter = do if ($v mod 2 == 0) { "a" } else { "b" };
my $chunk = $letter x ($v + 1);
say "Pushing {$chunk}";
emit($chunk);
}
};
my $c2 = $c.comb(/a+b+/);
react {
whenever $c2 -> $v {
say "Got {$v}";
}
}
另请参阅用于构造此示例的并发特性。