我想过滤以以下元素@array开头的元素@search:
my @array = "aaaaa" .. "fffff";
my @search = "aaaa" .. "cccc";
.put for @array .grep: /^ @search /;
Run Code Online (Sandbox Code Playgroud)
问题是需要19秒.所以,我"预编译"的regex对grep,整个程序是这样的:
my @array = "aaaaa" .. "fffff";
my @search = "aaaa" .. "cccc";
my $search = "/@search.join('|')/".EVAL;
.put for @array .grep: * ~~ /^ <$search> /;
Run Code Online (Sandbox Code Playgroud)
现在需要0.444秒.
问题:是否有内置的Perl 6方法来做这些事情?像插入junction一个regex......
我以前只工作bash正则表达式grep,sed,awk等努力后,Perl 6 regexes我有一个印象,即他们的工作慢于我所期望的,但可能的原因是,我处理这些错误.我做了一个简单的测试,以比较类似的操作Perl 6和bash.这是Perl 6代码:
my @array = "aaaaa" .. "fffff";
say +@array; # 7776 = 6 ** 5
my @search = <abcde cdeff fabcd>;
my token search {
@search
}
my @new_array = @array.grep({/ <search> /});
say @new_array;
Run Code Online (Sandbox Code Playgroud)
然后我印刷@array到一个命名的文件array(具有7776线),由指定的文件search具有3条线(abcde,cdeff,fabcd),并提出了简单的grep搜索.
$ grep -f search array
Run Code Online (Sandbox Code Playgroud)
在两个程序产生与预期相同的结果后,我测量了他们工作的时间.
$ time perl6 search.p6 …Run Code Online (Sandbox Code Playgroud)