Подтвердить что ты не робот

Perl, как определить, является ли переменное значение числом?

Есть ли уникальный метод для определения того, является ли значение переменной число, так как значения могут быть также в научной нотации (например, 5.814e-10)?

4b9b3361

Ответ 1

Основной модуль Scalar::Util экспортирует looks_like_number(), который предоставляет доступ к базовому API Perl.

looks_like_number EXPR

Возвращает true, если perl считает, что EXPR - это число.

Ответ 2

From perlfaq4: Как определить, является ли скаляр числом/целым/целочисленным/плавающим?

    if (/\D/)            { print "has nondigits\n" }
    if (/^\d+$/)         { print "is a whole number\n" }
    if (/^-?\d+$/)       { print "is an integer\n" }
    if (/^[+-]?\d+$/)    { print "is a +/- integer\n" }
    if (/^-?\d+\.?\d*$/) { print "is a real number\n" }
    if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) { print "is a decimal number\n" }
    if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
            { print "a C float\n" }

Существуют также некоторые часто используемые модули для задачи.

Scalar::Util (распространяется с 5.8) обеспечивает доступ к внутренней функции perl looks_like_number для определения того, выглядит ли переменная как число.

Data::Types экспортирует функции, которые проверяют типы данных, используя как вышеуказанные, так и другие регулярные выражения.

В-третьих, существует Regexp::Common, который имеет регулярные выражения для соответствия различным типам чисел.

Эти три модуля доступны из CPAN