Die ursprüngliche Frage war, wie man erkennt, ob eine Variable numerisch ist, nicht, ob sie "einen numerischen Wert hat".
Es gibt einige Operatoren, die getrennte Betriebsmodi für numerische und Zeichenfolgenoperanden haben, wobei "numerisch" alles bedeutet, was ursprünglich eine Zahl war oder jemals in einem numerischen Kontext verwendet wurde (z. B. in $x = "123"; 0+$x
, bevor die Addition $x
eine Zeichenfolge ist, danach wird als numerisch betrachtet).
Eine Möglichkeit zu sagen ist folgende:
if ( length( do { no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
Wenn die bitweise Funktion aktiviert ist, die &
nur einen numerischen Operator erstellt und einen separaten Zeichenfolgenoperator hinzufügt &.
, müssen Sie sie deaktivieren:
if ( length( do { no if $] >= 5.022, "feature", "bitwise"; no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
(bitweise ist in Perl 5.022 und höher verfügbar und standardmäßig aktiviert, wenn Sie use 5.028;
oder höher.)
perldoc perlapi
Wenn Sie dem Pfad folgen, erfahren Sie: Testen Sie, ob der Inhalt eines SV wie eine Zahl aussieht (oder eine Zahl ist). "Inf" und "Infinity" werden als Zahlen behandelt (es wird also keine nicht numerische Warnung ausgegeben), auch wenn Ihr atof () sie nicht erfasst. Kaum eine testbare Spezifikation ...