Ich stelle fest, dass looks_like_number nicht einfach true/false zurückgibt, wie ich angenommen habe, sondern tatsächlich ein Byte zurückgibt, das den Typ der Zahl angibt, die die Perl-Internals im Skalar gespeichert haben. Zum Beispiel:Scalar :: Util looks_like_number zurückkehrende Zahlentypen
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
Es ist nicht wirklich in Scalar dokumentiert :: Util, dass ich nur eine Erwähnung davon perlapi des looks_like_number Wert zurückgibt, die auch in der Dokumentation nicht finden kann. Auf einen Blick scheint es zu sein:
- & 1 = Numerisch
- & 2 = 64 bit
- & 4 = Gleitkomma
- & 8 = Negativ
- & 16 = unendlich
- & 32 = keine Nummer
Sind diese Masken tragbar und sicher im Code zu verwenden?
Für was es sich lohnt 'looks_like_number()' scheint die gleichen Werte für Ihre Beispieleingaben auf allen stabilen Perls seit 5.8, mindestens auf Linux 32-Bit. Natürlich ist die umsichtige Antwort auf Ihre Frage immer noch "Nein". – pilcrow
Ab Scalar :: Util 1.39 wurde dies geändert, und 'looks_like_number' gibt immer' PL_yes' oder 'PL_no' (d. H.' !! 1' oder '!! 0') zurück. – tobyink