dai*_*isy 3 regex algorithm perl
我正在编写一个日志解析器,逐行读取日志,我有大约100个规则,它的工作原理如下:
if ($line =~ /blabla (field1) (field2)/)
{ do something }
else if ($line =~ /something (field1) (field2) else/)
{ do something }
Run Code Online (Sandbox Code Playgroud)
但是对于一个大的日志文件,将一行与这么多规则匹配可能会很慢O(n)
.
那么,对这个问题有什么建议吗?由于它不仅仅是普通的字符串和通配符匹配,我不知道是否有任何我可以使用的数据结构.
也许可以使用调度表?
my %handlers = (
blabla => \&blabla,
something => \&something,
);
while (<>) {
my ($keyword) = $line =~ /^(\S+)/
or next;
$handlers{$keyword}
or next;
$handlers{$keyword}->($line);
}
Run Code Online (Sandbox Code Playgroud)
我相信你的优化还为时过早.
你试过这个名义上的大日志文件吗?它真的太慢了吗?然后,如果它实际上是太慢,使用类似devel :: NYTProf一个分析工具,以找出究竟是正在缓慢.