将空字符串与数字进行比较

时间:2014-11-05 09:40:06

标签: perl

我有全球价值:

my $gPrevious ='';

# main();
func();

sub func {
  my $localval = 52552;

  if ($gPrevious != $localval) {
      ------------
     x statements;
  }
}

输出:

  

论证""数字ne(!=)第x行没有数字。

为什么我使用ne运算符?

我在这里与空字符串进行比较。

3 个答案:

答案 0 :(得分:2)

undef专门用于测试变量是否已定义。在将变量与数字进行比较时,将变量初始化为字符串会使此目的失效。

您应该保留$gPrevious变量 undefined ,并在子程序中测试它。

喜欢这个

my $gPrevious;

func();

sub func {
  my $localval = 52552;

  unless (defined $gPrevious and $gPrevious == $localval) {
    # x statements;
  }
}

答案 1 :(得分:0)

使用'=='或'!='比较运算符需要两个数字。

如果两个中的一个是perl可以很容易地生成诸如“1”的数字的字符串,perl将执行您想要的操作并比较1。

但是:如果你将字符串或undef与'!='运算符进行比较,就会出现警告。

在你的情况下,我建议你只使用

$gPrevious = 0;
# ...
if ( $gPrevious != $local_val ){ #...

将摆脱警告并正常工作。

测试已定义是另一种可能性,而测试整数并非易事。

您可以使用eq代替,但这是有问题的,例如'1.0'ne'1'。

答案 2 :(得分:0)

Perl为字符串比较(eq / ne)和数字比较(== /!=)提供了两个独立的运算符。 LHS值必须与使用的运算符类型相匹配。在您的情况下,LHS是一个字符串,您使用数字运算符进行比较。因此,错误。