假设我有Supply、Channel、IO::Handle或类似的流式文本源,并且我想扫描它以查找与正则表达式匹配的子字符串。我无法确定匹配的子字符串不会交叉chunk boundaries。总长度可能是无限的,并且无法被放入内存中。
实现这一点的一种方法是,如果我可以实例化一个正则表达式匹配引擎,并在保持其状态的同时为其提供文本块。但我看不到任何方法可以做到这一点——我只看到运行匹配引擎完成的方法。
这可能吗?
Owe*_*wen 11
经过更多搜索后,我可能已经回答了我自己的问题。具体来说,它似乎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}";
}
}
Run Code Online (Sandbox Code Playgroud)
另请参阅用于构建此示例的并发功能。
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |