La question initiale était de savoir comment savoir si une variable était numérique, et non si elle "a une valeur numérique".
Il existe quelques opérateurs qui ont des modes de fonctionnement séparés pour les opérandes numériques et de chaîne, où "numérique" signifie tout ce qui était à l'origine un nombre ou qui a déjà été utilisé dans un contexte numérique (par exemple $x = "123"; 0+$x
, avant l'addition, il $x
y a une chaîne, après est considéré comme numérique).
Une façon de le dire est la suivante:
if ( length( do { no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
Si la fonctionnalité au niveau du bit est activée, cela crée &
uniquement un opérateur numérique et ajoute un &.
opérateur de chaîne distinct , vous devez la désactiver:
if ( length( do { no if $] >= 5.022, "feature", "bitwise"; no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
(au niveau du bit est disponible dans perl 5.022 et au-dessus, et activé par défaut si vous use 5.028;
ou au-dessus.)
perldoc perlapi
nous dit: Teste si le contenu d'un SV ressemble à un nombre (ou est un nombre). "Inf" et "Infinity" sont traités comme des nombres (donc n'émettra pas d'avertissement non numérique), même si votre atof () ne les fait pas. À peine une spécification testable ...