検索条件が正規表現の場合は、独自のコンパイル済み正規表現を用意する必要があります。また、過度のメモリ使用を避けるために、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);
};
何を達成しようとしていますか?そのコードのポイントは何ですか? –
@brian:それは彼がそれを評価したいと思うように見えます。 – Axeman
ええ、なぜですか?どのようにするかを尋ねることは、しばしば間違った質問です。私は彼が達成しようとしていることを知りたい。 –