假设我有一个Supply
、Channel
、IO::Handle
或类似的类似流的文本源,我想扫描它以查找与正则表达式匹配的子字符串。我不能确定匹配的子字符串不会跨越块边界
。总长度可能是无限的,不能被吞入内存。
一种可能的方法是,如果我可以实例化一个正则表达式匹配引擎,并在它保持状态的同时向它提供文本块。但是我没有看到任何方法可以做到这一点——我只看到运行匹配引擎完成的方法。
这可能吗?
经过更多的搜索,我可能已经回答了我自己的问题。具体来说,Seq. com b
似乎能够组合块并懒惰地处理它们:
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}";
}
}
另请参阅用于构造此示例的并发特性。