No has guardado una expresión regular. Sigue siendo una cadena de caracteres.
Esto es lo correcto:
Using perl Syntax Highlighting
$i = qr(hola);
if ("holaatodos" =~ $i) {
print "POSITIVO";
}
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
El operador qr() coge una expresión como si fuera un patrón y la convierte en una expresión regular, que podemos guardar en una variable escalar, para luego utilizar en otras expresiones regulares.
Incluso podríamos escribirlo así:
Using perl Syntax Highlighting
if ("holaatodos" =~ /$i/) {
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
con lo que se parece más a una operación de expresiones regulares, al tener delante los delimitadores '//'.
Naturalmente, esto también es cierto:
Using perl Syntax Highlighting
$i = "hola";
if ("holaatodos" =~ /$i/) {
print "POSITIVO";
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En este caso, la variable escalar guarda una cadena de caracteres, y luego en la expresión regular es interpolada y tratada como un patrón.