是否有唯一的方法来确定变量值是否为 一个数字,因为这些值也可以是科学记数法(例如,5.814e-10)?
答案 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)
还有String::Numeric和Regexp::Common::number ..看起来很方便。 String :: Numeric也有"a comparison with Scalar::Util::looks_like_number()"
答案 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 };
}