如果您的搜索條件是正則表達式,您應該準備自己編譯的正則表達式。還要注意使用while循環(當讀取文件時)以避免過多的內存使用。如果你想包含任何參數的行:
use strict;
use warnings;
my $searchRe = do {
my $searchCriteria = join '|', map "(?:$_)", @ARGV;
qr/$searchCriteria/i;
};
open my $fh, '<', 'vm.txt' or die $!;
while (<$fh>) {
print if m/$searchRe/;
}
close $fh;
,或者如果你想包含所有的人行:
use strict;
use warnings;
my $searcher = do {
my @searchCriteria = map qr/$_/i, @ARGV;
sub {
# study; # study can help for long lines or lot of regular expressions
for my $re (@searchCriteria) {
return unless m/$re/;
}
return 1
}
};
open my $fh, '<', 'vm.txt' or die $!;
while (<$fh>) {
print if $searcher->();
}
close $fh;
(請注意,你可能要繞$_
如果命令行一個\Q
和\E
參數是字符串而不是正則表達式。)
最後,如果您希望提高許多搜索條件的速度,請使用Regexp::Optimizer。
use Regexp::Optimizer;
my $searchRe = do {
my $searchCriteria = join '|', map "(?:$_)", @ARGV;
Regexp::Optimizer->new->optimize(qr($searchCriteria)i);
};
你想完成什麼?該代碼的重點是什麼? – 2009-02-25 19:34:20
@brian:看起來他想要評估它。 – Axeman 2009-02-25 20:24:18