2 perl
sub is_integer {
defined $_[0] && $_[0] =~ /^[+-]?\d+$/;
}
sub is_float {
defined $_[0] && $_[0] =~ /^[+-]?\d+(\.\d+)?$/;
}
Run Code Online (Sandbox Code Playgroud)
对于上面提到的代码,如果我们给出输入999999999999999999999999999999999999999999,它给出的输出不是实数.
为什么它表现得那样?
我忘了再说一件事:
如果我使用此代码$x作为上述值:
if($x > 0 || $x <= 0 ) {
print "Real";
}
Run Code Online (Sandbox Code Playgroud)
输出是real.
这怎么可能?
Mic*_*rny 10
$ perl -e 'print 999999999999999999999999999999999999999999'
1e+42
Run Code Online (Sandbox Code Playgroud)
即Perl对此数字使用科学表示,这就是你的正则表达式不匹配的原因.
使用Scalar :: Util(这是一个核心模块)中的looks_like_number函数.
use Scalar::Util qw( looks_like_number );
say "Number" if looks_like_number 999999999999999999999999999999999999999999;
# above prints "Number"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |