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; }
非常感谢任何帮助!
答案 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)); }
一旦确定哪个变量出错,请调试以找出原因。
如果它们可以合法地为非数字,请添加适当的检查以处理这种情况。
出于性能原因,错误消息的这一部分是从编译后的代码中推导出来的,这是一个复杂且不可靠的过程。
我假设if
没有elsif
条款。来自elsif
条件的警告似乎来自if
声明。