开始Perl <stdin> </stdin>

时间:2012-04-22 02:25:21

标签: perl

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

3 个答案:

答案 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