Perl,如何确定变量值是否为数字?

Gor*_*don 10 regex perl numbers perl-module

是否有一种独特的方法来确定变量值是否为数字,因为这些值也可以是科学记数法(例如,5.814e-10)?

Tim*_*Tim 23

核心模块Scalar::Util导出looks_like_number(),可以访问底层的Perl API.

looks_like_number EXPR

如果perl think EXPR是一个数字,则返回true .


Nik*_*ain 16

从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" }
Run Code Online (Sandbox Code Playgroud)

还有一些常用的任务模块.

Scalar::Util(与5.8一起分发)提供对perl内部函数的访问,looks_like_number以确定变量是否看起来像数字.

Data::Types 导出使用上述和其他正则表达式验证数据类型的函数.

第三,有正Regexp::Common则表达式匹配各种类型的数字.

这三个模块可从CPAN获得