Початкове питання полягало в тому, як визначити, чи змінна є числовою, а не якщо вона "має числове значення".
Є кілька операторів, які мають окремі режими роботи для числових та рядкових операндів, де "числовий" означає все, що спочатку було числом або коли-небудь використовувалося в числовому контексті (наприклад $x = "123"; 0+$x
, перед додаванням $x
є рядком, а потім - вважається числовим).
Один із способів сказати це:
if ( length( do { no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
Якщо побітова функція ввімкнена, що робить &
лише числовий оператор і додає окремий рядковий &.
оператор, ви повинні його відключити:
if ( length( do { no if $] >= 5.022, "feature", "bitwise"; no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
(побітове доступне в perl 5.022 і вище та ввімкнено за замовчуванням, якщо ви use 5.028;
або вище.)
perldoc perlapi
говорять нам: Перевірте, чи зміст SV виглядає як число (чи це число). "Inf" та "Infinity" розглядаються як цифри (тому не видаватимуть нечислове попередження), навіть якщо ваш atof () їх не перебирає. Навряд чи можна перевірити специфікацію ...