El error simplemente consistía en que una subrutina insertaba variables dentro de una expresión regular sin haber escapado los caracteres especiales previamente, con lo cual se insertaban directamente caracteres del tipo '(', '/', ... directamente dentro de la expresión regular y no funcionaba como era deseado.
Para evitarlo basta con escapar dichos caracteres especiales insertando el texto entre '\Q' y '\E' como bien nos ha sugerido Joaquín (más información en perlop):
my $text_with_special_chars = 'abc$%()/def';
my $start_of_text_to_search = '$%';
$text_with_special_chars =~ /(\Q$start_of_text_to_search\E.+)/;
print $1; # $1 = '$%()/def'
Hummm... ¿y no sería mejor escapar el propio $text?
ResponderEliminarmy $text = '\/|[](){}+-.*?^$!';
print "\Q$text"; # \\\/\|\[\]\(\)\{\}\+\-\.\*\?\^\$\!
Más información en perlop, sección «Quote and Quote-like Operators».