5

这是一个非常简单且非关键的问题。我很久以前就有一些编程背景(从 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版本没有问题?

4

3 回答 3

8

问题是$number它仍然有行终止符;用于chomp删除它。

于 2012-04-22T02:28:39.280 回答
0

与 hex 函数不同,oct 函数去除非数字。来自文档“在没有警告的情况下忽略前导空格,任何尾随非数字也是如此”

于 2012-04-22T05:23:25.333 回答
0

你不必使用chomp吗?

$number = <STDIN>;
chomp $number; # Line added in by me
print hex($number), "\n";

或者你可以像这样在变量周围加上括号:

chomp ($number); # With parenthesis
于 2020-05-22T21:16:08.617 回答