Perl入门 <STDIN>

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行。这是否与回车键有关?如果是这样,为什么同一程序的八进制版本没有问题?
3个回答

8
问题在于$number仍然带有行终止符,请使用chomp去除它。

1
特别是,chomp($number = <STDIN>); 是惯用语。 - Sean
请参阅 perldoc -f chomp 以获取详细信息。 - shawnhcorey

0
与 hex 函数不同,oct 函数会去除非数字字符。根据文档所述,“前导空格将被忽略而不给出警告,同样地,任何尾随的非数字字符也将被忽略”。

0

你不需要使用 chomp 吗?

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

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

chomp ($number); # With parenthesis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接