这是一个非常简单且非关键的问题。我之前有一些编程背景(从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行。是否与enter键有关?如果是这样,为什么同一程序的oct版本没有问题?
答案 0 :(得分:8)
问题是$number
中还有行终止符;使用chomp
删除它。
答案 1 :(得分:0)
与十六进制函数不同,oct函数剥离非数字。从文档“在没有警告的情况下忽略前导空格,以及任何尾随非数字”
答案 2 :(得分:0)
您不必使用排骨吗?
$number = <STDIN>;
chomp $number; # Line added in by me
print hex($number), "\n";
或者您可以在变量周围加上括号,如下所示:
chomp ($number); # With parenthesis