Pierwotne pytanie dotyczyło tego, jak stwierdzić, czy zmienna jest numeryczna, a nie czy „ma wartość liczbową”.
Istnieje kilka operatorów, które mają oddzielne tryby działania dla operandów numerycznych i łańcuchowych, gdzie „numeryczny” oznacza wszystko, co pierwotnie było liczbą lub było kiedykolwiek użyte w kontekście numerycznym (np. $x = "123"; 0+$x
Przed dodaniem $x
jest ciągiem, a następnie jest uważany za numeryczny).
Można to stwierdzić na przykład:
if ( length( do { no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
Jeśli funkcja bitowa jest włączona, to tworzy &
tylko operator numeryczny i dodaje oddzielny &.
operator ciągu , musisz ją wyłączyć:
if ( length( do { no if $] >= 5.022, "feature", "bitwise"; no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
(bitowe jest dostępne w Perlu 5.022 i nowszych i domyślnie włączone, jeśli Ty use 5.028;
lub powyżej).
perldoc perlapi
mówi nam: Sprawdź, czy zawartość SV wygląda jak liczba (lub jest liczbą). "Inf" i "Infinity" są traktowane jako liczby (więc nie będą generować ostrzeżeń nienumerycznych), nawet jeśli atof () ich nie rozumie. Trudno testowalna specyfikacja ...