这是一个非常简单且非关键的问题。我有一些亿万年前的编程背景(从FORTRAN开始,那是很久以前的事了),并且正在努力使用Simon Cozen的Beginning Perl学习perl编码的一些基础知识。第2章的作业包括编写一个简单的程序来解释整数条目(<STDIN>
)和打印等于数字的十进制整数。我有Windows 7。输入整数时,程序输出警告
Illegal hexadecimal digit '
' ignored at [path] line [the line containing the print instruction], <STDIN> line 1
然后它会打印正确的十六进制数。
代码是
$number = <STDIN>;
print hex($number), "n";
当我更改程序以输出八进制时,我没有收到警告。
警告指出非法数字出现在打印行,即使它引用了 STDIN 行。它与回车键有关吗?如果是这样,为什么同一程序的oct版本没有问题?
问题是$number
里面仍然有行终止符; 使用chomp
将其删除。
与十六进制函数不同,oct 函数去除非数字。 来自文档"前导空格将在没有警告的情况下被忽略,任何尾随的非数字也是如此"
你不必使用 chomp 吗?
$number = <STDIN>;
chomp $number; # Line added in by me
print hex($number), "n";
或者你可以在变量周围加上括号,如下所示:
chomp ($number); # With parenthesis