2012-04-22 23 views
5

Esta es una pregunta muy simple y no crítica. Tengo algunos antecedentes de programación hace eones (comenzando con FORTRAN, eso es hace cuánto tiempo) y estoy trabajando en aprender algunos conceptos básicos de la codificación perl usando Beginning Perl de Simon Cozen. Las asignaciones del capítulo 2 incluyen escribir un programa simple para interpretar una entrada entera (<STDIN>) e imprimir el entero decimal igual al número. Tengo Windows 7. Cuando se introduce el número entero, el programa emite la advertenciaPerl inicial <STDIN>

Illegal hexadecimal digit ' 
' ignored at [path] line [the line containing the print instruction], <STDIN> line 1 

Entonces lo hace imprimir el número hexadecimal correcto.

El código es

$number = <STDIN>; 
print hex($number), "\n"; 

Cuando cambio el programa para emitir una octal no consigo la advertencia.

La advertencia dice que el dígito ilegal se produce en la línea de impresión aunque hace referencia a la línea STDIN. ¿Tiene que ver con la tecla enter? Si es así, ¿por qué la versión oct del mismo programa no tiene un problema?

Respuesta

8

El problema es que $number tiene el terminador de línea todavía; usa chomp para eliminarlo.

+1

Y, en particular, 'chomp ($ number = );' es idiomático. – Sean

+0

Ver 'perldoc -f chomp' para más detalles. – shawnhcorey

0

A diferencia de la función hexadecimal, la función oct elimina los números que no son números. De los documentos "El espacio en blanco inicial se ignora sin previo aviso, como también lo son los dígitos que no salen"