9

私は、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のlooks_like_number値を返すことについて言及しているだけですが、これも文書化されていません。一見すると、次のように見えます。

  • &1=数値
  • &2=64ビット
  • &4=浮動小数点
  • &8=負
  • &16=無限大
  • &32=数値ではありません

これらのマスクはポータブルで、コードで安全に使用できますか?

4

2 に答える 2

5

いいえ、文書化されていない場合、変更される可能性があります。また、「数値」と「64 ビット」は、これらのフラグの適切な説明ではありません。それらが何をするかは、Perl コードで知っていても特に役に立たないようです。

どのような問題を解決しようとしていますか?

于 2013-02-14T15:34:33.793 に答える
1

文書化されていない動作に依存しないでください。戻り値は Perl の内部にバインドされており、将来変更される可能性があります (おそらく変更される可能性があります)。スクリプトが実行されているプラ​​ットフォーム/アーキテクチャによっても異なる場合があります。

NaN、無限大、または負のゼロをテストする場合は、この質問を参照してください。

于 2013-02-14T15:39:40.727 に答える