由于warningspragma并没有抱怨'NaN'和'nan'是非数字的,所以我有点惊讶(并且害怕).
为什么不warnings排放'Argument isn't numeric in addition (+)他们的习惯?
测试用例
$ perl -Mstrict -wE 'say 0+$_ for qw/string NaN nan fail/;'
Argument "string" isn't numeric in addition (+) at -e line 1.
0
0
0
Argument "fail" isn't numeric in addition (+) at -e line 1.
0
Run Code Online (Sandbox Code Playgroud)
mat*_*ull 10
来自perlop
二进制"<=>"返回-1,0或1,具体取决于左参数是否在数值上小于,等于或大于右参数.如果您的平台支持NaN(非数字)作为数值,则将它们与"<=>"一起使用将返回undef.NaN不是"<","==",">","<="或"> ="任何东西(甚至是NaN),所以那些5返回false.NaN!= NaN返回true,NaN也是如此!=其他任何东西.
如果您的平台不支持NaN,那么NaN只是一个数字值为0的字符串.
NaN在不同平台上表现不同.它在某种程度上是数值的,因为它可以在数值运算中起作用.但它也不是一个数字,因为它具有未定义的价值.
此外,它的行为不可移植:
perl -E "say 'yes' if 0 == 'NaN'"
Run Code Online (Sandbox Code Playgroud)
除非您使用Perl 5.22或更高版本,否则可能会在不同平台上产生不同的结果.