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

时间:2011-03-11 13:01:31

标签: regex perl numbers perl-module

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

4 个答案:

答案 0 :(得分:23)

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

  

looks_like_number EXPR

     

如果perl认为EXPR是一个数字,则返回true。

答案 1 :(得分:16)

来自perlfaq4:How do I determine whether a scalar is a number/whole/integer/float

    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获得

答案 2 :(得分:9)

答案 3 :(得分:0)

改编自 How do I tell if a variable has a numeric value in Perl? -

中的答案
for my $testable ( qw( 1 5.25 0.001 1.3e8 foo bar 1dd 0 ) )
{
    printf("%10s %s a number\n",
           $testable,
           isa_number($testable) ? "is" : "isn't")
}

sub isa_number {
    use warnings FATAL => qw/numeric/;
    my $arg = shift;
    return unless defined $arg;
    eval { $arg + 0; 1 };
}