我有一个条件:
next if ( ! ($x or $y or $z) );
Run Code Online (Sandbox Code Playgroud)
检查的逻辑是至少有一个必须在数值上非零才能在循环中继续.
我相信他们实际上是数字.
问题是perl将float作为字符串存储在内部.所以在检查! $x
那里$x='0.00'
实际上并不评估为true:my $x = 0.00;
if ( ! $x ) { never_gets_here(); }
在不使行过于冗长的情况下强制对变量进行数值求值的最简单方法是什么?
fri*_*edo 10
我不确定你在哪里知道Perl将浮动存储为字符串.浮点数和字符串是不同的东西:
perl -le 'print 1 if 0.00'
perl -le 'print 2 if "0.00"'
2
Run Code Online (Sandbox Code Playgroud)
如果要在未知标量上强制数字上下文,则可以向其添加零,例如
unless ( $x + 0 ) { ... }
Run Code Online (Sandbox Code Playgroud)
如果要检查数字是否在数字上非零,则有一个运算符:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1146 次 |
最近记录: |