Quiero buscar en las líneas de un archivo para ver si alguno de ellos coincide con uno de un conjunto de expresiones regulares.¿Cómo puedo saber qué parte de una expresión regular de Perl se corresponde con una cadena?
algo como esto:
my @regs = (qr/a/, qr/b/, qr/c/);
foreach my $line (<ARGV>) {
foreach my $reg (@regs) {
if ($line =~ /$reg/) {
printf("matched %s\n", $reg);
}
}
}
pero esto puede ser lento.
Parece que el compilador de expresiones regulares podría ayudar. ¿Hay una optimización de esta manera:
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]
}
}
donde 'special_function' es la salsa especial que me dice que se ha emparejado parte de la expresión regular.