La question initiale était de savoir si une variable était numérique, et non si elle "avait une valeur numérique".
Certains opérateurs ont des modes de fonctionnement distincts pour les opérandes numériques et les opérandes de type chaîne de caractères, le terme "numérique" désignant tout ce qui était à l'origine un nombre ou qui a été utilisé dans un contexte numérique (par exemple dans $x = "123"; 0+$x
avant l'ajout, $x
est une chaîne de caractères, il est ensuite considéré comme numérique).
Voici un moyen de le savoir :
if ( length( do { no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
Si la fonction "bitwise" est activée, cela signifie que &
n'est qu'un opérateur numérique et ajoute une chaîne de caractères distincte &.
vous devez le désactiver :
if ( length( do { no if $] >= 5.022, "feature", "bitwise"; no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
(bitwise est disponible dans perl 5.022 et plus, et activé par défaut si vous utilisez la fonction use 5.028;
ou plus).