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