【问题标题】:Beginning Perl <STDIN>开始 Perl <STDIN>
【发布时间】:2012-04-22 02:25:21
【问题描述】:

这是一个非常简单且非关键的问题。我很久以前就有一些编程背景(从 FORTRAN 开始,那是很久以前的事了),并且正在使用 Simon Cozen 的 Beginning Perl 学习一些 perl 编码的基础知识。第 2 章的作业包括编写一个简单的程序来解释一个整数条目 (&lt;STDIN&gt;) 并打印等于该数字的十进制整数。我有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版本没有问题?

【问题讨论】:

    标签: perl


    【解决方案1】:

    问题是$number 里面还有行终止符;使用chomp 删除它。

    【讨论】:

    • 尤其是chomp($number = &lt;STDIN&gt;); 是惯用语。
    • 详情请见perldoc -f chomp。
    【解决方案2】:

    与 hex 函数不同,oct 函数会去除非数字。来自文档“前导空白被忽略而不发出警告,任何尾随非数字也是如此”

    【讨论】:

      【解决方案3】:

      你不必使用 chomp 吗?

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

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

      chomp ($number); # With parenthesis
      

      【讨论】:

        猜你喜欢
        • 2012-03-25
        • 2022-12-05
        • 2013-06-13
        • 2011-11-28
        • 1970-01-01
        • 2020-07-14
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多