La expresión regular que estas usando es valida solo si no existe el carácter
a o
b, en el string. Ej:
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: c
No pertenece al lenguaje
[yoya@Fedora Escritorio]$ perl a.pl
Ingrese nombre de usuario: a
Si pertenece
[yoya@Fedora Escritorio]$
#!/usr/bin/perl
print "Ingrese nombre de usuario: "; $nombre=<STDIN>;
#analiso si la cadena no contiene a,b y analiso si la cadena es vacia
if($nombre =~ m/^[a-z\ñ]+$/i) {
print 'Si pertenece', "\n"; }else{
print 'No pertenece', "\n"; }
Con esta compruebo que en la cadena entera debe existir solo las letras del alfabeto, desde el inicio al final.
Saludos.