在perl中将数字视为数字的最简单方法?

时间:2011-11-16 18:29:47

标签: perl

我有条件:

next if ( ! ($x or $y or $z) );

检查的逻辑是,至少有一个必须在数字上非零才能继续循环。

我相信他们实际上是数字。

问题是perl在内部将浮点数存储为字符串。因此,检查! $x $x='0.00'实际上未评估为真的my $x = 0.00; if ( ! $x ) { never_gets_here(); }

在不使行过于冗长的情况下强制对变量进行数值求值的最简单方法是什么?

5 个答案:

答案 0 :(得分:10)

我不确定你在哪里知道Perl将浮动存储为字符串。浮点数和字符串是不同的东西:

perl -le 'print 1 if 0.00'
perl -le 'print 2 if "0.00"'
2

如果要在未知标量上强制使用数字上下文,则只需向其添加零,例如

unless ( $x + 0 ) { ... }

答案 1 :(得分:8)

如果你想检查一个数字是否在数字上非零,那么就有一个算子:

next if (! ($x != 0 or $y != 0 or $z != 0) )

    $x       bool $x      $x != 0
 --------   --------    ----------------------------
    0        false       false
  '0.00'     true        false
  '0E0'      true        false
  'string'   true        false, generates 'non-numeric' warning
    ''       false       false, generates 'non-numeric' warning
   undef     false       false, generates 'non-numeric' warning

答案 2 :(得分:4)

要检查数字是否具有非零值,您只需添加0:

$ perl -e "print '0.02' + 0;"
0.02

$ perl -e "print '0.00' + 0;"
0

这是Perl中的虚假值:

$ perl -e "print (('0.00' + 0) ? 'true' : 'false');"
false

答案 3 :(得分:2)

将零(0)添加到变量中(就像在' awk'中一样)。

答案 4 :(得分:0)

如果没有(或排他地)负值,您可以使用以下快捷方式,这比为每个单独的值添加零更清晰:

next if ( $x + $y + $z == 0 );