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

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

Ответ 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