Ho notato che looks_like_number non restituisce semplicemente true/false come presumibilmente, ma restituisce effettivamente un byte che indica il tipo di numero che gli interni di perl sono memorizzati nello scalare. Per esempio:Scalare :: Util looks_like_number restituire i tipi di numero
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
In realtà non è documentato in Scalar :: Util che posso trovare, solo una menzione di esso restituire valore looks_like_number di perlapi, che non è anche nella documentazione. In sintesi, sembra essere:
- & 1 = numerico
- & 2 = 64 bit
- & 4 = virgola mobile
- & 8 = negativo
- & 16 = infinito
- & 32 = non un numero
Queste maschere sono portatili e sicure da utilizzare nel codice?
Per quello che vale 'looks_like_number()' sembra restituire gli stessi valori per gli input di esempio su tutti i perls stabili dal 5.8, almeno su Linux a 32 bit. Certo, la risposta prudente alla tua domanda è ancora "no". – pilcrow
A partire da Scalar :: Util 1.39, questo è stato modificato, e 'looks_like_number' restituisce sempre' PL_yes' o 'PL_no' (cioè' !! 1' o '!! 0'). – tobyink