Я хочу найти строки файла, чтобы увидеть, соответствует ли какая-либо из них одному из набора регулярных выражений.
что-то вроде этого:
my @regs = (qr/a/, qr/b/, qr/c/);
foreach my $line (<ARGV>) {
foreach my $reg (@regs) {
if ($line =~ /$reg/) {
printf("matched %s\n", $reg);
}
}
}
, но это может быть медленным.
похоже, что компилятор регулярных выражений может помочь.Есть ли оптимизация, подобная этой:
my $master_reg = join("|", @regs); # this is wrong syntax. what's the right way?
foreach my $line (<ARGV>) {
$line =~ /$master_reg/;
my $matched = special_function();
printf("matched the %sth reg: %s\n", $matched, $regs[$matched]
}
}
, где 'special_function' - это специальный соус, сообщающий мне, с какой частью регулярного выражения было найдено соответствие.