Por cierto, me permito hacer otra aclaración que nadie hizo. El operador (función) m (
match) de Perl, es TOTALMENTE INNECESARIO en las expresiones que pegaron antes.
Usaría el operador de matching si fuera a delimitar la expresión
de otra forma, por ejemplo:
m#^[a|b]+$#
m:^[a|b]+$:
m%^[a|b]+$%
En caso de usar slashes ( / ), el operador m no es necesario, porque está implícito. Es lo mismo ponerlo que no hacerlo.
~ Yoya ~: Tu expresión tampoco matchea lo que dices que matchearía, o lo que debería. La expresión
m/^[a-z\ñ]+$/i lo que hace es devolver verdadero (1) si la cadena está conformada con caracteres de la 'a' a la 'z' incluyendo la 'ñ', tanto mayúsculas como minúsculas.
La otra expresión:
if ($nombre =~ m/[^ab]/ | $nombre =~ m/^$/)
lo que hace es verificar que la cadena EMPIECE por 'a' o 'b', pero dará como válido cosas como 'astilla' o 'barco'.
Saludos