我注意到Looks_like_number不会像我假设的那样简单地返回true / false,但实际上返回一个字节,指示perl内部所说的数字类型存储在标量中。例如:
perl -e'use Scalar::Util qw/looks_like_number/; for (qw/ 1 3 10 34.23 545435.234 2343.0 234 -1423 1sddf -865178652134876152348761253487613254 sdf 24363456345636534563567253765734655 8764325hjkh435 iuh340874 &*^*& 786521948761324876132497821347816.23452345 -8762135487126387432.12435154243 0 nan inf/) { print $_, ": ", looks_like_number($_), "\n" } '
1: 1
3: 1
10: 1
34.23: 5
545435.234: 5
2343.0: 5
234: 1
-1423: 9
1sddf: 0
-865178652134876152348761253487613254: 10
sdf: 0
24363456345636534563567253765734655: 2
8764325hjkh435: 0
iuh340874: 0
&*^*&: 0
786521948761324876132497821347816.23452345: 6
-8762135487126387432.12435154243: 14
0: 1
nan: 36
inf: 20
我在Scalar :: Util中实际上没有记录,只是提到它返回perlapi的look_like_number值,这也不在文档中。乍一看,似乎是:
这些面具是否便于携带并且可以安全地在代码中使用?
答案 0 :(得分:5)
不,如果没有记录,则可能会发生变化。而“数字”和“64位”并不是对这些标志的充分描述。在Perl代码中,他们做所做的事情似乎并不特别有用。
你想解决什么问题?
答案 1 :(得分:1)
不依赖于未记录的行为,返回值绑定到Perl的内部,它可以(并且可能会)在将来发生变化;它可能会有所不同,具体取决于您运行脚本的平台/架构!
如果您想测试NaN,无穷大或负零,请参阅this question。