Se puede hacer de varias maneras.
Una de ellas es sumar un '0' al valor que nos manda el usuario, y de esa manera se convierte, sí o sí, en un número. Si hubiese entrada una letra (o más), al sumarle el '0', seguirá dando un '0', y de esa manera podemos informar de un error (siempre y cuando consideremos que meter un '0' no es tampoco correcto).
Using perl Syntax Highlighting
if (0+ $entrada) {
# entró un número (positivo)
}
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Otra forma es por medio de una expresión regular.
Using perl Syntax Highlighting
print "Por favor, introduzca un número: ";
chomp(my $entrada = <>);
if ($entrada =~ /^\d+$/) { # de principio a fin, un conjunto de dígitos
# entró un número
}
else {
# entró otra cosa
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Otra opción es usar la función looks_like_number() del módulo
Scalar::Util (incluido en Perl).
Using perl Syntax Highlighting
use Scalar::Util 'looks_like_number';
chomp(my $entrada = <>);
my $es_un_numero = looks_like_number( $entrada );
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Devuelve verdadero si perl cree que $entrada contiene un número.
Hay formas más elaboradas. Todo depende de la entrada que quieras considerar.