"不是数字"来自perl的警告

时间:2016-02-04 13:40:35

标签: perl

Perl一直告诉我' 11'从我的输入文件不是数字。上次我检查11是一个数字,所以我有点困惑这里的问题是什么,因此从哪里开始寻找。

有趣的是,它输入文件的第1行导致了问题,第2行以后的数字被正确解释。

Argument "11" isn't numeric in numeric eq (==) at ./extract.pl line 200, <INPUTFILE> line 1.

第200行

if ($_data[0] == $_ch && !exists $_ch_sn{$_data[1]}) { $_ch_sn{$_data[1]} = undef; }

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

错误是由我的inputfile中的BOM引起的。在Vi中使用setlocal nobomb解决了问题!

答案 1 :(得分:2)

源可能实际上不包含11(例如,它可能包含一个类似于一个但不是'的字符),但我怀疑警告消息错误地识别了表达式为非数字 [1]

在该行上出现类似于11的任何内容似乎都支持 [2]

所以假装你得到了以下警告:

Argument isn't numeric in numeric eq (==) at ./extract.pl line 200, <INPUTFILE> line 1.

这意味着$_data[0]$_ch是非数字字符串 [2]

  • 如果两者都是数字,请确定哪一个不是,可能使用以下代码:

    use Data::Dumper; { local $Data::Dumper::Useqq = 1; warn(Dumper($_data[0], $_ch)); }
    

    一旦确定哪个变量出错,请调试以找出原因。

  • 如果它们可以合法地为非数字,请添加适当的检查以处理这种情况。

  1. 出于性能原因,错误消息的这一部分是从编译后的代码中推导出来的,这是一个复杂且不可靠的过程。

  2. 我假设if没有elsif条款。来自elsif条件的警告似乎来自if声明。