Esto está más descrito en
perlre. Aquí va un esbozo:
- El modificador m indica que el texto a analizar es multilínea. Esto quiere decir que los caracteres especiales '^' y '$' dentro de la expresión regular, en vez de coincidir con el comienzo y final de todo el texto, ahora coinciden con el principio y final de cada una de las líneas contenidas en ese texto
- El modificador s trata a todo el texto como una sola línea (s de 'single'), por lo que entonces el comodín '.' coincide también con los caracteres de final de línea.
El resultado que te sale al principio es el mismo porque '\s' coincide con cualquier "espacio en blanco", y eso también lo es un carácter de fin de línea:
Using perl Syntax Highlighting
$texto = "esto es un\nensayo en perl\nparece que resulta";
$texto =~ s/\s/./g;
print $texto; # esto.es.un.ensayo.en.perl.parece.q.resulta
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En resumen, que
m te serviría si quisieras incluir dentro de la expresión regular un control sobre la posición del texto a buscar (si está al lado del principio o del final de una línea), pero no para hacer sustituciones simples.
En el caso del HTML que propones, se podría entonces hacer de la misma forma que propones al principio:
Using perl Syntax Highlighting
$string = "<h1> texto
</h1>";
$string =~ s/<h1>\s*(.+?)\s*<\/h1>/{$1}/i;
print $string; # {texto}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Fíjate que usamos '\s' tanto para quitar los espacios en blanco como los retornos de carro.