我正在尝试将文件读入临时变量,根据数组中的项过滤文件。我这样做是通过打开一个文件并在while循环中读取文件,运行另一个循环(非常糟糕的想法IMO)来检查内容是否与数组匹配,如果是这样,该行被丢弃并进入下一个线。
它有效,但当有20,000行输入时它很糟糕。我正在阅读10个项目的数组,这实际上将它变成了200,000行文件。
有没有办法更快地处理?
答案 0 :(得分:1)
将数组项目拼接成一个大的正则表达式:例如,如果您的数组是qw{red white green}
,请使用/(red|white|green)/
。 $1
变量会告诉您哪一个匹配。如果您需要完全匹配,请锚定终点:/^(red|white|green)$/
。
答案 1 :(得分:1)
假设您想要在找到数组中的任何项目时丢弃一行,List::MoreUtils中的any
函数会在找到匹配后立即停止搜索数组。
use List::MoreUtils qw(any);
while (<>) {
my $line = $_;
next if any { $line =~ /$_/ } @list;
# do your processing
}
如果您碰巧知道阵列中哪些项目更有可能出现在您的行中,您可以相应地对数组进行排序。
您还应该Benchmark您的方法,以确保您的优化工作是值得的。