2012-04-22 4 views
5

Dies ist eine sehr einfache und unkritische Frage. Ich habe einige Programmier-Hintergrund vor Äonen (beginnend mit FORTRAN, das ist wie lange her) und arbeite daran, einige Grundlagen der Perl-Codierung mit Simon Cozen Anfang Perl zu lernen. Zu den Zuweisungen in Kapitel 2 gehört das Schreiben eines einfachen Programms zur Interpretation eines ganzzahligen Eintrags (<STDIN>) und das Drucken der Dezimalzahl, die der Zahl entspricht. Ich habe Windows 7. Wenn die ganze Zahl eingegeben wird, gibt das Programm die WarnungAnfang Perl <STDIN>

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

Dann tut es die richtige Hex-Zahl drucken.

Der Code ist

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

Wenn ich das Programm zur Ausgabe eines Oktal ändern Ich habe nicht die Warnung.

Die Warnung besagt, dass die ungültige Ziffer in der Druckzeile auftritt, obwohl sie auf die STDIN-Zeile verweist. Hat es mit der Enter-Taste zu tun? Wenn ja, warum hat die oct-Version des gleichen Programms kein Problem?

Antwort

8

Das Problem ist, dass $number hat den Leitungsabschluss in ihm immer noch; Verwenden Sie chomp, um es zu entfernen.

+1

Und insbesondere 'chomp ($ number = );' ist idiomatisch. – Sean

+0

Siehe 'perldoc -f chomp' für Details. – shawnhcorey

0

Im Gegensatz zur Hex-Funktion entfernt die oct-Funktion Nicht-Zahlen. Aus den Dokumenten "Führender Leerraum wird ohne Vorwarnung ignoriert, wie auch alle nachfolgenden Nicht-Ziffern"